terraform - Terraform Planning 在计划更改时删除资源
问题描述
我目前有一个 terraform 目录,如下所示:
└── aws
├── iam
│ └── iam.tf
├── services
│ └── services.tf
└── vpc.tf
后端是 S3,我们正在使用工作区。我为每个 tf 配置使用相同的工作区和后端配置。
我正在执行的步骤:
terraform init
在 /aws 目录中。- 选择工作区
terraform apply
vpc.tf
资源创建成功。- cd ~/aws/服务
terraform init
并选择相同的工作区
当我执行terraform plan
for~/aws/services/services.tf
时,计划显示services.tf
将创建资源,但它也会删除之前创建的所有资源vpc.tf
。
如果我也去~/aws/iam
尝试去terraform plan
,也会发生同样的情况iam.tf
。该计划显示将创建资源,但将删除 VPC 资源。
没有创建需要删除/重新创建/更改 VPC 资源的资源或更改。
我不应该对这些文件使用相同的工作区/后端密钥吗?
解决方案
当 terraform 运行时,它仅从当前目录中的所有 *.tf 文件创建它的依赖关系图。因此,当您terraform apply
在aws/iam
目录中运行时,terraform 看不到您的 vpc.tf 文件。但是,当 terraform 检查 s3 后端状态文件时,它会看到 vpc 资源;由于这些资源不在依赖图中,因此将它们标记为销毁。由于这种行为,通常的做法是为每个单独的目录使用不同的后端状态文件。这通过“堆栈”或基础架构层将组件分开。
后端键的简单布局是每个目录都有一个状态文件。即具有不同的 s3 后端键aws/iam/terraform.tfstate
,aws/services/terraform.tfstate
和aws/vpc/terraform.tfstate
. 或者类似的效果。此设置将允许您的意图;能够在不影响 vpc 资源的情况下创建、修改和/或删除服务资源。