Terraform beginner guide
- 1 Terraform 이 무엇인가요?
- 2 Getting Started
- 2.1 Terraform 전체적인 실습
- 2.2 Terraform 설치
- 2.3 빌드 인프라스트럭처
- 2.4 변경 인프라스트럭처
- 2.5 삭제
- 2.6 리소스 의존성
- 2.7 Provision
- 2.8 Input 변수
- 2.9 Output 변수
- 2.10 Modules
- 2.11 Terraform Remote
- 2.12 Next Steps
- 3 Advanced Tracks
- 3.1 Developer
- 3.2 Operations
- 3.3 AWS Provider
- 4 참고자료
이 문서는 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
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
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판 한글 번역서적 나와있음