본문 바로가기
공부/IaC

[Terraform on AWS] 테라폼 backend, 상태 잠금 설정해보기

by haejang 2021. 3. 21.
728x90
728x90

 

참조

Requirements

  • S3, DynamoDB 권한이 있는 IAM User

목차

1. S3 버킷, DynamoDB 테이블 생성

2. Backend 설정

 

 

1. S3 버킷, DynamoDB 테이블 생성

테라폼의 상태를 저장하기 위한 S3 Bucket과 Lock을 걸기 위한 DynamoDB 테이블을 생성해 보겠다

 

resources.tf

provider "aws" {
  region = "us-east-1"
}

resource "aws_s3_bucket" "terraform_state" {
  bucket = "terraform-haejang(버킷이름)"

  versioning {
    enabled = true
  }
}

resource "aws_dynamodb_table" "terraform_lock" {
  name           = "terraform-lock(테이블이름)"
  hash_key       = "LockID"
  read_capacity  = 1
  write_capacity = 1

  attribute {
    name = "LockID"
    type = "S"
  }
}

S3

  • bucket : 버킷의 이름. 전 세계적으로 고유한 값이어야 함
  • versioning : 버저닝을 수행할지 여부. enable된 상태라면 버킷에 있는 파일을 업데이트할 때 마다 해당 파일의 새 버전이 만들어지며, 이를 통해 언제든지 이전 버전으로 되돌릴 수 있다
  • 추가적으로 lifecycle 속성의 prevent_destroy 를 사용해 버킷 삭제에 대한 보호를 활성화할 수 있다

DynamoDB

  • name : 데이터가 저장되는 테이블 이름. 각 계정의 지역별로 고유한 값이어야 함
  • hash_key : 테이블의 각 항목을 나타내는 고유 식별자. LockID가 기본 키가 된다
  • read/write_capacity : 읽기/쓰기 용량 => 비용 결정
  • attribute : 속성, 필드. 테라폼에서는 LockID가 잠금을 위한 하나의 속성이다 (타입은 String)

terraform init, plan, apply 명령을 내리면콘솔에서 S3 버킷과 DynamoDB 테이블이 생성된걸 확인할 수 있다

 

 

 

2. Backend 설정

생성된 S3 버킷과 DynamoDB를 사용하도록 backend 설정을 해보겠다

 

backend.tf

terraform {
  backend "s3" {
    bucket = "terraform-haejang(S3버킷이름)"
    key    = "terraform.tfstate"
    region = "us-east-1"
    encrypt = true
   dynamodb_table = "terraform-lock(DynamoDB테이블이름)"
  }
}

백엔드 설정이 추가되거나 바뀌면 terraform init을 또 실행시켜야 한다

아무튼 init을 수행하고 apply까지 마치면

 

 

S3 버킷에 현재 상태 정보가 들어있는 terraform.tfstate 파일이 저장되어 있는 것과, DynamoDB에서 테라폼이 상태 파일 잠금 수행 중일 때 임시로 기록되는 정보도 확인할 수 있다

 

terraform.tfstate 파일을 다운받아 현재 상태 확인도 해보자

 

 

728x90
728x90

댓글