首页 > 解决方案 > Terraform Planning 在计划更改时删除资源

问题描述

我目前有一个 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/服务
  6. terraform init并选择相同的工作区

当我执行terraform planfor~/aws/services/services.tf时,计划显示services.tf将创建资源,但它也会删除之前创建的所有资源vpc.tf

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

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

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

标签: terraformterraform-provider-aws

解决方案


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

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


推荐阅读