후니의 IT인프라 사전
[Terraform 101] 테라폼 백엔드 본문
테라폼은 tfstate 파일이라는 상태파일을 저장합니다. 사실상 이 파일이 테라폼이 자원을 관리하는 방식이고
테라폼을 실행할 때는 이 tfstate 파일을 현재 리소스와 비교해서 작업을 진행합니다.
그렇기 때문에 tfstate 파일에는 매우 중요한 정보들이 많이 있고, 이게 없어지거나 하나의 부분만 빠져도 사실상 리소스를 관리할 수 없게됩니다.
기본적인 저장위치는 local이지만, 테라폼에서는 원하는 지정 저장소에 tfstate파일을 저장할 수 있도록 하고 있습니다. 대표적인게 AWS S3입니다.
S3를 백앤드로 쓰면 S3의 기능을 장점으로 활용할 수 있습니다.
- AWS 리소스를 이용할 경우 (그 외에도) 중앙 저장소가 필요한데 S3를 통해서 중앙 저장소로 활용할 수 있다.
- S3의 versioning 기능을 통해서 tfstate파일에 대한 버전정보를 기록할 수 있다. 따라서 변경 이력, 작업 로그 등을 파악하기 용이하다
- S3는 암호화도 지원하기 때문에 tfstate 파일에 대한 암호화를 즉시 도입할 수 있다.
- 여러 명이 동시에 state파일을 수정하지 못하도록 하는 Locking 기능을 지원한다.
오늘은 S3를 활용해 tfstate 파일을 저장하는 방법을 확인해봅시다.
1. workspace 디렉토리 생성
먼저 테라폼 백엔드 파일을 규정할 디렉토리를 생성합니다.
mkdir tfstate-backend && cd tfstate-backend
2. tfstate파일을 저장할 저장소 생성
S3의 이름은 고유해야하므로 고유한 이름을 생성하고, versioning 옵션을 켜서 version을 기록하도록 합니다.
이는 추후에 tfstate파일에 대한 작업 로그를 남기는 방식으로 매우 유용합니다. 그리고 DynamoDB를 활용해 locking 기능을 활용할 수 있도록 한다.
DynamoDB의 attribute는 잠금을 위한 속성을 나타내며 type은 String(S), Number(N), Binary(B) 3가지가 있다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_s3_bucket" "mys3bucket" {
bucket = "james-t101study-tfstate"
}
# Enable versioning so you can see the full revision history of your state files
resource "aws_s3_bucket_versioning" "mys3bucket_versioning" {
bucket = aws_s3_bucket.mys3bucket.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_dynamodb_table" "mydynamodbtable" {
name = "terraform-locks"
billing_mode = "PAY_PER_REQUEST"
hash_key = "LockID"
attribute {
name = "LockID"
type = "S"
}
}
output "s3_bucket_arn" {
value = aws_s3_bucket.mys3bucket.arn
description = "The ARN of the S3 bucket"
}
output "dynamodb_table_name" {
value = aws_dynamodb_table.mydynamodbtable.name
description = "The name of the DynamoDB table"
}
이제 해당 DB와 S3를 생성하면 됩니다.
terraform init
terraform apply
3. 테스트 백엔드 실행
원격 백엔드를 둘 경우에는 먼저 둘 곳인 S3 저장소가 생성된 이후에 다시 terraform init을 해야합니다.
terraform {
backend "s3" {
bucket = "james-t101study-tfstate-week3"
key = "workspaces-default/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-locks"
}
}
terraform init
Initializing the backend...
Do you want to copy existing state to the new backend?
Pre-existing state was found while migrating the previous "local" backend to the
newly configured "s3" backend. No existing state was found in the newly
configured "s3" backend. Do you want to copy this state to the new "s3"
backend? Enter "yes" to copy and "no" to start with an empty state.
이후 terraform.tfstate 파일이 저장되는 것을 확인할 수 있습니다.
'프로젝트&&스터디 > Terraform 스터디 [T101]' 카테고리의 다른 글
[T101 스터디] 네이버 클라우드 NKS 클러스터 구성하기 (0) | 2022.12.11 |
---|---|
[T101 스터디] 네이버 클라우드 - Auto Scaling 및 LB 배포 (0) | 2022.11.12 |
[T101 스터디] 네이버 클라우드 - VPC 환경의 단일 WebServer 배포 (0) | 2022.11.12 |
[T101 스터디] Terraform 활용해서 네이버 클라우드 다루기 - 준비 (0) | 2022.11.12 |
[T101 스터디] Terraform 개요 (0) | 2022.11.12 |