Terraform перебирает список - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы заменить 3 независимые переменные (dev_id, prod_id, stage_id) для одного списка, содержащего все три переменные, и перебрать их, применяя их к политике.

Это что-тотерраформ может сделать?

data "aws_iam_policy_document" "iam_policy_document_dynamodb" {
  statement {
    effect    = "Allow"
    resources = ["arn:aws:dynamodb:${var.region}:${var.account_id}:table:${var.dynamodb_table_name}"]

    actions = [
      "dynamodb:GetItem",
      "dynamodb:PutItem",
      "dynamodb:DeleteItem",
    ]

    principals {
      type = "AWS"

      identifiers = [
        "arn:aws:iam::${var.dev_id}:root",
        "arn:aws:iam::${var.prod_id}:root",
        "arn:aws:iam::${var.stage_id}:root"
      ]
    }
  }
}

Я посмотрел на циклы и интерполяцию, но кажется, что в 99% случаев интерполяция выполняется с помощью "count", который работает только для создания нескольких ресурсов (Iнадеюсь, я не говорю большую ложь).

Например, я использовал

principals {
   count = "${length(var.list)}"
   identifiers = ["arn:aws:iam::${var.list[count.index]}"]
}

, но это было безуспешно.

Есть ли какой-нибудь способ достижения конечной цели - заменить эти 3 переменные одним списком (или картой) и выполнить итерации по ним?

1 Ответ

0 голосов
/ 16 октября 2018

Если у вас есть список идентификаторов учетных записей, вы пробовали это?

var "accounts" {
  default = ["123", "456", "789"]
  type = "list"
}

locals {
  accounts_arn = "${formatlist("arn:aws:iam::%s", var.accounts)}"
}

Тогда в вашем политическом документе:

principals {
  type = "AWS"
  identifiers = ["${locals.accounts_arn}"]
}

Я на самом деле не пробовал, ноне могу придумать причину, по которой это не сработает.

...