관리 메뉴

밤 늦게까지 여는 카페

terraform lifecycle.ignore_changes - 어떤 서비스 사용했는지 기록은 남기고 싶고 배포는 하기 싫을 때! 본문

DevOps

terraform lifecycle.ignore_changes - 어떤 서비스 사용했는지 기록은 남기고 싶고 배포는 하기 싫을 때!

Jㅐ둥이 2024. 6. 23. 22:48

혹시 terraform으로 인프라를 관리하고 있으신가요?

 

1) terraform 버전을 잘 관리해서 클라우드 서비스 프로바이더가 제공하는 모든 기능을 사용할 수 있거나

2) terraform 스크립트를 깔끔하게 잘 나눠서 필요할 때에만 배포가 진행된다면

 

큰 문제가 없으실 겁니다.

 

하지만 저는 1) terraform 버전이 너무 오래되었고, 2) 모든 리소스를 하나의 terraform 워크스페이스에서 관리하고 있습니다.

 

이로 인해서 terraform으로 서비스를 배포할 때마다 인프라의 특정 옵션을 수동으로 변경해줘야 하는 문제를 겪었습니다.

  • 오래된 버전의 terraform 스크립트에서 지원하지 않는 옵션을 사용해야 해서 배포될 때마다 해당 옵션이 초기화 됨

terraform 스크립트를 최신 버전으로 마이그레이션 해야 하나 고민하던 중에 lifecycle이라는 기능이 제 상황에 적합하다는 것을 알게 되었습니다.

 

ignore_changes 사용법

lifecycle의 ignore_changes를 이용하면 이미 생성된 리소스의 배포를 비활성화 시킬 수 있었습니다.

 

리소스의 특정 속성들의 변경을 무시하려면 다음과 같이 ignore_changes를 리소스의 속성들을 담고 있는 리스트로 작성해주면 됩니다.

  • ignore_changes = [ tags ] 라고 작성되어 있으면 terraform 스크립트에서 tags가 변경되더라도 리소스의 배포가 이뤄지지 않습니다.
resource "resource type" "resource name" {
    # resource configuration
    # ...
    
    lifecycle {
        ignore_changes = [
            리소스 속성1,
            리소스 속성2,
            ...
        ]
    }
}

 

  • 무조건 리소스의 배포를 비활성화 시키고 싶다면 ignore_changes = all 이라고 작성해주세요!
resource "resource type" "resource name" {
    # resource configuration
    # ...
    
    lifecycle {
        ignore_changes = all
    }
}
반응형