首页 > 解决方案 > Terraform - .tfstate 文件中的唯一 ID 是否总是从未使用过?

问题描述

在 Terraform 状态文件中,以下是针对 OpenStack 的 .tfstate 文件的一部分(它使用 AWS API,因此 AWS 是提供者):

"aws_instance.7.3" 
  "primary": {
    "attributes": { 
      "id": "6b646e50-..."

假设我在控制台中手动删除了一个实例/资源。我的 Terraform 配置可以更改为 Terraform 计划可以触发 ai) 重新创建 (+/-) 或 aii) 销毁 (-) 和创建/添加 (+)。

问题是:在任何一种情况下,创建的新节点是否有可能具有与之前在状态文件中相同的“id”属性?

换句话说,"id"属性("instance_id"在 GCP 的情况下)在整个基础设施的生命周期中是否总是唯一的?(以便我知道在将旧 tfstate 文件与新 tfstate 文件与"id""instance_id"属性进行比较时确定创建/重新创建了一个新节点,并确保 .tfstate 反映了计划中所说的情况。)

我检查 .tfstate 是否反映计划(创建/重新创建/销毁的确切数量)的原因是,尽管“应用”是根据“计划”发生的,但有时 .tfstate 并不反映这一点。

原因是在 "apply" 之后,terraform 似乎对提供者进行了 GET 调用以更新 .tfstate 文件,并且此 GET 调用有时会返回基础设施的不一致状态(即,即使它可能不会返回节点的详细信息被创建并且是基础设施的一部分!)。

在这种情况下,我必须在我们的自动化工具中告知 .tfstate 没有按照计划发生,因此 .tfstate 文件中可能存在损坏/不一致,以便通过手动导入来修复它。

标签: amazon-web-servicesgoogle-cloud-platformterraformterraform-provider-awsterraform-provider-gcp

解决方案


推荐阅读