【问题标题】:Terraform Planning to delete resources when planning changesTerraform Planning 在计划更改时删除资源
【发布时间】:2018-09-06 05:32:21
【问题描述】:

我目前有一个 terraform 目录,如下所示:

└── aws
    ├── iam
    │   └── iam.tf
    ├── services
    │   └── services.tf
    └── vpc.tf

后端是 S3,我们正在使用工作区。我为每个 tf 配置使用相同的工作区和后端配置。

我正在执行的步骤:

  1. terraform init 在 /aws 目录中。
  2. 选择工作区
  3. terraform apply
  4. vpc.tf 资源创建成功。
  5. cd ~/aws/services
  6. terraform init 并选择同一个工作区

当我为~/aws/services/services.tf 执行terraform plan 时,计划显示将创建services.tf 资源,但它还将删除以前由vpc.tf 创建的所有资源。

如果我去~/aws/iam 并尝试terraform planiam.tf 也会发生同样的情况。该计划显示将创建资源,但将删除 VPC 资源。

没有创建需要删除/重新创建/更改 VPC 资源的资源或更改。

我不应该对这些文件使用相同的工作区/后端密钥吗?

【问题讨论】:

    标签: terraform terraform-provider-aws


    【解决方案1】:

    当 terraform 运行时,它仅从当前目录中的所有 *.tf 文件创建它的依赖关系图。因此,当您在 aws/iam 目录中运行 terraform apply 时,terraform 看不到您的 vpc.tf 文件。但是,当 terraform 检查 s3 后端状态文件时,它会看到 vpc 资源;由于这些资源不在依赖图中,因此将它们标记为销毁。由于这种行为,通常的做法是为每个单独的目录使用不同的后端状态文件。这通过“堆栈”或基础架构层将组件分开。

    后端键的简单布局是每个目录都有一个状态文件。即具有不同的 s3 后端键 aws/iam/terraform.tfstateaws/services/terraform.tfstateaws/vpc/terraform.tfstate。或者类似的效果。此设置将允许您的意图;能够在不影响 vpc 资源的情况下创建、修改和/或删除服务资源。

    【讨论】:

    • 感谢您的解释。这是我现在遵循的方法。
    【解决方案2】:

    所以,我认为问题在于我在每个 *.tf 文件中都引用了相同的状态文件。为每个 *.tf 创建不同的文件似乎已经解决了这个问题。

    如果这不是最佳做法,或者如果有办法写入一个状态文件,请告诉我。

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 2020-09-23
      • 1970-01-01
      • 2022-01-24
      • 2022-01-15
      • 1970-01-01
      • 2021-11-16
      • 2022-07-28
      • 2019-10-25
      相关资源
      最近更新 更多