首页 > 解决方案 > Terraform 导入 - 资源标签是否重要?

问题描述

我们在 Azure 中的 terraform 远程状态文件已被完全销毁,我们现在面临着从头开始重新创建状态文件的挑战。我的选择是使用 Terraform 导入命令,使用以下简单语法:

terraform import <Terraform Resource Name>.<Resource Label> <Azure Resource ID>

例如,要导入现有资源组,我将在 main.tf 文件中创建以下配置。

provider "azurerm" {
    version="1.39.0"
}

# create resource group
resource "azurerm_resource_group" "rg"{
    name = "rg-terraform"
    location = "uksouth"
}

现在,我遇到的问题如下:

最初创建现有 Azure 资源时,它们被分配了使用极其复杂的命名约定的名称,其中一些字符甚至是随机生成的。更复杂的是,它们都是独一无二的,有数百个。如果为它们分配一个像“main”这样的简单名称,那么一切都会很美好,就像在许多 Terraform 示例中常用的那样,但不幸的是,情况并非如此。

因此,我的问题是:

  1. 在将用于导入的 main.tf 配置文件放在一起时,我的“资源标签”(在我的导入命令中给出)是否必须与创建资源时的原始“资源标签”名称相匹配?

  2. 如果这是强制性要求,有什么方法可以从 Azure 中检索原始“资源标签”,就像我可以从 Azure 门户甚至是 Az CLI 查询中获取“Azure 资源 ID”一样?

  3. 如何确保导入中包含任何子资源(例如子网),而无需通过 Azure 门户手动搜索以识别每个子资源?

标签: azureterraformazureportal

解决方案


  1. 不,绝对不是。选择任何你想要的。
  2. 不,Azure 通常不知道这个标签,它是 terraform 内部的东西。
  3. 不幸的是,您需要手动单独导入每个资源。

你确定当前状态文件丢失了吗?存储位置没有版本化?是否没有开发人员仍然拥有状态文件的本地副本?


推荐阅读