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

Terraform Planning可在规划更改时删除资源,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我目前有一个地形目录,如下所示: └── aws ├── iam │   └── iam.tf ├── services │   └── services.tf └── vpc.tf 后端是S3,我们正在使用工作区。我对每个tf配置使用相同的工作区和后端配置 我正在执行的步骤: terraform init位于/aws目录中。 选择工作区 地形应用 vpc.tf资源已成功创建。 cd~/aws/services terraform init并选择相同的工

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

└── aws
    ├── iam
    │   └── iam.tf
    ├── services
    │   └── services.tf
    └── vpc.tf
后端是S3,我们正在使用工作区。我对每个tf配置使用相同的工作区和后端配置

我正在执行的步骤:

terraform init位于/aws目录中。 选择工作区 地形应用 vpc.tf资源已成功创建。 cd~/aws/services terraform init并选择相同的工作空间 当我为~/aws/services/services.tf进行地形规划时,该规划显示将创建services.tf资源,但它也将删除先前由vpc.tf创建的所有资源

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

没有创建需要删除/重新创建/更改专有网络资源的资源或更改


我是否应该对这些文件使用相同的工作区/后端键?

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


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

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


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

感谢您的解释。这就是我现在遵循的方法。