如何让 Terraform 自动导入所有“已存在”的资源?

7
当我运行terraform apply -auto-approve时,我会得到以下错误:
Error: A resource with the ID "/subscriptions/.../resourceGroups/RG-SCUSTFStorage" already exists - to be managed via Terraform this resource needs to be imported into the State. Please see the resource documentation for "azurerm_resource_group" for more information.

我了解到需要运行terraform import将资源导入我的工作区。问题在于我需要逐个指定所有缺失资源的资源ID。

是否有任何方法让terraform import自动导入所有“已存在”的资源,而不需要逐个输入资源ID?


我考虑创建这样一个工具。terraform import-all 看起来很有用,我遇到了这个问题很多次,手动查找语法并逐个导入总是很麻烦。 - romaninsh
3个回答

3

很不幸,你只能通过手动输入资源ID一个一个地导入现有的资源:

尽管如此,导入命令并不会自动生成管理基础架构的配置。因此,将现有的基础架构导入Terraform是一个多步骤的过程。

更多详细信息请参见此处。我建议你在部署之前为所有的Terraform脚本使用远程状态存储。如果没有包含部署的所有资源的状态文件,则只能逐个导入它们。


2

如果您想要导入Azure资源,那么aztfy是推荐的工具,因为它是原生的Azure工具。

它可以生成terraform代码,此外,它还有一个功能,可以导入Azure资源组,自动导入并生成资源组中包含的资源的配置。 更不用说这个工具还提供了一个漂亮的基于终端的UI体验。

对于其他超大规模云服务提供商,有两个选择。

  • terracognita:根据他们的文档,也可以生成模块。
  • terraformer:由Google人员开发,但不是官方产品。

0

在Terraform中没有本地导入已经存在的资源的方法,但是有一些可用的工具可以让您不仅导入资源,而且还可以为它们生成Terraform代码(如果不存在)。

对于Azure来说,最好使用的工具是Azure-built AZtfy。这是一个将现有Azure资源纳入Terraform管理的工具。

另一个可用于导入Azure资源的工具是Google Cloud Terraformer,它支持Azure。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接