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

使用Terraform创建Azure SQL Server数据库时import块不被识别

从Bacpac文件导入创建Azure SQL数据库的Terraform问题

问题背景

我尝试用Terraform从存储账户的bacpac文件创建Azure SQL Server数据库,根据官方文档说明,应该通过azurerm_mssql_database的import块实现,但执行时报错。当前使用Terraform版本1.5.2,azurerm provider版本3.0.2,之前试过create_mode方式也存在故障。

我的Terraform代码片段

resource "azurerm_mssql_database" "database" {
  name           = var.database_name
  server_id      = azurerm_mssql_server.sql_server.id
  collation      = "SQL_Latin1_General_CP1_CI_AS"
  license_type   = "LicenseIncluded"
  max_size_gb    = 4
  sku_name       = "Basic"
  import {
    storage_uri                  = var.bacpac_url
    storage_key                  = var.access_key
    storage_key_type             = "StorageAccessKey"
    administrator_login          = var.sql_user
    administrator_login_password = var.sql_password
    authentication_type          = "Sql"
  }
}

执行报错信息

Error: Unsupported block type
on main.tf line 187, in resource "azurerm_mssql_database" "database":
187: import {
Blocks of type "import" are not expected here.

我怀疑Terraform把这个import块当成了导入已有资源的import操作,想确认是语法错误还是需要采用新的实现方式?

解决方案

核心原因

你遇到的问题本质是版本兼容问题:azurerm_mssql_database的import块是在azurerm provider 3.10.0及以上版本才引入的,而你使用的3.0.2版本过于老旧,无法识别这个配置块。另外你之前尝试的create_mode方式,在旧版本中确实存在已知bug,后续版本已修复。

解决办法

  1. 升级azurerm provider版本
    将provider版本指定为3.10.0或更高的稳定版,保持现有import块语法不变,即可正常执行。示例provider配置:

    terraform {
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = ">= 3.10.0"
        }
      }
    }
    
  2. 临时替代方案(无法升级provider时)
    使用local-exec provisioner调用Azure CLI命令完成bacpac导入:

    resource "azurerm_mssql_database" "database" {
      name           = var.database_name
      server_id      = azurerm_mssql_server.sql_server.id
      collation      = "SQL_Latin1_General_CP1_CI_AS"
      license_type   = "LicenseIncluded"
      max_size_gb    = 4
      sku_name       = "Basic"
    }
    
    provisioner "local-exec" {
      command = "az sql db import --resource-group ${azurerm_mssql_server.sql_server.resource_group_name} --server ${azurerm_mssql_server.sql_server.name} --name ${azurerm_mssql_database.database.name} --storage-key ${var.access_key} --storage-key-type StorageAccessKey --storage-uri ${var.bacpac_url} --admin-user ${var.sql_user} --admin-password ${var.sql_password}"
    }
    

    注意:使用该方案需要确保运行Terraform的环境已安装并配置好Azure CLI,且拥有足够的资源操作权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:33:29