【问题标题】:TerraForm Plan on Azure Resource Groups Destroy/Create instead of UpdateAzure 资源组上的 TerraForm 计划销毁/创建而不是更新
【发布时间】:2022-01-27 03:21:38
【问题描述】:

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

但是,在只有 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。有没有办法让我看到为什么 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
  }
}

【问题讨论】:

    标签: terraform terraform-provider-azure


    【解决方案1】:

    您的外部模块声明现在似乎有一个count 元参数,因此您需要根据新命名空间重命名您所在州的资源路径。您可以使用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'
    

    【讨论】:

    • 伟大的收获!谢谢
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 2022-07-13
    • 2021-09-01
    • 2020-10-24
    • 2018-05-03
    • 2020-12-27
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多