我想使用 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
您能建议如何解决吗?预先感谢!
资源名称不能是动态的。 Terraform 需要文字资源名称 - 您不能在资源名称中使用变量、字符串插值等。
Hashicorp Terraform 的最佳实践 说:
为了保持一致性和可读性,请使用描述性名词并使用下划线分隔单词。不要在资源标识符中包含资源类型,因为资源地址已包含它。
但是,如果您描述已经存在的服务帐户,则可能更适合使用 import 块或命令 - https://developer.hashicorp.com/terraform/cli/import
然后您可以将这些服务帐户导入到通过 for_each 创建的资源中。