メインコンテンツへスキップ

terraform_data マネージドリソースタイプ

terraform_data は標準的なリソースライフサイクルを実装しますが、直接的なアクションは行いません。プロバイダーを必要とせず、設定しなくても terraform_data リソースを使用できます。これは ソースアドレス terraform.io/builtin/terraform を持つ組み込みプロバイダーを通じて常に利用可能です。

terraform_data リソースは、マネージドリソースライフサイクルに従う必要のある値を格納したり、他に論理的なマネージドリソースがない場合にプロビジョナーをトリガーしたりするのに役立ちます。

使用例 (replace_triggered_by のためのデータ)

replace_triggered_by ライフサイクル引数では、強制的な置換の決定が記載されている全てのリソースの計画されたアクションに基づいているため、与えられた全てのアドレスがリソースのものである必要があります。

ローカル値入力変数のようなプレーンなデータ値には、計画対象となる副作用がないため、replace_triggered_by では無効です。input が変更されるたびにアクションを計画するという terraform_data の動作を利用して、プレーンな値を間接的に使用して置換をトリガーできます。

コードブロック
variable "revision" {
default = 1
}

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

# This resource has no convenient attribute which forces replacement,
# but can now be replaced by any change to the revision variable value.
resource "example_database" "test" {
lifecycle {
replace_triggered_by = [terraform_data.replacement]
}
}

使用例 (null_resource の置換)

コードブロック
resource "aws_instance" "web" {
# ...
}

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

# A use-case for terraform_data is as a do-nothing container
# for arbitrary actions taken by a provisioner.
resource "terraform_data" "bootstrap" {
triggers_replace = [
aws_instance.web.id,
aws_instance.database.id
]

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

引数のリファレンス

以下の引数がサポートされています。

  • input - (オプション) インスタンスの状態に保存され、適用後に output 属性に反映される値。

  • triggers_replace - (オプション) インスタンスの状態に保存され、値が変更されたときに強制的に置換を行う値。

属性のリファレンス

上記に加えて、次の属性がエクスポートされます。

  • id - リソースインスタンスに固有の文字列値。

  • output - input 引数から導出された計算値。output が不明な計画中であっても、input と同じ型になります。