Terraform 이란?
Terraform은 클라우드 및 온프레미스 리소스를 안전하고 효율적으로 빌드, 변경 및 버전화할 수 있는 코드형 인프라 도구입니다.
컴퓨팅, 스토리지 및 네트워킹 리소스와 같은 하위 수준 구성 요소 뿐만 아니라 DNS 항목 및 SaaS 기능과 같은 상위 수준 구성 요소도 관리할 수 있습니다.
Terraform 구성 요소
•
provider : Infrastructure 공급자를 정의합니다. (AWS, GCP, Azure…)
provider "aws" {
region = "ap-northeast-2"
profile = "ljyoon"
}
JSON
https://registry.terraform.io/browse/providers
•
resource : 생성할 인프라 자원을 정의합니다. (VPC, EC2, ELB…)
resource "aws_instance" "example" {
ami = "ami-0e9bfdb247cc8de84"
instance_type = "t2.micro"
JSON
•
output : 인프라 프로비저닝 terraform apply 후 생성된 리소스를 확인하기 위해 사용합니다.
output "public_ip" {
value = aws_instance.example.public_ip
description = "The public IP of the Instance"
}
JSON
•
backend : Terraform의 상태를 저장하는 공간입니다. 정의하지 않으면 로컬에 저장됩니다.
backend "s3" {
bucket = "tfstate-ljyoon"
key = "workspaces-default/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-locks-ljyoon"
}
JSON
•
module : 공통적으로 활용할 수 있는 코드를 모듈로 정의합니다.
module "webserver_cluster" {
source = "../../../modules/services/webserver-cluster"
}
JSON
•
remote state : 다른 경로의 state를 참조합니다. backend에서 output 정보들을 가져올 때 사용합니다.
data "terraform_remote_state" "vpc" {
backend = "remote"
config = {
organization = "hashicorp"
workspaces = { name = "vpc-prod" }
}
}
JSON
•
variable
•
data
Terraform 동작 방식
Terraform은 API(응용 프로그래밍 인터페이스)를 통해 클라우드 플랫폼 및 기타 서비스에서 리소스를 생성하고 관리합니다.
1.
Write : 서버, 로드밸런서 등과 같은 인프라 내 리소스를 정의합니다. main.tf
2.
Initialize(초기화/준비) : Terraform에서 인프라를 관리하는 데 필요한 플러그인을 설치합니다.
•
지정한 backend에 상태 저장을 위한 terraform.tfstate 파일이 생성됩니다.
•
local에는 tfstate에 정의된 내용을 담은 .terraform 가 생성됩니다.
•
동시성 처리를 위한 .terraform.lock.hcl 파일도 생성됩니다.
3.
Plan : 정의한 코드로 만들어질 인프라 내역에 대한 예측 결과를 미리 보여줍니다. 결과에 에러가 없다고 하더라도, Apply 시 에러가 발생할 수 있습니다.
4.
Apply : 정의한 코드로 인프라를 배포합니다. Apply가 완료되면 AWS 상에 실제로 해당 인프라가 생성되고 작업 결과가 backend의 .tfstate, local의 .terraform 에도 저장됩니다.
Terraform, AWS CLI 설치 및 환경 구성
# homebrew를 통한 설치
brew install terraform
# 버전 확인
terraform version
Terraform v1.3.2
# terraform 명령어 자동완성 설정
terraform -install-autocomplete
cat ~/.zshrc
autoload -U +X bashcompinit && bashcompinit
complete -o nospace -C /usr/local/bin/terraform terraform
# homebrew를 통한 설치
brew install awscli
# profile 설정
cat .aws/credentials
[ljyoon]
aws_access_key_id = ****************
aws_secret_access_key = ***********************************
cat .aws/config
[profile ljyoon]
region = ap-northeast-2
output = json
# pager 비활성화
# awscli 명령어 결과 출력 시 pager를 통해 편리하게 읽기 및 검색이 가능합니다. 하지만 단순히 결과 출력만 필요한 경우 불편하므로 비활성화합니다.
export AWS_PAGER=""
set AWS_PAGER=""
# 실습에 유용한 Tool 설치
brew install tree jq watch
Bash
•
pager 활성화
•
pager 비활성화
참고
•
Terraform UP & Running
•
가시다님 스터디 자료