Terraform 上的嵌套 for 循环并引用其他资源

问题描述 投票:0回答:1

我有一个 Terraform 模块,它接收一个名为“service_accounts_objects”的变量。每个对象都会接收一个服务帐户字符串以创建新的服务帐户以及包含该 SA 将接收的角色的字符串列表。在模块方面,我可以创建服务帐户,但现在我不知道如何引用第一个资源生成的 SA 成员以在其上应用正确的角色。 我知道我可以通过以下方式引用 google_service_account.service_account:

for_each = google_service_account.service_account

但这需要我唯一可以在此资源上使用的 for-each 循环

模块代码:

module "iam" {
  source  = "../../modules/iam"
  project = var.project
  service_accounts_objects = [
    {
      service_account = "service-${var.project_short}-tl"
      roles = [
        "roles/run.invoker",
        "roles/cloudsql.client",
        "roles/cloudsql.instanceUser",
        "roles/pubsub.publisher"
      ]
    },
    {
      service_account = "service-${var.project_short}-template"
      roles = [
        "roles/cloudsql.client",
        "roles/cloudsql.instanceUser",
        "roles/pubsub.publisher"
      ]
    }
  ]
}

resource "google_service_account" "service_account" {
  for_each = {
    for index, sa in var.service_accounts_objects:
      sa.service_account => sa
  }
  project = var.project
  account_id = each.value.service_account
}

resource "google_project_iam_member" "member" {
  for_each = {
    for i, role in var.service_accounts_objects: 
      role.roles => role
    for j, members in google_service_account.service_account:
      members.member => members
  }
  member  = each.value.member
  project = var.project
  role    = each.value.role
}

我是 Terraform 的菜鸟,我不知道这是否可能

loops object templates terraform nested
1个回答
0
投票

如果“第一个服务”是指 GCP 服务帐户,则应该可以通过

google_service_account.service_account[X]
访问它,其中
X
是您在
service_accounts_objects.[].service_account
属性下拥有的任何内容

只是一个一般提示,如果您不确定引用对象有哪些,请尝试运行

terraform state list
将它们全部列出。

© www.soinside.com 2019 - 2024. All rights reserved.