繁体   English   中英

Terraform - 从 map output 获取值

[英]Terraform - Get a value from map output

我使用aws_iam_groupfor_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。 最后一个示例实际上与第一个示例相同。


[1] https://www.terraform.io/language/functions/values

@sam ben,这应该可以
aws_iam_group.all[“开发者”].arn

因为“all”是一个列表,所以我们使用列表中的特定项目(在这种情况下为开发人员),然后引用来自“开发人员”的特定项目(在给定情况下为 arn)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM