когда for_each пуст, игнорировать ресурс Dynami c - PullRequest
0 голосов
/ 27 января 2020

У меня есть следующее в 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" {

1 Ответ

1 голос
/ 13 февраля 2020

Похоже, что эта политика все еще используется в ресурсе aws_iam_policy.task_role, когда var.policy_statements пусто.

Это приведет к созданию aws_iam_policy.task_role с пустым Statement (что приводит к тому, что ошибка malformed-policy, которую вы видите).

Я бы порекомендовал установить флаг 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.

...