`terraform_data` 리소스 참조

terraform_data 리소스 참조 (terraform_data resource reference)

terraform_data 리소스 타입은 표준 리소스 수명 주기를 구현하지만, 그 외의 직접적인 다른 작업은 하지 않아요. 프로바이더를 요구하거나 구성하지 않고도 terraform_data 리소스를 사용할 수 있으며, 소스 주소terraform.io/builtin/terraform인 내장 프로바이더를 통해 항상 사용할 수 있어요. 이 페이지에서는 인자와 속성을 설명하고 실제 사용 패턴 예시를 보여줄게요.

출처: 문서

본문

terraform_data 리소스 타입은 표준 리소스 수명 주기를 구현하지만, 그 외의 직접적인 다른 작업은 하지 않아요.

소스 주소terraform.io/builtin/terraform인 내장 프로바이더를 통해 항상 사용할 수 있으므로 프로바이더를 요구하거나 구성할 필요 없이 terraform_data 리소스를 사용할 수 있어요.

terraform_data 리소스는 관리 리소스 수명 주기를 따라야 하는 값을 저장하고, 배치할 다른 논리적 관리 리소스가 없을 때 프로비저너를 트리거하는 데 유용해요.

인자 (Arguments)

terraform_data 리소스 타입에서 다음 인자를 사용할 수 있어요:

  • input: (선택) 인스턴스 상태에 저장할 값을 지정해요. Terraform은 terraform apply 실행 후 output 속성의 값을 출력해요.
  • triggers_replace: (선택) 인스턴스 상태에 저장할 값을 지정해요. Terraform은 값이 변경되면 리소스를 대체해요.
  • store: store 블록에는 input, replace, sensitive, version의 네 가지 인자가 있어요.
    • input: (선택, 쓰기 전용) 이 인자는 어떤 타입이든 받을 수 있으며 쓰기 전용이므로 일시적(ephemeral) 값도 받을 수 있어요. apply 중에 여기 제공된 값은 store 블록의 output 또는 sensitive_output 속성으로 복사되어 리소스의 상태에 저장돼요.
    • replace: (선택) replacetrue이면 store 블록 출력 값의 어떤 변경도 업데이트가 아니라 리소스 대체를 트리거해요.
    • sensitive: (선택) sensitivetrue로 설정하면 input 값이 sensitive_output에 저장돼요.
    • version: (선택) version이 설정되면 input 값의 변경이 version 인자의 변경도 없으면 output에 반영되지 않아요.

속성 (Attributes)

terraform_data 리소스는 다음 속성을 내보내요:

  • id: 리소스 인스턴스에 고유한 문자열 값이에요.
  • output: input 인자에서 파생된 계산 값이에요. output이 알 수 없는 plan에서는 Terraform이 input 인자에 사용된 것과 같은 타입의 값을 반환해요.
  • store: store 블록에는 output 또는 sensitive_output의 두 가지 출력이 있어요.
    • output, sensitive_output: 이 속성들은 상호 배타적이며 sensitive store 인자의 값에 따라 설정돼요. 최상위 output 속성처럼 동작하며 store 블록 input 인자에서 값을 포착해요.

예시 (Examples)

다음 예시는 terraform_data 리소스 타입을 사용하는 일반적인 패턴을 구현해요:

replace_triggered_by 인자용 데이터 제공 (Provide data for the replace_triggered_by argument)

replace_triggered_by 인자 지시어는 lifecycle 메타-인자에 추가할 수 있는 인자 중 하나예요. 대체 강제는 언급된 모든 리소스에 대한 계획된 연산을 기반으로 하므로 이 인자를 사용하려면 리소스 주소를 지정해야 해요.

로컬 값입력 변수 같은 일반 데이터 값은 replace_triggered_by에서 유효하지 않아요. terraform_data 리소스는 input 값이 변경될 때마다 작업을 계획하므로, 이 리소스 타입을 사용해 일반 값을 간접적으로 지정해 대체를 트리거할 수 있어요.

variable "revision" {
  default = 1
}

resource "terraform_data" "replacement" {
  input = var.revision
}

resource "example_database" "test" {
  lifecycle {
    replace_triggered_by = [terraform_data.replacement]
  }
}

여기서는 초기 apply 중에 일시적 비밀번호 값의 결과를 포착해 terraform_data.test의 상태에 저장해요.

ephemeral "random_password" "test" {
  length = 16
}

resource "terraform_data" "test" {
  store {
    input     = ephemeral.random_password.test.result
    sensitive = true
    version   = 1
  }
}

output "password" {
  sensitive = true
  value     = terraform_data.test.store.sensitive_output
}

임의 작업 허용 (Enable arbitrary operations)

다음 예시에서 terraform_data 리소스는 provisioner "local-exec" 블록이 수행하는 임의 작업의 컨테이너 역할을 해요.

resource "aws_instance" "web" {
  # ...
}

resource "aws_instance" "database" {
  # ...
}

resource "terraform_data" "bootstrap" {
  triggers_replace = [
    aws_instance.web.id,
    aws_instance.database.id
  ]

  provisioner "local-exec" {
    command = "bootstrap-hosts.sh"
  }
}

더 알아보기 (Learn more)