You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:37:26