问题描述
我正在开发下面提供的模块,以通过 terraform 管理 AWS KMS 密钥,并且我正在使用 flatten 函数,但是当我调用此模块时,我得到的输出为空。
有没有想过为什么我的输出是空的?
模块
main.tf
locals {
kms_keys = flatten([
for key,kms_key in var.kms_key_list : [
for index in range(kms_key.key_id) : {
key_id = index
aws_kms_alias = kms_key.alias
is_rotating = kms_key.enable_key_rotation
deletion_window_in_days = kms_key.deletion_window_in_days
is_enabled = kms_key.is_enabled
description = kms_key.description
policy = kms_key.policy
}
]
])
}
resource "aws_kms_key" "main" {
for_each = {
for k,v in local.kms_keys: k => v if v.key_id > 0
}
deletion_window_in_days = each.value.deletion_window_in_days
is_enabled = each.value.is_enabled
enable_key_rotation = each.value.enable_key_rotation
description = each.value.description
policy = each.value.policy
tags = merge({
Name = each.value.aws_kms_alias
},var.common_tags)
}
resource "aws_kms_alias" "alias" {
for_each = aws_kms_key.main
name = "alias/${each.value.tags.Name}"
target_key_id = each.value.key_id
}
variables.tf
variable "kms_key_list" {
type = map(object({
key_id = number
deletion_window_in_days = number
is_enabled = bool
enable_key_rotation = bool
description = string
policy = string
key_usage = string
customer_master_key_spec = string
alias = string
}))
}
调用 main.tf 中的模块
module "kms_keys" {
source = "../module/kms"
kms_key_list = local.kms_keys
}
kms_keys.tf
locals {
kms_keys = {
name_1 = {
key_id = 1
deletion_window_in_days = 7
is_enabled = true
enable_key_rotation = true
description = "description_1"
policy = ""
key_usage = "ENCRYPT_DECRYPT"
customer_master_key_spec = "SYMMETRIC_DEFAULT"
alias = "alias_1"
}
}
}
TF 计划输出如下所示:
Changes to Outputs:
+ kms_info = {
+ kms_key = {}
}
解决方法
这看起来很奇怪:
for index in range(kms_key.key_id)
这将遍历从 0 到 key_id
值的所有值;这真的是你想要的吗?要为从 0 到 kms_keys
的每个值在 key_id
中添加一个条目?
我对此表示怀疑,因为按照您的编码方式,如果您的 var.kms_key_list
包含带有 key_id = 10
的密钥配置,它将创建 10 个不同的 KMS 密钥,所有具有相同的配置值。
基本上,我不理解嵌套 for
循环的目的。
如果您能提供以下样品:
- 输入变量,但带有
key_id
> 1 - 您希望看到的输出
那么我们也许可以提供帮助。 另外,我在模块或父文件中都没有看到任何 output
声明,因此必须缺少这些;请包括他们。