GCP 机密的 Terraform for_each,附加 random_ID 后缀

Terraform for_each for GCP secret, append with random_ID suffix

我一直在努力寻找一种方法让我的 terraform 文件更流畅,我必须为我们的生产和暂存环境创建大约 15 google 个秘密资源及其各自的秘密版本。

我一直在尝试使用 for_each 看看是否可以在不滚动很长的 .tf 文件的情况下实现这一点。然而,作为用户名(和密码)创建的一部分,我使用了一些内置的 TF 函数,例如 random_ID 生成器和密码生成器,但我似乎无法将它们与设置集成。这是我当前的测试 terraform 设置:


resource "random_id" "dbusername_suffix" {
  byte_length = 4
}

resource "google_secret_manager_secret" "user" {
  for_each = toset( ["user1", "user2", "user3"] )
  provider = google-beta

  secret_id = each.key

  replication {
    automatic = true
  }

  depends_on = [google_project_service.secretmanager]
}

resource "google_secret_manager_secret_version" "user-secret-version" {
  provider = google-beta
  for_each = toset( ["user1", "user2", "user3"] )

  secret      = google_secret_manager_secret.user[each.key].id
  secret_data = each.key_${random_id.dbusername_suffix.hex}
}

我希望秘密数据看起来像这样:例如 user1_hgfjsidg。但是它不喜欢 ${random_id.dbusername_suffix.hex} 并抱怨在 each.key 旁边使用变量并且不会 运行。我也尝试过使用引号,所做的只是使用数据“each.key-jsflknlf”创建秘密,因此它不会读取密钥。

我也试过这样做:

resource "google_secret_manager_secret_version" "user-secret-version" {
  provider = google-beta
  for_each = toset( ["user1_${random_id.dbusername_suffix.hex}", "user2_${random_id.dbusername_suffix.hex}", "user3_${random_id.dbusername_suffix.hex}"] )

  secret      = google_secret_manager_secret.user[each.key].id
  secret_data = each.key
}

但这也行不通,因为它要求数据位于秘密名称中,这会破坏对象。

如果可以的话,任何尝试的想法都会很棒。

排序,re-read 文档,发现它需要采用这种格式:

secret_data = "${each.key}_${random_id.dbusername_suffix.hex}"