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}"
我一直在努力寻找一种方法让我的 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}"