Terraform 인프라 운영 전략 문의

@cvnrainland 님, 안녕하세요. :grinning_face:

Terraform은 상태(state)기반으로 실제 리소스와 상태를 맞추는 도구인데, 질문의 내용은 상태 관리가 필요 없이 변경이 필요할때 리소스 삭제 → 재생성 되기를 원하시는 것 같네요. Terraform plan/apply 할때마다 리소스를 재생성 하는 방법은 여러가지가 있을 것 같은데요.

아래 2가지 활용 예시를 공유 드릴게요.

1) random_id 활용 (예시)
EC2 인스턴스를 random_id 값으로 생성해서 참조하는 경우 리소스 이름이 변경되어 plan/apply 할 경우 리소스가 재생성 됩니다.

resource "random_id" "instance_suffix" {
  byte_length = 4
}

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t3.micro"

  tags = {
    Name = "example-${random_id.instance_suffix.hex}"
  }
}

2) triggers_replace 활용 (예시)
Terraform 리소스 lifecycle 블록에 “triggers_replace” 을 사용할 수 있습니다. 이 값을 사용하여 “time_rotating” 리소스 특정 주기(일일 로테이션)이 변경 되면, 리소스는 강제로 교체 됩니다. 만약, 무중단으로 배포하길 원하시면 “create_before_destroy = true” 옵션을 함께 설정 해주시면 좋을 것 같습니다.

resource "time_rotating" "daily" {
  rotation_days = 1
}

resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t3.micro"

  lifecycle {
    create_before_destroy = true
    replace_triggered_by  = [time_rotating.daily]
  }
}

3) Terraform 입력 값 활용
리소스명을 variable 입력 변수 혹은 로컬 변수로 입력 받아서, 변경 후 Terraform Plan/Apply 하는 경우 리소스가 재생성 될 것 같습니다.

+@ 리소스를 블루/그린 형태로 배포 하기를 원하시는 경우라면.. 사람이 중간에 개입하여 리소스 추가/수정/검토 작업은 불가피해 보입니다.

6 Likes