在 Terraform 中导入的目的是什么?
What is the purpose of an import in Terraform?
这个问题不是如何导入,也不是tfstate的目的是什么 .这是导入预先存在的资源的目的,尤其是。与仅引用现有资源的 ID 相比?
Terraform 有 the feature of terraform import
。 HashiCorp 将其目的描述为:
Terraform is able to import existing infrastructure. This allows you take resources you've created by some other means and bring it under Terraform management.
This is a great way to slowly transition infrastructure to Terraform, or to be able to be confident that you can use Terraform in the future if it potentially doesn't support every feature you need today.
我读了the article about the purpose of Terraform state。当这些文件映射回 .tf
文件中的配置时,使用 .tfstate
文件跟踪 Terraform 状态对我来说确实有意义。
但我仍然不清楚独立 .tfstate
文件仅映射到空资源块时的用途是什么。如果资源还没有在 terraform 中,我通常会做以下两件事之一:
- 将资源放入 terraform,手动拆除资源并使用 terraform 重新部署资源,或者...
- 保持资源未模板化,将其资源 ID 作为参数引用,并通过数据元素获取其元数据以获取依赖它的 terraform 管理资源。
terraform import
是这两种方法的替代方法吗?如果是这样,您为什么要使用这种方法?
更改导入资源的唯一方法(在 .tf
文件中只有一个空资源块,在 .tfstate) is to make manual changes and then re-import into
.tfstate` 中只有一个详细的状态,对吧?如果是这样,那么在 terraform 中跟踪该资源的状态有什么意义?
我相信这是有充分理由的。只是想更深入地了解这一点!谢谢!
使用 terraform import
导入资源时,需要编写配置块以使用 Terraform 对其进行管理。在 same page 你链接它状态:
The current implementation of Terraform import can only import resources into the state. It does not generate configuration. A future version of Terraform will also generate configuration.
Because of this, prior to running terraform import it is necessary to
write manually a resource configuration block for the resource, to
which the imported object will be mapped.
因此,要将预先存在的资源置于 Terraform 管理之下,您 首先 将其资源块写入 .tf
文件.接下来你使用 terraform import
将资源映射到你的 .tfstate
中的这个资源块。下次 运行 terraform plan
时,Terraform 将根据资源块和资源的实际状态确定下一次 terraform apply
需要进行哪些更改(如果有)。
编辑
terraform import
的“原因”是管理 Terraform 以前未知的资源。正如您在第二个要点中提到的,如果您想要资源中的元数据但 不想更改资源的配置,您将使用 data
块并在相关资源中引用它。
当您想要管理在 Terraform 外部供应的资源的配置时,您可以使用 terraform import
。如果您拆除资源,可能会出现数据丢失或服务停机,直到您 re-deploy 使用 Terraform,但如果您使用 terraform import
,资源将被保留。
导入过程可以从一个空的 resource
块开始,但需要填写属性来描述资源。导入后你会得到terraform plan
的好处,可以帮助你找到resource
块与资源实际状态的差异。两者匹配后,您可以像 Terraform 中的任何其他资源一样继续对该资源进行其他更改。
Terraform state file
是您的云基础设施的真实来源。 Terraform 使用本地状态来创建计划并对基础架构进行更改。在任何 terraform 操作之前,terraform 会执行 refresh
以使用 real
基础设施更新状态。
But it's still unclear to me what the purpose of a standalone .tfstate
file is when it only maps to an empty resource block.
您不会使用独立的 .tfstate 文件。您将使用所有其他资源所在的同一个 .tfstate 文件。
If there is a resource not in terraform yet, I would typically do one
of two things:
- put the resource in terraform, tear down the resource manually and re-deploy the resource with terraform, or...
- keep the resource un-templated, reference its resource ID as a parameter and get its metadata via a data element for
terraform-managed resources that rely on it.
Is terraform import an alternative to those two approaches? And if so,
why would you use that approach?
考虑这样一种情况,您有一个生产数据库,其中已经加载了数 TB 的数据,并且用户每天 24 小时主动执行查询该数据库的操作。您的选项 1
需要一些停机时间,可能需要很多停机时间,因为您将不得不处理 TB 级数据的备份和恢复。您的选项 2
永远不会让您通过 Terraform 管理对数据库服务器的更改。这就是 Terraform 导入功能解决的问题。它让 Terraform 可以“完全控制”已经存在的资源,而不必重新创建它们。
我同意,如果系统中断不是问题,并且重新创建资源不会花费太多时间,那么使用选项 1
是可行的方法。选项 2
仅适用于您永远不想在 Terraform 中完全管理的资源,这实际上是一个独立于 Terraform 导入解决的问题。
这个问题不是如何导入,也不是tfstate的目的是什么 .这是导入预先存在的资源的目的,尤其是。与仅引用现有资源的 ID 相比?
Terraform 有 the feature of terraform import
。 HashiCorp 将其目的描述为:
Terraform is able to import existing infrastructure. This allows you take resources you've created by some other means and bring it under Terraform management.
This is a great way to slowly transition infrastructure to Terraform, or to be able to be confident that you can use Terraform in the future if it potentially doesn't support every feature you need today.
我读了the article about the purpose of Terraform state。当这些文件映射回 .tf
文件中的配置时,使用 .tfstate
文件跟踪 Terraform 状态对我来说确实有意义。
但我仍然不清楚独立 .tfstate
文件仅映射到空资源块时的用途是什么。如果资源还没有在 terraform 中,我通常会做以下两件事之一:
- 将资源放入 terraform,手动拆除资源并使用 terraform 重新部署资源,或者...
- 保持资源未模板化,将其资源 ID 作为参数引用,并通过数据元素获取其元数据以获取依赖它的 terraform 管理资源。
terraform import
是这两种方法的替代方法吗?如果是这样,您为什么要使用这种方法?
更改导入资源的唯一方法(在 .tf
文件中只有一个空资源块,在 .tfstate) is to make manual changes and then re-import into
.tfstate` 中只有一个详细的状态,对吧?如果是这样,那么在 terraform 中跟踪该资源的状态有什么意义?
我相信这是有充分理由的。只是想更深入地了解这一点!谢谢!
使用 terraform import
导入资源时,需要编写配置块以使用 Terraform 对其进行管理。在 same page 你链接它状态:
The current implementation of Terraform import can only import resources into the state. It does not generate configuration. A future version of Terraform will also generate configuration.
Because of this, prior to running terraform import it is necessary to write manually a resource configuration block for the resource, to which the imported object will be mapped.
因此,要将预先存在的资源置于 Terraform 管理之下,您 首先 将其资源块写入 .tf
文件.接下来你使用 terraform import
将资源映射到你的 .tfstate
中的这个资源块。下次 运行 terraform plan
时,Terraform 将根据资源块和资源的实际状态确定下一次 terraform apply
需要进行哪些更改(如果有)。
编辑
terraform import
的“原因”是管理 Terraform 以前未知的资源。正如您在第二个要点中提到的,如果您想要资源中的元数据但 不想更改资源的配置,您将使用 data
块并在相关资源中引用它。
当您想要管理在 Terraform 外部供应的资源的配置时,您可以使用 terraform import
。如果您拆除资源,可能会出现数据丢失或服务停机,直到您 re-deploy 使用 Terraform,但如果您使用 terraform import
,资源将被保留。
导入过程可以从一个空的 resource
块开始,但需要填写属性来描述资源。导入后你会得到terraform plan
的好处,可以帮助你找到resource
块与资源实际状态的差异。两者匹配后,您可以像 Terraform 中的任何其他资源一样继续对该资源进行其他更改。
Terraform state file
是您的云基础设施的真实来源。 Terraform 使用本地状态来创建计划并对基础架构进行更改。在任何 terraform 操作之前,terraform 会执行 refresh
以使用 real
基础设施更新状态。
But it's still unclear to me what the purpose of a standalone .tfstate file is when it only maps to an empty resource block.
您不会使用独立的 .tfstate 文件。您将使用所有其他资源所在的同一个 .tfstate 文件。
If there is a resource not in terraform yet, I would typically do one of two things:
- put the resource in terraform, tear down the resource manually and re-deploy the resource with terraform, or...
- keep the resource un-templated, reference its resource ID as a parameter and get its metadata via a data element for terraform-managed resources that rely on it.
Is terraform import an alternative to those two approaches? And if so, why would you use that approach?
考虑这样一种情况,您有一个生产数据库,其中已经加载了数 TB 的数据,并且用户每天 24 小时主动执行查询该数据库的操作。您的选项 1
需要一些停机时间,可能需要很多停机时间,因为您将不得不处理 TB 级数据的备份和恢复。您的选项 2
永远不会让您通过 Terraform 管理对数据库服务器的更改。这就是 Terraform 导入功能解决的问题。它让 Terraform 可以“完全控制”已经存在的资源,而不必重新创建它们。
我同意,如果系统中断不是问题,并且重新创建资源不会花费太多时间,那么使用选项 1
是可行的方法。选项 2
仅适用于您永远不想在 Terraform 中完全管理的资源,这实际上是一个独立于 Terraform 导入解决的问题。