如何使用Terraform在Azure PostgreSQL数据库中创建Schema
Azure PostgreSQL 灵活服务器通过Terraform创建Schema实现方案
azurerm提供方仅能管控云平台层面的PostgreSQL资源,包括灵活服务器实例、数据库、防火墙规则、备份配置等,无法操作数据库内部的schema、角色、表、权限这类对象。数据库内部对象的管理需要搭配独立的PostgreSQL提供方实现,两个提供方可在同一份Terraform配置中协同工作,不存在冲突,完整配置逻辑如下:
- 声明PostgreSQL提供方依赖,配置数据库连接参数指向你创建的Azure PostgreSQL灵活服务器,显式声明资源依赖,等云侧资源全部就绪后再初始化数据库连接
- 调用
postgresql_schema资源创建目标schema,关联到已经创建完成的业务数据库
如果你现有配置中已经定义过
terraform和required_providers块,仅需在原有块中追加postgresql提供方的声明即可,无需重复配置azurerm相关内容。
需追加的配置代码
# 声明Terraform依赖的提供方 terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">=3.0.0" } postgresql = { source = "cyrilgdn/postgresql" version = ">=1.21.0" } } } # 配置PostgreSQL提供方连接参数 provider "postgresql" { host = azurerm_postgresql_flexible_server.postgreSQL.fqdn port = 5432 database = azurerm_postgresql_flexible_server_database.postgreSQLDB.name username = "${var.postgreSQLAdmin}@${azurerm_postgresql_flexible_server.postgreSQL.name}" password = var.password sslmode = "require" connect_timeout = 15 depends_on = [ azurerm_postgresql_flexible_server.postgreSQL, azurerm_postgresql_flexible_server_database.postgreSQLDB, azurerm_postgresql_flexible_server_firewall_rule.postgreSQLFirewallRule ] } # 创建目标Schema,示例创建名为app_schema的schema,可按需修改名称与所属所有者 resource "postgresql_schema" "app_schema" { name = "app_schema" owner = var.postgreSQLAdmin }
配置注意事项
- 你当前配置的防火墙规则仅放行Azure内部服务流量,如果执行Terraform的设备不在Azure网络内,需要额外添加防火墙规则放行你执行环境的公网IP,否则会出现数据库连接超时
- 必须显式配置
depends_on依赖关系,避免Terraform在PostgreSQL服务未完全启动、防火墙规则未生效时提前尝试连接数据库 - Azure PostgreSQL强制要求SSL连接,提供方配置里的
sslmode参数不能省略,必须设置为require - 管理员用户名需要拼接
@<服务器名称>后缀,否则会出现身份认证失败
内容的提问来源于stack exchange,提问作者Aatif Akhter
相关产品推荐
相关产品推荐

