Terraform 에서 여러 사람이 작업을 할때 state file 을 공유하고 동시 작업시 원자성 일관성 작업을 위해서 Lock 을 제공하기 위해선 원격 공유 저장소 와 Lock 을 구현할 수 있는 Backend 가 필요하다.
AWS 에선 S3 를 이용하고 작업 상태를 공유하고 변경 작업중 원자성을 Lock 제공하기 위해 DynamoDB Table Lock 을 손쉽게 사용할수 있다.
mkdir backend cat main.tf # terrafrom state lock 테이블 resource "aws_dynamodb_table" "terraform_state_lock" { name = "terraform-state-lock" hash_key = "LockID" billing_mode = "PAY_PER_REQUEST" attribute { name = "LockID" type = "S" } } # Terraform state 저장용 S3 버킷 resource "aws_s3_bucket" "terraform_state" { bucket = "infra-terraform-states" tags = { Name = "terraform state" } lifecycle { prevent_destroy = true } } # Terraform state 저장용 S3 버킷 ACL resource "aws_s3_bucket_acl" "terraform_state_acl" { bucket = aws_s3_bucket.terraform_state.id acl = "private" } # Terraform state 저장용 S3 버킷 버저닝 resource "aws_s3_bucket_versioning" "terraform_state_versioning" { bucket = aws_s3_bucket.terraform_state.id versioning_configuration { status = "Enabled" } } # 보안을 위해 S3 버켓을 Block all public access 로 만든다 resource "aws_s3_bucket_public_access_block" "terraform_state_public" { block_public_acls = true block_public_policy = true ignore_public_acls = true restrict_public_buckets = true bucket = aws_s3_bucket.terraform_state.id } |
위에 적용후 실제로 S3 Backend 는 아래와 같이 정의하여 활용 할수 있다.
mkdir workdir cat backend.tf terraform { backend "s3" { # 위에 지정한 backend 버켓명 bucket = "infra-terraform-states" # 아래 파일명이 키가 되고 아래 디렉토리로 파일이 남게 된다 key = "infra/vpc/terraform.tfstate" region = "ap-northeast-2" # 위에 지정한 DynamoDB Table dynamodb_table = "terraform-state-lock" acl = "bucket-owner-full-control" encrypt = true skip_credentials_validation = true skip_metadata_api_check = true profile = "ops-admin" } } |
'IT' 카테고리의 다른 글
사용중인 인프라를 Terraform 코드화 하기 (0) | 2022.04.08 |
---|---|
volumio 를 VMware 에 설치 (0) | 2020.04.08 |