`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: (선택)replace가true이면store블록 출력 값의 어떤 변경도 업데이트가 아니라 리소스 대체를 트리거해요.sensitive: (선택)sensitive를true로 설정하면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: 이 속성들은 상호 배타적이며sensitivestore인자의 값에 따라 설정돼요. 최상위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"
}
}