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 참고자료
이 문서는 Tutorials | Terraform | HashiCorp Developer 자료를 기반으로 간단히 만든 문서입니다.
Terraform 이 무엇인가요?
HashiCorp Terraform | Infrastructure as code provisioning : 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/
실습하기 : Tutorials | Terraform | HashiCorp Developer
Getting Started
Terraform 전체적인 실습
클라우드를 가지고 실습하기 전에 docker를 이용해서 terraform 실습을 해볼 수 있음.
Get Started - Docker 문서로 실습을 한다. Docker | Terraform | HashiCorp Developer
사전에 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 Terraform Registry
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 Terraform: Up and Running GitHub - brikis98/terraform-up-and-running-code: Code samples for the book "Terraform: Up & Running" by Yevgeniy Brikman
** terraform up and running 2판 한글 번역서적 나와있음