Terraform beginner guide

이 문서는 https://learn.hashicorp.com/terraform/   자료를 기반으로 간단히 만든 문서입니다.

Terraform 이 무엇인가요?

https://www.hashicorp.com/products/terraform  : Provision any infrastructure for any application

https://www.terraform.io/intro/index.html  : Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.

 

클라우드 뿐만 아니라 다양한 인프라스트럭처 리소스를 지원합니다.

https://www.terraform.io/docs/providers/

 

실습하기 : https://learn.hashicorp.com/terraform/  

Getting Started

Terraform 전체적인 실습

클라우드를 가지고 실습하기 전에 docker를 이용해서 terraform 실습을 해볼 수 있음.

Get Started - Docker 문서로 실습을 한다. https://learn.hashicorp.com/collections/terraform/docker-get-started

사전에 PC에 Docker를 설치해서 실습할 수도 있으며 위의 가이드에서 제공되는 웹브라우저에서 테스팅을 해 볼 수도 있다. 웹브라우저를 이용하면 속도가 느리기는 하지만 사전에 PC를 세팅하지 않고도 편리하게 실습을 할 수 있다.

Terraform 설치

https://www.terraform.io/downloads.html  에서 OS에 맞는 파일 다운로드 (zip 파일) 하고 PATH 설정

mac 에서 brew로 설치 가능

brew install terraform

 

terraform 버전이 다른 경우 실행을 할 때 에러가 날 수 있음. 해당 provider 의 릴리즈 노트를 참고해야 하는 경우도 있음. 

빌드 인프라스트럭처

AWS 환경설정

terraform에서 AWS credentials(access_key, secret_key)를 설정하지 않으면 terraform에서는 자동으로  ~/.aws/credentials 등의 디렉토리에서 API credentails를 찾거나 IAM instance profile credentials 에서 찾는다. Terraform 코드에서 IAM credentials를 저장하지 않는 것이 보안상으로 안전하다.

https://docs.aws.amazon.com/ko_kr/general/latest/gr/aws-access-keys-best-practices.html

 

여러 개의  AWS Account  를 가지고 있는 경우  Named Profiles 를 이용하면 편리하다.

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-configure-profiles.html

 

aws cli 를 설치하여 정상 작동하는지 확인을 한다. 

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-install.html

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-configure.html

 

http://example.tf  

provider "aws" { region = "ap-northeast-2" } resource "aws_instance" "example" { ami = "ami-a414b9ca" # Canonical, Ubuntu, 16.04 LTS, amd64 xenial image build on 2018-03-06 instance_type = "t2.micro" tags = { Name = "your_name" Owner = "your_name" Environment = "staging" } }

 

terraform init

terraform plan

terraform apply

terraform show

 

terraform.tfstate : terraform 을 통해서 생성한 리소스 기록을 하고 있음. terraform 을 실행할 때 함께 있어야 하며 remote state 설정을 하여 원격에 둘 수도 있다.

 

provisioning : ec2 instance 올린 후 스크립트 실행 등

변경 인프라스트럭처

소스 변경 후 terraform apply

삭제

terraform destroy

리소스 의존성

http://example.tf 에 다음 코드 추가하고 terraform 실행하

resource "aws_eip" "ip" { instance = "${aws_instance.example.id}" }

 

명시적/비명시적 의존성

depends_on argument

Provision

instance 올리고 초기화 작업. provisioner를 통해 파일 업로드, 쉘스크립트 실행, 소프트웨어 설치 등 작업 진행할 수 있음

여러 개의 provisioner 블락을 지원함. (chef, local-exec, remote-exec, salt-masterless). salt, ansible 연동 등. Provisioners | Terraform | HashiCorp Developer

Input 변수

variables.tf  파일에 다음의 내용을 담는다.

 

http://example.tf 에서 region 설정을 변경한다.

 

변수할당하기 : 커맨드 라인 플래그, 파일, 환경변수(TF_VAR_name), UI input. default 를 설정한 경우 기본값 사용.

 

Lists

 

Maps

Output 변수

리소스의 다양한 속성값이 있다. 그중 필요한 값을 출력할 수 있다. terraform apply 를 호출할 때 출력이 되고 terraform output 명령을 통해서도 질의할 수 있다.

*.tf 파일에 다음 내용 추가하고 확인. (terraform output ip)

Modules

지금까지는 Terraform 설정을 직접 수정하여 작업을 하였다. 인프라스트럭처가 커짐에 따라서 여러가지 문제가 발생한다. 조직화의 부족, 재사용성 부족, 티 차원에서의 관리가 힘든 것 등. 

 

Terraform Modules 는 그룹으로 관리할 수 있는 테라폼 설정을 담은 패키지이다. Modules는 재사용 가능한 컴포넌트 생성, 조직화 개선, 인프라스터럭쳐를 블랙 박스로 취급하는데 사용을 한다.

 

Terraform Registry https://registry.terraform.io/browse?provider=aws

 

source, version

 

Terraform Remote

지금까지는 로컬 컴퓨터에서 인프라스트럭쳐를 만들고 생성하였다. 실환경에서는 인프라스트럭쳐 관리에 대한 책임을 공유할 필요가 있다. 가장 좋은 방법은 state 를 공유해서 접근할 수 있는 원격 환경에서  Terraform 을 실행하는 것이다. 

Terraform  은 remote backends 라고 알려진 티 기반의 워크플로우를 지원한다.  remote backends를 통해 Terraform 에서 state 데이터를 위한 공유 스토리지를 사용한다. 그래서 Terraform 을 함께 사용하는 팀원들이 동일한 인프라스트럭쳐를 관리할 수 있다.

지원하는 backends는 s3, consul 등이 있다.  consul 은 state storage, locking, environments 를 지원하며 s3는 state storage만 지원한다.

Next Steps

Documentation

Examples

Import : 현재 있는 인프라스트럭쳐를 terraform 으로 가져오는 방법. 현재는 오직 리스소를 state 파일로만 임포트하는 것만 가능하며 설정 파일은 직접 만들어야 한다. A future version of Terraform will also generate configuration.

Advanced Tracks

Developer

자동으로 Terraform 실행하기

커스텀 providers 만들기

Operations

Terraform으로 여러 개의 환경(Environments) 관리하기 : remote state, workspaces, sensitive data

 Packer 이미지 활용

AWS Provider

AWS EKS Introduction

AWS IAM Policy Documents

Serverless Applications with AWS Lambda and API Gateway

참고자료

책 : terraform up and running  https://www.terraformupandrunning.com/  https://github.com/brikis98/terraform-up-and-running-code

** terraform up and running 2판 한글 번역서적 나와있음

Related pages