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

时间:2018-09-05 20:35:38

标签: terraform terraform-provider-aws

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

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

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

我正在执行的步骤:

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

当我为terraform plan~/aws/services/services.tf时,该计划显示将创建services.tf资源,但是它将删除先前由{{1}创建的所有资源}。

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

没有创建任何资源或更改,这些资源或更改将要求删除/重新创建/更改VPC资源。

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

2 个答案:

答案 0 :(得分:1)

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

后端键的简单布局是为每个目录都有一个状态文件。即具有aws/iam/terraform.tfstateaws/services/terraform.tfstateaws/vpc/terraform.tfstate的不同s3后端密钥。或类似的效果。这种设置可以满足您的需求;能够创建,修改和/或删除服务资源而不会影响vpc资源。

答案 1 :(得分:0)

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

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

相关问题