使用Terraform创建Azure SQL Server数据库时import块不被识别
问题背景
我尝试用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,后续版本已修复。
解决办法
升级azurerm provider版本
将provider版本指定为3.10.0或更高的稳定版,保持现有import块语法不变,即可正常执行。示例provider配置:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 3.10.0" } } }临时替代方案(无法升级provider时)
使用local-execprovisioner调用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

