我正在尝试使用 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"]
}
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 应用:
要检查
PostgreSQL database
中的所有用户,Hers 是查询。
SELECT usename FROM pg_catalog.pg_user;
运行上面的
Terraform
代码后,脚本中指定的所有users都已经在数据库中创建了