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

能否通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:40:27