Azure postgres 灵活服务器使用 terraform 创建用户

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

我正在尝试使用 terraform 创建与 postgres 灵活服务器中的数据库名称相同的用户。用户创建代码如下。

resource "azurerm_postgresql_flexible_server_configuration" "create_users" {
  name      = "create_users_script"
  server_id = azurerm_postgresql_flexible_server.example.id
  count     = length(var.db_names)
  value     = <<-EOT
    CREATE USER ${var.db_names[count.index]} WITH PASSWORD 'password1';
  EOT
}

terraform plan 看起来一切都很好,它显示了要创建的用户名,如下所示:

  # module.eng_dev_pg.azurerm_postgresql_flexible_server_configuration.create_users[0] will be created
  + resource "azurerm_postgresql_flexible_server_configuration" "create_users" {
      + id        = (known after apply)
      + name      = "create_users_script"
      + server_id = "/subscriptions/XXXXX/resourceGroups/rsg-01/providers/Microsoft.DBforPostgreSQL/flexibleServers/pg-02"
      + value     = <<-EOT
            CREATE USER keycloak WITH PASSWORD 'password1';
        EOT
    }

但是当 terraform 应用时,它会错误地显示:

错误:更新配置(订阅:“XXXXX” 资源组名称:“rsg-01” 灵活的服务器名称:“pg-02” 配置名称:“create_users_script”):执行更新:意外状态 400,错误:InvalidParameterValue:为参数 serverParameterValue 提供的值无效。指定有效的参数值。 │ 使用 module.eng_dev_pg.azurerm_postgresql_flexible_server_configuration.create_users[0], 在 ../../modules/postgres/public-postgres-flexible.tf 第 43 行,在资源“azurerm_postgresql_flexible_server_configuration”“create_users”中: 43:资源“azurerm_postgresql_flexible_server_configuration”“create_users”{

我尝试了一些类似使用 for_each 的方法,但这没有用,因为当前代码正在按预期正确轮询所需的用户名。

期望是创建用户;大约要创建 12 个用户。 所有用户创建的错误都是相同的。

正如错误所示

Invalid value given for parameter serverParameterValue
我正在寻找一种方法来指定
serverParameterValue

注意:db_names(用户名)由模块提供,如下所示:

db_names = ["keycloak", "provisioner", "account-development", "customer1-account-development", "customer1-file-development", "customer1-keycloak-development", "customer1-metadata-development", "entity-development", "file-development", "keycloak-development", "provisioner-development", "metadata-development"]
}
postgresql azure terraform-provider-azure azure-postgresql
1个回答
0
投票

Azure postgres 灵活服务器使用 terraform 创建用户

由于

postgresql flexible server configuration
模块在执行
terraform apply
以在
PostgreSQL
灵活数据库中创建用户期间失败。

或者,您可以在 Terraform 中的空资源中使用

Azure CLI
命令。

这是在

PostgreSQL flexible
服务器数据库中创建多个用户的更新代码。

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "postgreysql-resources-demo1"
  location = "eastasia"
}

resource "azurerm_postgresql_flexible_server" "example" {
  name                   = "venkatflexibleserver5"
  resource_group_name    = azurerm_resource_group.example.name
  location               = azurerm_resource_group.example.location
  version                = "12"
  administrator_login    = "psqladmin"
  administrator_password = "H@Sh1CoR3!"
   zone                   = "1"


  storage_mb = 32768

  sku_name = "GP_Standard_D4s_v3"

  depends_on = [azurerm_resource_group.example]
}


resource "null_resource" "execute_az_cli" {
  provisioner "local-exec" {
    command = <<-EOT
      az postgres flexible-server connect -n "venkatflexibleserver5" -u "psqladmin" -p "H@Sh1CoR3!" -d "postgres"
      pwsh -Command "\$usernames = @('keycloak', 'provisioner', 'account_development', 'customer1_account_development', 'customer1_file_development', 'customer1_keycloak_development', 'customer1_metadata_development', 'entity_development', 'file_development', 'keycloak_development', 'provisioner_development', 'metadata_development'); foreach (\$user in \$usernames) { \$sqlCommand = \"CREATE USER \$user WITH PASSWORD 'Welcome@123'\"; az postgres flexible-server execute -n 'venkatflexibleserver5' -u 'psqladmin' -p 'H@Sh1CoR3!' -d 'postgres' -q \$sqlCommand --output table }"
    EOT
  }
  depends_on = [ azurerm_postgresql_flexible_server.example ]
}

Terraform 应用:

enter image description here

要检查

PostgreSQL database
中的所有用户,Hers 是查询。

    SELECT usename FROM pg_catalog.pg_user;

运行上面的

Terraform
代码后,脚本中指定的所有users都已经在数据库中创建了

enter image description here

参考az postgres 灵活服务器 |微软学习

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