[英]Terraform: How to use key value output
我已经为我的问题研究了一个可能的解决方案,但似乎我的更具体。
所以,我有一个由for_each
表达式创建的资源aws_kms_key
:
for_each = { for keys in var.parameters : keys.name => keys if local.secrets.init.self == true }
没有什么特别的,一切正常,但是我不知道如何使用创建密钥的 output arn
。 这是我的 output:
output "key" {
description = "The 'Amazon Resource Name (ARN)' of 'KMS' key(s)"
value = zipmap(
values(aws_kms_alias.global)[*].name, values(aws_kms_key.global)[*].arn
)
}
我以前使用for
表达式,但在这种情况下,我必须使用索引来分配 kms 键的arn
,这显然不是很好,甚至是不可接受的做法。 这是我的旧 output 方式:
output "key" {
description = "The 'Amazon Resource Name (ARN)' of 'KMS' key(s)"
value = [ for key, value in aws_kms_key.global : value.arn ]
}
Usage
flowlog_encryption = [{
keys = element(module.secrets.*.key, 0)[0]
retention = 14
}]
“旧”方式的问题是,创建资源时我只能使用索引访问,而当某些事情发生变化时,索引的顺序也会发生变化,所以当我为dynamodb
和flowlogs
创建密钥时,dynamodb 获取了密钥flowlogs
和flowlogs
是dynamodb
的关键,完全随机的行为。
您的新 output key
(使用 zipmap 的密钥)将生成一个zipmap
,其密钥具有别名,以及相应的密钥 arn 值。 这将如下所示:
output "key" {
description = "The 'Amazon Resource Name (ARN)' of 'KMS' key(s)"
value = {
alias_name1 = key_arn1
alias_name2 = key_arn2
alias_name3 = key_arn3
}
}
假设module.secrets.key
是您上面的 output 密钥,您可以按如下方式使用它:
flowlog_encryption = [{
keys = module.secrets.key["alias_name1"]
retention = 14
}]
或使用查找:
flowlog_encryption = [{
keys = lookup(module.secrets.key, "alias_name1", "default_key_arn")
retention = 14
}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.