将azure_sql_database迁移到azure_mssql_database

g6ll5ycj  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(130)

我们在Azure(生产应用程序)中有一个实时数据库,通过terraform脚本进行管理。

resource "azurerm_sql_server" "application_sql_server" { 
   name = "name-${var.resource_suffix}" 
   resource_group_name = var.resource_group_name 
   location = var.location 
   version = "12.0" 
   administrator_login = "<Username>" 
   administrator_login_password = "<password>" 
   identity { 
     type = "SystemAssigned" 
   }  
}

字符串
到目前为止,使用azurerm_sql_database类型的资源来管理数据库。最近遇到HashiCorp引入了一个新资源来取代azurerm_sql_database。新资源是azurerm_mssql_database。如果我们在terraform脚本中简单地将azurerm_sql_database资源替换为azurerm_mssql_database,则会创建新数据库。如何在不影响现有数据库的情况下更改资源类型?

qacovj5a

qacovj5a1#

当您使用Terraform创建资源时,Terraform状态备份文件将加载到包含已部署资源定义的后端。
创建"azurerm_sql_databse"资源后,首先使用terraform state backup文件将其导入当前资源定义。
这意味着旧的Azure资源需要导入到terraform中的新资源定义中。从terraform状态文件中删除旧的资源配置,并在导入后保存文件。

  • 之前我已经用terraform创建了一个旧的数据库资源,如图所示。*

x1c 0d1x的数据



现在我想把它从azurerm_sql_databse迁移到azurerm_mssql_databse
通过将先前创建的资源定义导入到当前terraform资源文件中以将其迁移到最新的资源azurerm_mssql_databse版本来获取资源定义。

terraform import azurerm_mssql_database.example "resourceID"

字符串



现在它被迁移到azurerm_mssql_database资源中。
使用以下命令从状态文件中删除旧资源。

terraform state rm azurerm_sql_database.example


现在运行terraform apply来完成迁移,以达到您的要求。
有关相关迁移,请参阅@Christian皮尔斯的SO

相关问题