Gibt es eine Möglichkeit, die Ausgabe einer Datenressource zu rendern, bevor Terraform Apply ausgeführt wird?

Gibt es eine Möglichkeit, die Ausgabe einer Datenressource zu rendern, bevor Terraform Apply ausgeführt wird?

Ich möchte das JSON einer Datenressource (z. B. eines Richtliniendokuments) im Plan sehen können. Derzeit werden diese Ressourcentypen nur während der Anwendung „gerendert“.

Ich möchte wissen, ob es eine Möglichkeit gibt, es anzuzeigen, bevor ich es ausführe terraform apply.

Hier ist mein Code:

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"
    ]
  }
}

Antwort1

Terraform liest während der Planungsphase genau dann aus einer Datenressource, wenn die gesamte Konfiguration der Datenressource während der Planungsphase bekannt ist.

In Ihrem Fall haben Sie Verweise auf sowohl aws_s3_bucket.some-bucket.arnals auch aws_cloudwatch_log_group.some_lambda.arn, und ich vermute, dass keiner dieser Werte während der Planung bekannt ist, weil die Remote-API die ARN für ein Objekt im Rahmen der Erstellung festlegt.

Die einzige Möglichkeit, diese Richtlinie während der Planung anzuzeigen, besteht darin, dass diese beiden Objekte bereits erstellt wurden und ihre ARNs daher bereits aus einem vorherigen Lauf bekannt sind.

Eine Möglichkeit, das zu erreichen, besteht darin, zunächst nur einen Teil Ihrer Konfiguration anzuwenden, um diese Objekte zu erstellen:

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

Terraform sollte vorschlagen, diese beiden Objekte und alles andere, wovon sie abhängen, zu erstellen, wird aber noch nicht die Datenressource oder alles andere, was davon abhängt, lesen. Wenn Sie diesen Plan akzeptieren und Terraform erlauben, diese Objekte zu erstellen, können Sie anschließend terraform applywie gewohnt arbeiten. Terraform sollte dann in der Lage sein, diese Datenressource während des zweiten Planungsschritts zu lesen und Ihnen so den endgültigen Wert dieser Richtlinie mit den beiden bereits eingefügten ARNs anzuzeigen.

verwandte Informationen