Azure 资源组上的 TerraForm 计划 Destroy/Create 而不是更新

TerraForm Plan on Azure Resource Groups Destroy/Create instead of Update

由于迁移过程中的一些技术问题,我们不得不直接在门户中对 Azure 资源进行一些更改。为了再次更新我们的 Terraform 状态文件,我们计划导入一些资源。

但是,在只有 1 个资源组的 POC 环境中进行试验时,我们已经 运行 遇到了麻烦。

我正在执行这些指令。

TerraForm import -var-file="T:\_config\%SIB_Subscription%\%Core%\terraform.tfvars" "module.provision_resourcegroup.module.rg_create[\"edw-10\"].azurerm_resource_group.rg" /subscriptions/8dc72845-b367-4dcc-98f9-d9a4a933defc/resourceGroups/rg-poc-edw-010
 
TerraForm plan -var-file="T:\_config\%SIB_Subscription%\%Core%\terraform.tfvars" -out "T:\_CommandLine\_Logs\planfile.log"

环境变量设置正确,因为状态文件是在 blob 存储上创建的。 但是当查看屏幕上的输出时,我看到了这个。

  # module.provision_resourcegroup.module.rg_create["edw-1"].azurerm_resource_group.rg will be destroyed
  -  - resource "azurerm_resource_group" "rg" {
      - id       = "/subscriptions/oooooo-zzzz-xxxx-yyyy-zzzz/resourceGroups/rg-poc-edw-001" -> null
      - location = "westeurope" -> null
      - name     = "rg-poc-edw-001" -> null
      - tags     = {
          - "APMId"              = "00000"
          - "CMDBApplicationId"  = "tbd"
          - "CMDBApplicationURL" = "tbd"
          - "Capability"         = "DAS - Data Analytics Services"
          - "Das_Desc"           = "DAS Common Purpose"
          - "Solution"           = "EDW"
        } -> null

      - timeouts {}
    }

  # module.provision_resourcegroup[0].module.rg_create["edw-1"].azurerm_resource_group.rg will be created
  + resource "azurerm_resource_group" "rg" {
      + id       = (known after apply)
      + location = "westeurope"
      + name     = "rg-poc-edw-001"
      + tags     = {
          + "APMId"              = "00000"
          + "CMDBApplicationId"  = "tbd"
          + "CMDBApplicationURL" = "tbd"
          + "Capability"         = "DAS - Data Analytics Services"
          + "Das_Desc"           = "DAS Common Purpose"
          + "Solution"           = "EDW"
        }
    }

因此不能使用,因为应用会在创建新 RG 之前删除 RG。有什么方法可以让我明白为什么 TF 想要重新创建?

这是我创建模块的代码。

resource "azurerm_resource_group" "rg" {
  name     = "rg-${module.subscription.environment}-${local.rg_name_solution}-${var.rg_name_seqnr}"
  location = module.location.azure
  tags = {
    "Das_Desc"           = var.tag_Desc
    "Capability"         = var.tag_capability
    "Solution"           = var.tag_solution
    "APMId"              = var.tag_APMId
    "CMDBApplicationURL" = var.tag_CMDBApplicationURL
    "CMDBApplicationId"  = var.tag_CMDBApplicationId
  }
}

看来你的外部模块声明现在有一个count meta-argument,所以你需要根据新的命名空间重命名你的状态中的资源路径。您可以使用 terraform state mv <former name> <current name>:

重命名您所在州的资源
terraform state mv 'module.provision_resourcegroup.module.rg_create["edw-1"].azurerm_resource_group.rg' 'module.provision_resourcegroup[0].module.rg_create["edw-1"].azurerm_resource_group.rg'