使用 terraform for_each 创建正确的资源名称

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

我想使用 for_each 循环创建多个服务帐户,其名称为:

yandex_iam_service_account.loki["loki1"]
yandex_iam_service_account.loki["loki2"]
etc...

拥有这些名称很重要,因为我正在描述已经存在的服务帐户。

这是我的 main.tf

resource "yandex_iam_service_account" "loki" {
  for_each   = var.loki_accounts
  name       = each.key
  description = each.value.description
}

这是我的 vars.tf

variable "loki_accounts" {
  description = "Map of Loki accounts to be created"
  type = map(object({
    description = string
    bucket_name = string
    secret_name = string
  }))
  default = {
    "loki2" = {
      description = "loki 1",
      bucket_name = "loki1",
      secret_name = "secret-path-1"
    },
    "loki2" = {
      description = "loki 2",
      bucket_name = "loki2",
      secret_name = "secret-path-2"

但是 terraform plan 创建的服务帐户名称为:

yandex_iam_service_account.loki["loki1"]
yandex_iam_service_account.loki["loki2"]
etc...

但不是:

yandex_iam_service_account.loki1
yandex_iam_service_account.loki2

您能建议如何解决吗?预先感谢!

foreach terraform hcl
1个回答
0
投票

资源名称不能是动态的。 Terraform 需要文字资源名称 - 您不能在资源名称中使用变量、字符串插值等。

Hashicorp Terraform 的最佳实践 说:

为了保持一致性和可读性,请使用描述性名词并使用下划线分隔单词。不要在资源标识符中包含资源类型,因为资源地址已包含它。

但是,如果您描述已经存在的服务帐户,则可能更适合使用 import 块或命令 - https://developer.hashicorp.com/terraform/cli/import

然后您可以将这些服务帐户导入到通过 for_each 创建的资源中。

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