如何用Terraform输出Azure Cosmos DB for PostgreSQL的连接字符串
如何用Terraform输出Azure Cosmos DB PostgreSQL集群的连接字符串
由于azurerm_cosmosdb_postgresql_cluster资源本身没有直接提供connection_strings属性,你可以通过拼接已知属性来构造连接字符串,或者使用Azure的辅助方式获取。以下是两种可行方法:
方法1:直接拼接属性构造连接字符串
PostgreSQL的标准连接字符串格式为:postgresql://<用户名>:<密码>@<主机名>:<端口>/<数据库名>?sslmode=require
你可以利用Terraform资源的内置输出属性直接拼接:
# 你的集群资源定义(建议用变量存储密码,不要留空) resource "azurerm_cosmosdb_postgresql_cluster" "example" { name = "example-cluster" resource_group_name = var.resource_group_name location = var.resource_group_location administrator_login_password = var.admin_password coordinator_storage_quota_in_mb = 131072 coordinator_vcore_count = 2 node_count = 0 } # 输出构造好的连接字符串 output "cosmosdb_postgresql_connection_string" { value = "postgresql://${azurerm_cosmosdb_postgresql_cluster.example.administrator_login}:${azurerm_cosmosdb_postgresql_cluster.example.administrator_login_password}@${azurerm_cosmosdb_postgresql_cluster.example.fqdn}:5432/postgres?sslmode=require" sensitive = true # 标记为敏感信息,避免控制台明文泄露 }
关键属性说明:
administrator_login:集群的管理员用户名,是资源内置输出属性fqdn:集群的完全限定域名,资源内置输出属性- 默认端口为5432,默认数据库为
postgres,可根据需求替换 sensitive = true必须添加,因为连接字符串包含密码,标记后Terraform会对输出进行掩码处理
方法2:结合Azure CLI获取(可选)
如果需要更灵活的方式,也可以通过external数据源调用Azure CLI命令,但不如方法1高效:
data "external" "cluster_connection_info" { program = [ "az", "cosmosdb", "postgresql", "server-group", "show", "--name", azurerm_cosmosdb_postgresql_cluster.example.name, "--resource-group", var.resource_group_name, "--query", "[administratorLogin, administratorLoginPassword, fqdn]", "-o", "json" ] } output "cosmosdb_postgresql_connection_string_cli" { value = "postgresql://${data.external.cluster_connection_info.result[0]}:${data.external.cluster_connection_info.result[1]}@${data.external.cluster_connection_info.result[2]}:5432/postgres?sslmode=require" sensitive = true }
注意:此方法需要本地已安装并登录Azure CLI,且当前用户有集群的查看权限。
额外提示
- 绝对不要在代码中硬编码密码,建议用Terraform变量、环境变量或Azure Key Vault管理敏感信息
- 部署完成后,执行
terraform output cosmosdb_postgresql_connection_string可查看掩码输出,若需明文可添加-json参数后解析
内容的提问来源于stack exchange,提问作者Donovan HOANG
相关产品推荐
相关产品推荐

