terraform에서 중첩 값을 무시 (ignore_change)하는 방법

6029 단어 Terraform

ignore_changes 기본 사용법



terraform에서 특정 항목을 terraform으로 관리하지 않으려면 lifecycleignore_changes를 사용할 수 있습니다.

The lifecycle Meta-Argument - Configuration Language - Terraform by HashiCorp

문서로부터의 인용입니다만, 이것이 기본적인 설정의 방법이 됩니다.
resource "aws_instance" "example" {
  # ...

  lifecycle {
    ignore_changes = [
      # Ignore changes to tags, e.g. because a management agent
      # updates these based on some ruleset managed elsewhere.
      tags,
    ]
  }
}

중첩의 경우



그렇다면 중첩 된 값의 경우 어떻게해야합니까?

예를 들어,

resource "aws_eip" "test" {
  tags = {
    test = "testValue"
  }
}
tags.test 를 ignore 하고 싶은 경우입니다.

이것은 문서에 설명되어 있으며,

The arguments are the relative address of the attributes in the resource. Map and list elements can be referenced using index notation, like tags["Name"] and list[0] respectively.

resource "aws_eip" "test" {
  tags = {
    test = "testValue"
  }

  lifecycle {
    ignore_changes = [
      tags["test"],
    ]
  }
}

에서 ignore됩니다.

중첩의 경우 함정



그래서, 여기부터가 본제입니다만, ignore_change 하고 싶은 장면에서 생각할 수 있는 것이, 먼저 콘솔로부터 수동으로 값을 설정한 경우입니다.

구체적인 예를 들자면, 화면에서 ↓처럼 tag를 새롭게 추가하고,



terraform에서는 이렇게 되어 있을 때입니다.

resource "aws_eip" "test" {
  tags = {
    Name = "名前"
  }
}

이 상태에서, terraform plan 를 하면(자), 아직 ignore 설정을 하고 있지 않기 때문에, 차분이 표시됩니다.
      ~ tags                 = {
            "Name"                           = "名前"
          - "test"                           = "testValue" -> null
        }
    }

그래서 ignore_change를 추가합니다.

resource "aws_eip" "test" {
  tags = {
    Name = "名前"
  }
  lifecycle {
    ignore_changes = [
      tags["test"], // 追加
    ]
  }
}

확실히 보이는 것 같습니다만, 실은 이것으로는 ignore_changes 가 잘 다루지 않고, 아직 차이가 있다고 인식되어 버립니다.

정답은 이렇습니다.

resource "aws_eip" "test" {
  tags = {
    Name = "名前"
    test = "" // これが必要
  }
  lifecycle {
    ignore_changes = [
      tags["test"],
    ]
  }
}
ignore_changes 로 지정하고 있는 값을, resources에 실제로 써 주어야 합니다. 값 자체는 무시되므로 내용은 무엇이든 좋습니다. key가 (예이면 test)가 설정되어 있어야합니다.

보충


Terraform v0.13.5 에서 동작 확인했습니다.

좋은 웹페이지 즐겨찾기