代码之家  ›  专栏  ›  技术社区  ›  xyz1234

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

  •  0
  • xyz1234  · 技术社区  · 6 年前

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

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

    1. terraform init 在/aws目录中。
    2. terraform apply
    3. vpc.tf
    4. cd~/aws/服务
    5. 地形初始化 并选择相同的工作区

    terraform plan 对于 ~/aws/services/services.tf ,平面图显示 services.tf 专有网络.tf

    如果我去的话也会发生同样的情况 ~/aws/iam 试着 地形平面图 对于 iam.tf 也。该计划显示将创建资源,但VPC资源将被删除。

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

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   micarlise    6 年前

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

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

        2
  •  0
  •   xyz1234    6 年前

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

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