Terraform 遍历列表
Terraform iterate over list
我想为包含所有三个变量的单个列表替换 3 个独立变量(dev_id、prod_id、stage_id),并迭代它们,应用他们遵守政策。
terraform 可以做到这一点吗?
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" 完成的,这只适用于创建多个资源(我希望我没有说大谎).
比如我用了
principals {
count = "${length(var.list)}"
identifiers = ["arn:aws:iam::${var.list[count.index]}"]
}
但那是不成功的。
是否有某种方法可以实现用单个列表(或映射)替换这 3 个变量并对其进行迭代的最终目标?
鉴于您有帐户 ID 列表,您尝试过吗?
var "accounts" {
default = ["123", "456", "789"]
type = "list"
}
locals {
accounts_arn = "${formatlist("arn:aws:iam::%s", var.accounts)}"
}
然后在您的保单文件中:
principals {
type = "AWS"
identifiers = ["${local.accounts_arn}"]
}
我还没有真正尝试过,但想不出它不起作用的原因。
我想为包含所有三个变量的单个列表替换 3 个独立变量(dev_id、prod_id、stage_id),并迭代它们,应用他们遵守政策。
terraform 可以做到这一点吗?
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" 完成的,这只适用于创建多个资源(我希望我没有说大谎).
比如我用了
principals {
count = "${length(var.list)}"
identifiers = ["arn:aws:iam::${var.list[count.index]}"]
}
但那是不成功的。
是否有某种方法可以实现用单个列表(或映射)替换这 3 个变量并对其进行迭代的最终目标?
鉴于您有帐户 ID 列表,您尝试过吗?
var "accounts" {
default = ["123", "456", "789"]
type = "list"
}
locals {
accounts_arn = "${formatlist("arn:aws:iam::%s", var.accounts)}"
}
然后在您的保单文件中:
principals {
type = "AWS"
identifiers = ["${local.accounts_arn}"]
}
我还没有真正尝试过,但想不出它不起作用的原因。