Terraform 地形不';当从模块调用时,我似乎不会在列表上迭代
我有一个简单的模块是这样的:Terraform 地形不';当从模块调用时,我似乎不会在列表上迭代,terraform,Terraform,我有一个简单的模块是这样的: module "EncryptionKeys" { source = "../../../../Modules/KeyGenerator" item_list = ["${module.static_variables.item_list}"] account_id = "${module.static_variables.account_id}" key_alias_
module "EncryptionKeys" {
source = "../../../../Modules/KeyGenerator"
item_list = ["${module.static_variables.item_list}"]
account_id = "${module.static_variables.account_id}"
key_alias_suffix = "a-suffix"
key_administrator_role = "${data.aws_iam_role.admins.name}"
key_user_suffix = "some-other-suffix"
}
以下是模块中的关键资源:
resource "aws_kms_key" "key" {
count = "${length(var.item_list)}"
description = "${var.description}"
policy = "${data.aws_iam_policy_document.key_document.json}"
enable_key_rotation = "${var.enable_key_rotation}"
}
模块本身正在制定AWS IAM角色/策略,声明如下:
statement {
sid = "Allow use of the key for users"
effect = "Allow"
principals {
identifiers =
["arn:aws:iam::${var.account_id}:role/${var.key_administrator_role}", "${element(split(".",var.item_list[count.index]),0)}-${var.key_user_suffix}"]
type = "AWS"
}
actions = [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
]
resources = ["*"]
}
问题出在哪里?当我查看成功的地形平面图时,根据元素正确解析了项目列表,但它的值始终相同。i、 e.如果我将项目清单定义为:
item_list = ["a.blah", "b.foo", "c.bar", "d.foobar"]
相关资源将有四个实例,正确的拆分将发生在“.”上,但所有实例都将以“a”命名
这里的count/count.index是否存在根本性的错误?为什么它不会循环项目列表,为什么它似乎总是得到相同的值?您指定了资源键的计数,但这并不意味着它可用于您的
aws\u iam\u策略\u文档
尝试将计数包括在aws\u iam\u政策文件中,例如
data "aws_iam_policy_document" "key_document" {
count = "${length(var.item_list)}"
# rest of template ....
}
然后使用密钥资源中的计数引用密钥资源中的策略列表:policy=“${element(data.aws\u iam\u policy\u document.key\u document.*.json,count.index)}”
其次,您的问题不够清楚,模块静态变量的外观如何?@BMW请告诉我关于我的问题有什么不清楚的地方,我会尽力澄清。静态变量只是将变量传递给此模块和其他模块的一种方式,它只包含输出,如:output“foo”{default=“bar”}我在上面添加了计划输出,以显示它的外观-正在对字符串进行计算,但策略的每个实例都具有相同的“a-stg-role”值。该列表包含a、b、c、d,但有四个a-stg-role策略-该列表不进行迭代。为什么?在哪里指定计数变量?它始终需要初始化为,例如,count=“${length(item_list)}”
,否则count.index将永远无法使用iterate@Blokje5谢谢-我在模块中添加了使用该数据对象的关键资源。这是计数被设置为列表长度的地方。谢谢,这就是它。我误解了这个变量的范围。
data "aws_iam_policy_document" "key_document" {
count = "${length(var.item_list)}"
# rest of template ....
}