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 ....
}