如何用Terraform创建Azure Cosmos DB for PostgreSQL集群?
如何用Terraform创建Azure Cosmos DB for PostgreSQL集群
你之前的核心问题是用错了Terraform资源类型:azurerm_cosmosdb_account是用于Cosmos DB的SQL、MongoDB、Cassandra等API类型的资源,而Azure Cosmos DB for PostgreSQL是独立的托管服务,对应的Terraform资源是azurerm_cosmosdb_postgresql_cluster,以及配套的azurerm_cosmosdb_postgresql_database和azurerm_cosmosdb_postgresql_user。
正确的Terraform配置示例
以下是创建完整Cosmos DB for PostgreSQL集群的基础配置,包含你提到的PostgreSQL版本、节点缩放、存储等关键属性:
# 确保使用支持Cosmos DB for PostgreSQL的AzureRM Provider版本 terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.0.0" } } } provider "azurerm" { features {} } data "azurerm_resource_group" "main" { name = "your-resource-group-name" } # 创建Cosmos DB for PostgreSQL集群 resource "azurerm_cosmosdb_postgresql_cluster" "main" { name = "cosmos-pg-cluster" resource_group_name = data.azurerm_resource_group.main.name location = data.azurerm_resource_group.main.location # 指定PostgreSQL版本(根据区域支持,可选11/12/13/14等) postgresql_version = "14" # 集群节点数量(控制规模) node_count = 2 # 计算规格,例如通用型Gen5 2核 sku_name = "GP_Gen5_2" # 单节点存储容量(GB) storage_capacity = 32 # 开启存储自动扩容 storage_autogrow_enabled = true # 管理员账户信息 administrator_login = "pgadmin" administrator_login_password = "YourStrongPassw0rd!" # 网络配置,示例开启公网访问,可按需替换为私有链接 public_network_access_enabled = true } # 创建集群内的数据库 resource "azurerm_cosmosdb_postgresql_database" "main" { name = "app-db" cluster_id = azurerm_cosmosdb_postgresql_cluster.main.id charset = "UTF8" collation = "en_US.UTF8" } # 创建非管理员数据库用户 resource "azurerm_cosmosdb_postgresql_user" "app_user" { name = "appuser" cluster_id = azurerm_cosmosdb_postgresql_cluster.main.id password = "UserStrongPassw0rd!" }
你之前错误的原因
- 资源类型完全不匹配:
azurerm_cosmosdb_account的kind = "Parse"是用于旧版Parse API的Cosmos DB,和PostgreSQL集群没有任何关联,这导致Terraform尝试创建错误的资源类型,触发了不相关的配额限制——而你手动创建时用的是正确的PostgreSQL集群资源,所以不会碰到这个问题。 - 属性不存在:PostgreSQL版本、节点规模等你需要的属性,只存在于
azurerm_cosmosdb_postgresql_cluster资源中,azurerm_cosmosdb_account根本没有这些参数,所以之前的配置完全无法实现创建PostgreSQL集群的目标。
注意事项
- 确认你的AzureRM Provider版本在3.0.0以上,因为
azurerm_cosmosdb_postgresql_cluster是较新的资源类型。 sku_name的取值需根据目标区域的支持情况选择,可在Azure门户的集群创建页查看可选规格。- 如果后续仍碰到配额问题,可通过Azure门户提交配额申请,但你手动创建正常的话,换用正确资源后应该不会再触发之前的错误。
内容的提问来源于stack exchange,提问作者cmoetzing
相关产品推荐
相关产品推荐

