【发布时间】:2018-05-16 18:30:30
【问题描述】:
假设我使用 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 资源对应的物理资源?
【问题讨论】:
-
如果您定义了两个相同的资源,这将如何工作?
-
你是什么意思?就像我有两个定义同名资源的不同 tf 文件一样?抱歉,我的头还在 terraform 周围,所以也许我在这里遗漏了什么?
-
是的,有点。如果您使用完全相同的参数定义了两个 EC2 实例(例如),Terraform 如何在不存储到实例 ID 的映射的情况下知道哪个是哪个?
-
嗯,假设我只有一个 tf 文件,该文件中定义的每个资源是否都需要具有唯一的名称?因此,如果这些实例本身被标记为该映射 terraform 可以知道哪个是正确的?
-
理论上是的。但一般而言,并非所有资源都是“可标记的”。 (嗯,它们可能在 AWS 中,我不知道。但它们肯定不是一般的。)
标签: terraform