能否通过Terraform实现Azure PostgreSQL灵活服务器的备份恢复及权限配置?
用Terraform实现Azure PostgreSQL灵活服务器备份恢复及权限配置
可以用Terraform实现备份恢复
Terraform的AzureRM Provider完全支持从现有备份恢复创建新的PostgreSQL灵活服务器,核心是通过azurerm_postgresql_flexible_server资源配置恢复参数,同时可配套完成登录用户创建与数据库权限配置。
完整配置示例
1. 基础Provider与恢复服务器配置
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.0" } } } provider "azurerm" { features {} } # 从指定时间点备份恢复新服务器 resource "azurerm_postgresql_flexible_server" "restored_server" { name = "restored-postgres-flex" resource_group_name = "your-resource-group-name" location = "eastus" # 需与原服务器区域一致 version = "13" # 必须与原服务器PostgreSQL版本匹配 administrator_login = "restored-admin" administrator_password = "StrongPass_123!" storage_mb = 32768 # 不小于原服务器存储大小 sku_name = "GP_Standard_D2s_v3" # 可匹配原SKU或按需调整 # 恢复核心参数 restore_point_in_time = "2024-05-20T10:00:00Z" # 需在原服务器备份保留期内 source_server_id = "/subscriptions/your-subscription-id/resourceGroups/your-rg/providers/Microsoft.DBforPostgreSQL/flexibleServers/original-server-name" } # 添加防火墙规则允许Terraform访问服务器 resource "azurerm_postgresql_flexible_server_firewall_rule" "allow_terraform" { name = "allow-terraform-ip" server_id = azurerm_postgresql_flexible_server.restored_server.id start_ip_address = "your-terraform-exec-ip" end_ip_address = "your-terraform-exec-ip" }
2. 创建服务器级登录用户
# 创建应用级服务器登录 resource "azurerm_postgresql_flexible_server_administrator_login" "app_login" { server_id = azurerm_postgresql_flexible_server.restored_server.id login_name = "app_user_login" password = "AppPass_456!" }
3. 配置数据库级别权限
需引入PostgreSQL Provider直接操作数据库权限:
provider "postgresql" { host = azurerm_postgresql_flexible_server.restored_server.fqdn port = 5432 username = "${azurerm_postgresql_flexible_server.restored_server.administrator_login}@${azurerm_postgresql_flexible_server.restored_server.name}" password = azurerm_postgresql_flexible_server.restored_server.administrator_password sslmode = "require" connect_timeout = 15 } # 针对恢复后的目标数据库配置权限(示例为public schema) resource "postgresql_grant" "app_user_db_access" { database = "restored-db-name" # 替换为恢复的数据库名称 role = azurerm_postgresql_flexible_server_administrator_login.app_login.login_name object_type = "database" privileges = ["CONNECT", "TEMPORARY"] } resource "postgresql_grant" "app_user_table_access" { database = "restored-db-name" role = azurerm_postgresql_flexible_server_administrator_login.app_login.login_name object_type = "table" privileges = ["SELECT", "INSERT", "UPDATE", "DELETE"] schema = "public" }
关键注意事项
- 恢复时间点必须在原服务器的备份保留周期内(默认7天,最长可配置35天)
- 新服务器的区域必须与原服务器一致,SKU与存储配置不能低于原服务器的最小值
- 管理员密码需符合Azure的复杂度要求(至少8字符,包含大小写、数字、特殊字符)
- 若原服务器已删除,
source_server_id仍可使用原服务器的资源ID,只要备份未过期
内容的提问来源于stack exchange,提问作者Ikteaja hsan
相关产品推荐
相关产品推荐

