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'
由于迁移过程中的一些技术问题,我们不得不直接在门户中对 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'