Terraform 인프라 운영 전략 문의

Terraform을 활용해 인프라를 자동으로 만들고 관리하면서, 이미 배포된 인프라나 서버를 직접 수정하지 않고, 변경이 필요할 때는 새로운 리소스를 새로 배포하고 이전 리소스를 폐기하는 방식으로 운영하려면 어떻게 하면 좋을까요?

2 Likes

variable을 추가해서 단계를 나누는 식으로 가능은 할 거 같은데, 자동화는 어렵지 않을까요?

3 Likes

운영의 효율 등을 고려하다가 고민하고 있는 건데… variable 추가해서 일부 관리와 운영에 도움을 줄 수는 있을거 같아요. 제가 꿈꾸는 거는 자동화인데… 자동화되고, 중간에 확인 절차만 만들어서 하면 너무 좋긴한데.. ㅜ.ㅜ 어쨌든 @Doyul_Kim 님 얘기주신 방안도 좋습니다. 다른 분들은 어떠신지 궁금하네요.

@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

답장이 늦어져서 죄송합니다. 답변 감사합니다.

1 Like