본문 바로가기

개발하자

각각을 위해 사용하기 위해 리팩터링한 후 테라폼 리소스를 유지하는 방법은 무엇입니까?

반응형

각각을 위해 사용하기 위해 리팩터링한 후 테라폼 리소스를 유지하는 방법은 무엇입니까?

현재 저는 인프라에서 작은 리팩터를 하고 있습니다. 내 프로젝트의 현재 버전은 다음과 유사합니다: 그리고 변수를 재사용하기 위해 for_each를 사용하려고 합니다.

resource "google_cloud_scheduler_job" "job" {
  name             = "Create_All_Dossier_Summary"
  description      = "desc1"
  schedule         = "0 19 * * 1"
  time_zone        = "America/Sao_Paulo"
  attempt_deadline = "320s"

  retry_config {
    retry_count = 1
  }

  http_target {
    http_method = "POST"
    uri         = "<some-url>"
  }
}

그리고 다음과 같은 것으로 업그레이드하려고 합니다:

variable "description" {
  default = ["desc1", "desc 2"]
}

resource "google_cloud_scheduler_job" "job" {
  for_each = toset(var.description)
  name             = "Create_All_Dossier_Summary"
  description      = each.value
  schedule         = "0 19 * * 1"
  time_zone        = "America/Sao_Paulo"
  attempt_deadline = "320s"

  retry_config {
    retry_count = 1
  }

  http_target {
    http_method = "POST"
    uri         = "<some-url>"
  }
}

구성은 괜찮지만 실행 후에 테라폼이 제 오래된 것을 파괴하고 있습니다. 테라폼은 제가 원하는 것이 아닙니다. 첫 번째 것이 이미 있고 구성이 같기 때문에 저는 단지 두 번째 것을 만들려는 것입니다.

이 리팩터를 수행한 후 테라포름에게 첫 번째 리소스를 다시 만들지 말라고 할 수 있는 방법이 있습니까?

Plan: 2 to add, 0 to change, 1 to destroy.
# google_cloud_scheduler_job.job will be destroyed
# google_cloud_scheduler_job.job["desc 2"] will be created
# google_cloud_scheduler_job.job["desc1"] will be created

BTW: 저는 물체의 목록을 사용하려고 합니다. 저는 여기서 문자열의 목록을 사용했습니다. 왜냐하면 그것이 시연하기 쉽기 때문입니다.




Terraform 구성에서 리소스의 네임스페이스/주소가 변경되면 다음과 같은 하위 명령을 사용하여 해당 ID의 이름을 변경해야 합니다:

terraform state mv google_cloud_scheduler_job.job 'google_cloud_scheduler_job.job["desc 2"]'

두 번째 리소스 주소는 구문에서 의 사용으로 인해 셸이 인수로 올바르게 해석하려면 완전히 리터럴 문자열로 캐스팅되어야 합니다.




CI 내부에서 실행되는 테라폼 코드와 관련하여 여기에 설명된 '이동' 블록을 사용하는 것이 더 낫다고 생각합니다. 수동 터미널 명령을 수행하지 않고 '테라폼 적용'을 통해 모든 작업을 수행하도록 하는 방법입니다. 당신의 블록은 이렇게 보여야 합니다.

    moved {
      from = google_cloud_scheduler_job.job
      to = google_cloud_scheduler_job.job["desc 2"]
    }

나는 보통 for_each와 블록을 한 후 바로 넣지만, 여기가 그것에 가장 적합한 장소인지 확신할 수 없다


반응형