Terraform 导入 - 资源标签是否重要?

Terraform Import - Is the Resource Label critical?

我们在 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 中获取“Azure 资源 ID”一样Azure 门户甚至 Az CLI 查询?

  3. 我如何确保任何子资源(例如子网)都包含在导入中,而不必通过 Azure 门户手动拖网来识别它们中的每一个?

  1. 不,绝对不是。随便选吧。
  2. 不,Azure 通常不知道这个标签,它是 terraform 内部的东西。
  3. 遗憾的是,您需要手动单独导入每个资源。

您确定当前状态文件丢失了吗?存储位置没有版本控制?没有开发人员仍然有状态文件的本地副本吗?