네트워크 & 클라우드/자동화
Terraform 기초 3 - Backend
김냥코오
2022. 12. 1. 23:24
backend
테라폼이 자신이 관리하는 리소스에 대한 상태정보를 기록 하는 것은 .tfstate 파일이다.
이 .tfstate를 외부에 있는 스토리지에 저장하는 것을 backend. 원격 상태 스토리지를 의미한다.
협업을 위해 backend는 중요하며 AWS S3와 같은 원격 스토리지에 저장된다.
backend가 지정되었을 때, 앞서 살펴봤던 명령어들이 어떤 의미를 가지는지 살펴보자.
Terraform init
- backend에 상태를 저장할 .tfstate 파일이 생성된다. - backend의 tfstate 파일로 다른 담당자가 정의한 내용과 local간의 sync를 맞출 수 있다. Terraform plan - backend 지정 전과 동일하다. Terraform apply - 인프라 배포 관련 작업들이 backend의 .tfstate에 저장된다. - local의 .terraform에도 저장됨. Terraform import - 이미 배포된 인프라 리소스들을 terraform state로 옮겨준다. |
실습
- 모든 인원이 동일한 상태 파일(.tfstate)을 공유해야 한다. 이에 사용되는 컨셉이 backend 이다.
- backend에 접근하여 작업하는 다수의 사람이 apply할 경우 문제가 될 수 있어, 수정 중일땐 Lock을 거는 것이 중요함.
backend 저장을 위한 S3를 사용하고, locking을 위한 DynamoDB를 세팅 고고.
- 우선 S3와 DynamoDB만 생성해준다.
[main.tf]
# provider 지정 provider "aws" {
region = "ap-northeast-2"
}
# backend용 버킷 생성
resource "aws_s3_bucket" "tf_state" {
bucket = "kgw-tf-state-bucket"
versioning { #s3 버전관리
enabled = true
}
}
# lock용 DynamoDB
resource "aws_dynamodb_table" "tf_state_lock" {
name = "tf-lock" # 고유한 값
hash_key = "LockID" # 테이블의 각 항목을 나타내는 고유 식별자
billing_mode = "PAY_PER_REQUEST"
attribute {
name = "LockID" # 테
type = "S" # 타입 String
}
}
|
terraform init
terraform plan terraform apply -auto-approve |
- 설정에 맞게 생성이 되었는지 확인해보자.
S3
DynamoDB
- 생성이 확인되었으면, backend 설정을 진행해준다.
[backend.tf]
terraform {
backend "s3" { # Backend 타입을 s3로 명시
bucket = "kgw-tf-state-bucket" # s3 bucket 이름
key = "terraform/tf-state" # s3 내에서 저장되는 경로를 의미합니다.
region = "ap-northeast-2"
encrypt = true
dynamodb_table = "tf-lock" # DynamoDB 이름
}
}
|
terraform init
terraform plan terraform apply -auto-approve |
- S3에 tfstate 파일이 저장이 됐는지 확인해보자.
- 테스트로 EC2 하나 생성하고, backend의 tfstate에 해당 내용이 있는지 확인해보겠다.
# 테스트
resource "aws_instance" "tf_state_test" {
ami = "ami-0e9bfdb247cc8de84"
instance_type = "t2.micro"
subnet_id = "subnet-08de6fc71e261e7b9"
}
|
- S3에서 tfstate파일 다운받아서 실행해보자
신규로 생성한 인스턴스에 대한 정보가 기입되어 있는 것을 확인 가능하다.