1

这个问题不是 如何导入,也不是 tfstate 的目的。这就是导入预先存在的资源的目的,尤其是。与仅引用现有资源的 ID 相比?

Terraform具有terraform import. HashiCorp 将其目的描述为:

Terraform 能够导入现有的基础设施。这允许您获取通过其他方式创建的资源并将其置于 Terraform 管理之下

这是将基础架构缓慢过渡到 Terraform 的好方法,或者如果 Terraform 可能不支持您今天需要的所有功能,那么您可以确信您将来可以使用它。

我阅读了有关 Terraform state 目的的文章.tfstate当这些文件映射回文件中的配置时,使用文件跟踪 Terraform 状态对我来说确实有意义.tf

但是我仍然不清楚独立.tfstate文件的目的是什么,它只映射到一个空的资源块。如果还没有 terraform 中的资源,我通常会做以下两件事之一:

  1. 将资源放入 terraform,手动拆除资源并使用 terraform 重新部署资源,或者...
  2. 保持资源未模板化,将其资源 ID 作为参数引用,并通过依赖它的 terraform 管理资源的数据元素获取其元数据。
  3. terraform import这两种方法的替代方案吗?如果是这样,你为什么要使用这种方法?

更改导入资源的唯一方法(文件中只有一个空的资源块, .tfstate 中有.tf详细的状态.tfstate) is to make manual changes and then re-import into ,对吧?如果是这样,那么在 terraform 中跟踪该资源的状态有什么意义呢?

我敢肯定有充分的理由。只是想更深入地了解这一点!谢谢!

4

3 回答 3

1

导入资源时terraform import,需要编写配置块以使用 Terraform 对其进行管理。在您链接的同一页面上,它指出:

目前 Terraform 导入的实现只能将资源导入状态。它不生成配置。Terraform 的未来版本也将生成配置。

因此,在运行 terraform import 之前,有必要为资源手动编写资源配置块,导入的对象将映射到该资源配置块。

因此,要将预先存在的资源置于 Terraform 管理之下,您首先将其资源块写入.tf文件中。接下来,您使用terraform import将资源映射到.tfstate. 下次运行时,Terraform 将根据资源块和资源的实际状态terraform plan确定下一次需要进行哪些更改(如果有) 。terraform apply

编辑

“为什么”terraform import是管理 Terraform 以前不知道的资源。正如您在第二个要点中提到的那样,如果您想要来自资源的元数据但不想更改资源的配置,您将使用一个data块并在依赖资源中引用它。

当您想要管理在 Terraform 之外配置的资源的配置时,您可以使用terraform import. 如果您拆除资源,可能会导致数据丢失或服务停机,直到您使用 Terraform 重新部署,但如果您使用terraform import该资源,则会保留该资源。

导入过程可以从一个空resource块开始,但需要填写属性来描述资源。您将获得导入后的好处,这可以帮助您找到块与资源实际状态terraform plan之间的差异。resource两者匹配后,您可以像 Terraform 中的任何其他资源一样继续对资源进行其他更改。

于 2020-10-17T21:08:08.883 回答
1

但是我仍然不清楚独立 .tfstate 文件的目的是什么,它只映射到一个空的资源块。

您不会使用独立的 .tfstate 文件。您将使用与所有其他资源相同的 .tfstate 文件。

如果还没有 terraform 中的资源,我通常会做以下两件事之一:

  1. 将资源放入 terraform,手动拆除资源并使用 terraform 重新部署资源,或者...
  2. 保持资源未模板化,将其资源 ID 作为参数引用,并通过依赖它的 terraform 管理资源的数据元素获取其元数据。

terraform import 是这两种方法的替代方法吗?如果是这样,你为什么要使用这种方法?

考虑这样一种情况,您有一个生产数据库,其中已经加载了数 TB 的数据,并且用户每天 24 小时都在积极地执行查询该数据库的操作。您的选择1需要一些停机时间,可能需要很多停机时间,因为您必须处理备份和恢复数 TB 的数据。您的选择2永远不会让您通过 Terraform 管理对数据库服务器的更改。这就是 Terraform 导入功能解决的问题。它让 Terraform 可以“完全控制”已经存在的资源,而无需重新创建它们。

我同意,如果系统中断不是问题,并且如果重新创建资源不会花费太多时间,那么使用选项1就是要走的路。选项2仅适用于您永远不想在 Terraform 中完全管理的资源,这实际上是与 Terraform 导入解决的一个不同的问题。

于 2020-10-18T14:54:33.737 回答
0

Terraformstate file是您的云基础架构的真实来源。Terraform 使用本地状态来创建计划并对基础设施进行更改。在任何 terraform 操作之前,terraform 会refresh使用基础设施更新状态real

于 2020-10-18T08:07:24.890 回答