Terraform:如何使用键值输出
Terraform: How to use key value output
我已经针对我的问题研究了可能的解决方案,但我的似乎更具体。
所以,我有一个资源 aws_kms_key
,它是由 for_each
表达式创建的:
for_each = { for keys in var.parameters : keys.name => keys if local.secrets.init.self == true }
没什么特别的,一切正常,但我不知道如何使用创建密钥的输出 arn
。这是我的输出:
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 "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
}]
"old" 方法的问题是,创建资源时我只能使用索引访问,当某些内容发生变化时,索引的顺序也会发生变化,所以当我为 dynamodb
和 flowlogs
创建密钥时,dynamodb 获取了 flowlogs
的密钥,而 flowlogs
获取了 dynamodb
的密钥,完全是随机行为。
您的新输出 key
,即使用 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
是上面的输出键,您将按如下方式使用它:
flowlog_encryption = [{
keys = module.secrets.key["alias_name1"]
retention = 14
}]
或 lookup:
flowlog_encryption = [{
keys = lookup(module.secrets.key, "alias_name1", "default_key_arn")
retention = 14
}]
我已经针对我的问题研究了可能的解决方案,但我的似乎更具体。
所以,我有一个资源 aws_kms_key
,它是由 for_each
表达式创建的:
for_each = { for keys in var.parameters : keys.name => keys if local.secrets.init.self == true }
没什么特别的,一切正常,但我不知道如何使用创建密钥的输出 arn
。这是我的输出:
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 "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
}]
"old" 方法的问题是,创建资源时我只能使用索引访问,当某些内容发生变化时,索引的顺序也会发生变化,所以当我为 dynamodb
和 flowlogs
创建密钥时,dynamodb 获取了 flowlogs
的密钥,而 flowlogs
获取了 dynamodb
的密钥,完全是随机行为。
您的新输出 key
,即使用 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
是上面的输出键,您将按如下方式使用它:
flowlog_encryption = [{
keys = module.secrets.key["alias_name1"]
retention = 14
}]
或 lookup:
flowlog_encryption = [{
keys = lookup(module.secrets.key, "alias_name1", "default_key_arn")
retention = 14
}]