![](/img/trans.png)
[英]How i get any value from the tuple in output of module in Terraform?
[英]Terraform - Get a value from map output
我使用aws_iam_group
和for_each
循环创建了 AWS IAM 组
resource "aws_iam_group" "all" {
for_each = toset(local.groups)
name = each.key
path = "/"
}
然后我输出所有组
output "groups" {
value = aws_iam_group.all
}
这是运行terraform output groups
后的结果
{
"developer" = {
"arn" = "arn:aws:iam::*********:group/developer"
"id" = "developer"
"name" = "developer"
"path" = "/"
"unique_id" = "**************"
}
"devops" = {
"arn" = "arn:aws:iam::*********:group/devops"
"id" = "devops"
"name" = "devops"
"path" = "/"
"unique_id" = "**************"
}
}
我的问题:
如何使用 terraform output 命令从 output 获取单个组?
如果您只想为组名获取一个值,我认为使用 output 无法按照您指定的方式实现。 但是,您可以做的是定义另一个 output 并执行以下操作:
output "developer_group" {
value = aws_iam_group.all["developer"].arn
}
另一方面,如果您不想要另一个 output,您可以做的是使用内置的values
function [1] 仅获取使用for_each
循环创建的键值对的值。 为此,您需要将 output 更改为:
output "groups" {
value = values(aws_iam_group.all)[*].arn
}
这将 output 所有组的所有 ARN,这将是一个列表:
groups = [
"arn:aws:iam::*********:group/developer",
"arn:aws:iam::*********:group/devops",
]
最后一个选项可能是使用内置 function 的values
,但不要使用通配符 ( [*]
),您只需指定要为其 output 值的索引:
output "groups" {
value = values(aws_iam_group.all)[0].arn
}
请记住,如果 output 中的顺序在上一个示例中发生更改,您可能会得到错误组的 ARN。 最后一个示例实际上与第一个示例相同。
@sam ben,这应该可以
aws_iam_group.all[“开发者”].arn
因为“all”是一个列表,所以我们使用列表中的特定项目(在这种情况下为开发人员),然后引用来自“开发人员”的特定项目(在给定情况下为 arn)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.