
我希望能夠在計劃中查看資料資源(如政策文件)的 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。
因此,在規劃期間查看此策略的唯一方法是這兩個物件已經創建,因此它們的 ARN 已從先前的運行中獲知。
實現這一目標的一種方法是最初僅應用部分配置來建立這些物件:
terraform apply -target=aws_s3_bucket.some-bucket -target=aws_cloudwatch_log_group.some_lambda
Terraform 應該建議創建這兩個物件以及它們所依賴的任何其他對象,但尚未讀取資料資源或依賴它的任何其他對象。如果您接受該計劃並允許 Terraform 創建這些對象,那麼您隨後可以terraform apply
正常運行,並且 Terraform 應該能夠在第二個規劃步驟中讀取此資料資源,從而向您顯示此策略與兩個 ARN 的最終值已經插入。