首页 > 解决方案 > 使用 Terraform 如何为每个数据库以及每个命名空间创建一个用户?

问题描述

我的 Terraform 脚本当前为一组命名空间(一个或多个)创建 2 个数据库。我现在需要为每个相应的数据库创建一个用户,但我无法找出正确的方法来执行此操作。

这是我目前的...

variable "namespaces" {
  type = set(string)
}

variable "databases" {
  type = set("server", "analyzer")
}

resource "postgresql_database" "server_databases" {
  for_each          = toset(var.namespaces)
  name              = "server_${each.key}"
}

resource "postgresql_database" "analyzer_databases" {
  for_each          = toset(var.namespaces)
  name              = "analyzer_${each.key}"
}

resource "random_password" "postgres_password" {
  length = 12
}

resource "postgresql_role" "read_only_user" {
  name                = "readonlyuser"
  login               = true
  password            = random_password.postgres_password.result
  skip_reassign_owned = true
}

resource "postgresql_grant" "readonly_tables" {
  depends_on  = [postgresql_database.server_databases, postgresql_database.analyzer_databases]
  for_each    = toset(var.namespaces)
  database    = "server_${each.key}"
  object_type = "table"
  privileges  = ["SELECT"]
  role        = "readonlyuser"
  schema      = "public"
}

这里的问题是database = "server_${each.key}"只会在每个命名空间中为我的服务器数据库创建一个用户。我很确定我需要一个嵌套的 for_each 但我不知道如何实现这一点。

我认为甚至应该可以循环postgresql_database资源而不是定义2个单独的资源

标签: foreachnestedterraform

解决方案


推荐阅读