Terraform 导入 - 资源标签重要吗?

hit*_*126 2 azure terraform azureportal

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

terraform import <Terraform Resource Name>.<Resource Label> <Azure Resource ID>
Run Code Online (Sandbox Code Playgroud)

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

provider "azurerm" {
    version="1.39.0"
}

# create resource group
resource "azurerm_resource_group" "rg"{
    name = "rg-terraform"
    location = "uksouth"
}
Run Code Online (Sandbox Code Playgroud)

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

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

因此,我的问题是:

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

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

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

luk*_*302 6

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

您是否完全确定当前状态文件已丢失?存储位置未版本化?开发人员是否仍然拥有状态文件的本地副本?

  • luk2302 你绝对是一个救星。我不敢相信你回答我的问题的速度,你也不知道这对我意味着什么。它是在我即将参加会议以提供有关此问题的一些反馈的那一刻出现的。你绝对是一颗宝石! (2认同)
  • @hitman126 您还可以对他的答案进行投票以表示赞赏,并将其推荐为一个好的答案。 (2认同)