为什么我不能使用 Terraform `move` 块将 Azure SQL 数据库移动到不同的资源名称?

问题描述 投票:0回答:1

我已经能够在 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-database infrastructure-as-code
1个回答
0
投票

Terraform

move
块可将 Azure SQL 数据库移动到不同的资源名称

一般来说,move用于将配置中的资源从一种资源移动到另一种资源。但是,此块有一些限制,特别是在处理自定义提供程序或注册表时。

在这种情况下,两个 SQL dB 之间的移动操作所处理的资源在

types
providers
中是不同的。这是因为使用了自定义域。

  • 虽然使用自定义域,但我们在此处定义配置和结构的方式不应有任何差异,在这种情况下,两个 SQL dB 的监视器配置都应该正确,任何差异都会导致阻止程序。
  • 另一种方法是在门户中创建监控,并且也可以实现简单的导入。

文件结构看起来像这样

├── 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 注册表

© www.soinside.com 2019 - 2024. All rights reserved.