terraform apply を実行する前にデータ リソースの出力をレンダリングする方法はありますか?

terraform apply を実行する前にデータ リソースの出力をレンダリングする方法はありますか?

プラン上のデータ リソース (ポリシー ドキュメントなど) の JSON を表示できるようにしたいと思います。現在、これらの種類のリソースは適用時にのみ「レンダリング」されます。

を実行する前にそれを確認する方法があるかどうか知りたいですterraform apply

これが私のコードです:

data "aws_iam_policy_document" "my_policy" {
  statement {
    sid = "S3"
    effect = "Allow"
    actions = ["s3:*"]
    resources = [
      aws_s3_bucket.some-bucket.arn,
      "arn:aws:s3:::another-bucket/*",
      "arn:aws:s3:::another-bucket/"
    ]
  }
  statement {
    sid = "CloudWatch"
    effect = "Allow"
    actions = ["logs:*"]
    resources = [
      aws_cloudwatch_log_group.some_lambda.arn,
      "arn:aws:logs:us-east-1:123456789123:log-group:/some/log/group:*",
      "arn:aws:logs:us-east-1:123456789123:log-group:/some/log/group"
    ]
  }
}

答え1

計画フェーズ中にデータ リソースの全体的な構成がわかっている場合にのみ、Terraform は計画フェーズ中にデータ リソースから読み取ります。

あなたの場合、aws_s3_bucket.some-bucket.arnとの両方への参照がありaws_cloudwatch_log_group.some_lambda.arn、リモート API がオブジェクトの作成の一環としてオブジェクトの ARN を決定するため、計画時にはどちらの値も不明であると思われます。

したがって、計画中にこのポリシーを確認する唯一の方法は、これら 2 つのオブジェクトがすでに作成されていて、それらの ARN が以前の実行からすでにわかっていることです。

これを実現する 1 つの方法は、最初に構成の一部のみを適用して、それらのオブジェクトを作成することです。

terraform apply -target=aws_s3_bucket.some-bucket -target=aws_cloudwatch_log_group.some_lambda

Terraform は、これら 2 つのオブジェクトと、それらが依存するその他のオブジェクトの作成を提案しますが、データ リソースやそれに依存するその他のオブジェクトはまだ読み込まれません。その計画を受け入れて、Terraform がこれらのオブジェクトを作成できるようにすると、その後はterraform apply通常どおり実行でき、Terraform は 2 番目の計画ステップでこのデータ リソースを読み取ることができるようになり、2 つの ARN がすでに挿入されたこのポリシーの最終値が表示されます。

関連情報