我的main.tf文件中包含以下内容:
data "aws_iam_policy_document" "task_role_policy" {
dynamic "statement" {
for_each = var.policy_statements
content {
actions = statement.value.actions
resources = statement.value.resources
effect = "Allow"
}
}
}
当var.policy_statements为空列表或什么都没有时,运行terraform apply
时出现以下错误:
Error: Error creating IAM policy dev-chatbot-engine-policy: MalformedPolicyDocument: Syntax errors in policy.
status code: 400, request id: a181b065-b659-4261-87d5-9aae8c4454aa
on .terraform/modules/service/main.tf line 68, in resource "aws_iam_policy" "task_role":
68: resource "aws_iam_policy" "task_role" {
答案 0 :(得分:1)
当aws_iam_policy.task_role
为空时,似乎在var.policy_statements
资源中仍在引用此策略。
这将导致创建的aws_iam_policy.task_role
具有空的Statement
(这会导致您看到格式错误的政策错误)。
我建议在策略本身上设置一个count
标志,以便在语句为空时,例如甚至不尝试创建它。
resource "aws_iam_policy" "task_role" {
count = length(var.policy_statements) == 0 ? 0 : 1
// Your other args here...
}
这可能对其他资源(例如消耗aws_iam_policy.task_role
的资源)具有级联作用。您需要通过提供不会破坏的默认值或在其中添加count
来处理这些效果。