我已经能够在 terraform 中的资源名称之间移动 SQL 警报,例如:
moved {
from = module.myproj_sqldbs.azurerm_monitor_metric_alert.alert_storage_percentage_exceeds_80["mydb"]
to = azurerm_monitor_metric_alert.alert_storage_percentage_exceeds_80
}
运行时,上述结果会导致“替换”
terraform plan
但是,我的 SQL DB 的等效移动:
moved {
from = module.myproj_sqldbs.azurerm_mssql_database.sql_database["mydb"]
to = module.sqldb.azurerm_mssql_database.sql_database
}
产生以下错误:
╷
│ Error: Unsupported `moved` across resource types
│
│ on imports.tf line 10:
│ 10: moved {
│
│ The provider "terraformregistry.mycompany.com/hashicorp/azurerm" does not support moved operations across resource types and providers.
╵
我想也许是将它们视为不同的资源、类型,但我认为情况并非如此。 IE。如果没有这个,
plan
表示以下内容:
# module.sqldb.azurerm_mssql_database.sql_database will be created
......
# module.myproj_sqldbs.azurerm_mssql_database.sql_database["mydb"] will be destroyed
我还注意到,它依赖于“mycompany”注册表。这可能是一件事吗?
Terraform
块可将 Azure SQL 数据库移动到不同的资源名称move
一般来说,move用于将配置中的资源从一种资源移动到另一种资源。但是,此块有一些限制,特别是在处理自定义提供程序或注册表时。
在这种情况下,两个 SQL dB 之间的移动操作所处理的资源在
types
和 providers
中是不同的。这是因为使用了自定义域。
文件结构看起来像这样
├── main.tf
├── variables.tf
├── modules/
│ ├── sqldb/
│ │ ├── main.tf
│ │ ├── variables.tf
│ ├── myproj_sqldbs/
│ │ ├── main.tf
│ │ ├── variables.tf
参考:
https://developer.hashicorp.com/terraform/language/moved
https://developer.hashicorp.com/terraform/language/modules/develop/refactoring
https://developer.hashicorp.com/terraform/cli/import
azurerm_monitor_metric_alert |资源 | Hashicorp/azurerm |地形 | Terraform 注册表