terraform - 导入tf文件中定义的所有资源

标签 terraform

假设我使用 Terraform 来构建我的基础设施,并且我的 tfstate 由于某种原因被删除。这意味着我已经在 tf 文件中定义了资源,我只需要重新导入所有内容。

这必须是手动过程吗?

例如,这就是我导入 EC2 实例的方式:

terraform import aws_instance.web i-123456

如果我必须对每个资源都这样做,那是相当痛苦的(不妨删除所有内容并重新开始)。

如果我已经有了 tf 文件,有没有办法导入其中定义的所有资源?例如,我需要实例 ID 才能导入该实例。 Terraform import 命令可以读取我的 tf 文件并找到映射到“aws_instance.web”的资源吗?

为了做到这一点,Terraform 需要将该 aws 实例映射到 tf 文件中的资源 - 这当然是 tfstate 的目的。但是 Terraform 是否有办法使用资源映射来标记资源?那么我可以对 tf 文件进行导入,而 terraform 只是动态读取 tf 文件并通过唯一标签查找与 tf 资源对应的物理资源?

最佳答案

不,没有办法在 Terraform 中本地执行此操作;即使您一起编写了一种方法 - 我认为它也不会非常可靠,您也无法相信它选择了正确的资源(至少不容易)。

Terraform 在文档中多次提到您需要保护您的状态文件;这就是为什么我们鼓励远程存储(例如 S3)来处理您关心的任何事情;以及为什么这是 Terraform Enterprise 的一个卖点。

关于terraform - 导入tf文件中定义的所有资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47613926/

相关文章:

azure - 在 Terraform 中设置 Azure AD Microsoft Graph 电子邮件 API/权限

amazon-web-services - 在 Terraform 中解释 aws 的 secret

aws-lambda - 将 Terraform 输出作为 Lambda 函数的环境变量传递

amazon-web-services - 使用 Terraform 在不同区域创建 AWS S3 存储桶

google-cloud-platform - 如何在 Google Cloud 上将 cloud-init 与基于 debian 的镜像一起使用?

Terraform:未定义的远程状态处理

amazon-web-services - Terraform 多个 cloudwatch 事件触发相同的 lambda 函数

kubernetes - 在 terraform 配置中从销毁进程中排除资源

mysql - 此订阅被限制在此区域配置 MySQL 服务器请选择具有服务的其他区域,订阅限制问题类型

azure - 无法使用 RDP(远程桌面)连接到虚拟机