Terraform Planning 在规划更改时删除资源

Terraform Planning to delete resources when planning changes

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

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

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

我正在执行的步骤:

  1. terraform init 在 /aws 目录中。
  2. Select 工作空间
  3. terraform apply
  4. vpc.tf 资源创建成功。
  5. cd ~/aws/services
  6. terraform init 和 select 相同的工作空间

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

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

没有创建任何需要 VPC 资源的资源或更改 deleted/recreated/changed。

我不应该对这些文件使用相同的 workspace/backend 密钥吗?

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

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

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

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