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

如何使用Terraform基于Azure存储账户的bacpac备份创建SQL数据库

首先澄清认知:RestoreExternalBackup 用于恢复SQL Server原生备份的.bak格式文件,如果你要导入的是.bacpac格式的导出备份,推荐使用专门的azurerm_mssql_database_import资源实现需求。

完整可运行配置示例如下:

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

resource "azurerm_storage_account" "example" {
  name                     = "examplesa"
  resource_group_name      = azurerm_resource_group.example.name
  location                 = azurerm_resource_group.example.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

resource "azurerm_mssql_server" "example" {
  name                         = "example-sqlserver"
  resource_group_name          = azurerm_resource_group.example.name
  location                     = azurerm_resource_group.example.location
  version                      = "12.0"
  administrator_login          = "4dm1n157r470r"
  administrator_login_password = "4-v3ry-53cr37-p455w0rd"
  public_network_access_enabled = true
}

# 可选:允许Azure服务访问SQL Server,避免导入任务被防火墙拦截
resource "azurerm_mssql_firewall_rule" "allow_azure_services" {
  name             = "AllowAzureServices"
  server_id        = azurerm_mssql_server.example.id
  start_ip_address = "0.0.0.0"
  end_ip_address   = "0.0.0.0"
}

# 直接通过bacpac导入创建数据库,无需单独声明azurerm_mssql_database资源
resource "azurerm_mssql_database_import" "from_bacpac" {
  name                = "acctest-db-d"
  server_id           = azurerm_mssql_server.example.id
  storage_key_type    = "StorageAccessKey"
  storage_key         = azurerm_storage_account.example.primary_access_key
  # 替换为你的bacpac文件实际存储路径
  storage_uri         = "https://${azurerm_storage_account.example.name}.blob.core.windows.net/你的备份容器名/你的备份文件名.bacpac"
  administrator_login = azurerm_mssql_server.example.administrator_login
  administrator_login_password = azurerm_mssql_server.example.administrator_login_password

  # 数据库SKU配置,和你原需求参数匹配
  edition             = "BusinessCritical"
  service_objective_name = "BC_Gen5_2"
  max_size_gb         = 4
}

# 审计策略单独配置,和导入逻辑解耦
resource "azurerm_mssql_database_extended_auditing_policy" "test" {
  database_id                             = azurerm_mssql_database_import.from_bacpac.id
  storage_endpoint                        = azurerm_storage_account.example.primary_blob_endpoint
  storage_account_access_key              = azurerm_storage_account.example.primary_access_key
  storage_account_access_key_is_secondary = false
  retention_in_days                       = 6
}

注意事项

  • 如果你的bacpac文件存储在其他存储账户,直接替换storage_key和storage_uri为对应存储的访问密钥和文件地址即可
  • 如果你确实要使用.bak格式的备份走RestoreExternalBackup模式,需要在azurerm_mssql_database资源中补充两个参数:external_backup_storage_uri(bak文件的blob访问地址)、external_backup_storage_access_key(存储账户访问密钥),同时确保备份文件是SQL Server原生备份格式、版本兼容目标SQL Server版本

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:12:02