簡體   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