amazon-web-services - 尝试在 Terraform 中编写干代码,使用 Amazon S3 作为后端,但本地 terraform 状态阻止成功
问题描述
我已经将所有内容简化为基础来演示以下内容:创建两个 VPC 结构,一个用于测试,一个用于开发,然后尝试使用完全相同的代码(来自同一文件夹)将一个安全组放入每个环境中, (测试-vpc 和开发-vpc)。
每个 VPC 部署都使用唯一的 Amazon S3 后端,通过使用 AWS S3 存储桶中的唯一密钥来存储远程状态文件。
security_group.tf 使用一个变量来指向 terraform 远程状态文件的不同 S3 密钥文件 (key=var.vpc_choice)。其中 vpc_choice 将等于 S3 后端的键值。
然后从同一文件夹“terraform apply -vars-file=test.tfvars”执行 terraform apply 命令两次,然后再次使用不同的变量“terraform apply -vars-file=dev.tfvars”执行。
我的期望是安全组被配置到不同的 VPC 中,因为变量指向不同的后端状态。
但是,该文件夹中的本地 terraform 状态妨碍了我。我指向一个远程状态并不重要,本地状态文件知道安全组已经被配置并且想要销毁该安全组并在另一个 VPC 中创建安全组。
如果我将代码复制到另一个文件夹,如“groups2”,它就可以工作。第一个 Terraform 应用,提供给 test-vpc,第二个 terraform 应用(只要代码在不同的文件夹中),提供给 dev-vpc。因此,虽然代码完全相同,并且由于使用 .tfvars 文件回答的变量而确实提供到两个不同的 VPC,但我还没有实现从同一个文件夹进行配置的能力。
最大的问题是,这可能吗,我是否错过了不关心本地状态文件的能力,以便我可以通过使用变量来配置不同的 VPC?
您可以在https://github.com/surfingjoe/Proposed_Terraform_Modules找到我的代码副本
解决方案
一个环境 = 一个远程后端(一个 tfstate 文件)
因此,如果您有两个环境,则必须打开每个文件夹,tfstate
在远程后端设置唯一名称,然后运行terraform apply
.
推荐阅读
- c++ - 标准容器如何为其节点(内部结构)分配内存?
- uml - 理解用例图中的约束
- c# - Visual Studio for Mac 研究的类与引用的类不同
- c# - 在 Moq 中返回列表的子集
- ruby - 要求适用于同一目录中的所有文件,除了一个
- jira - 为 Jira 问题添加自定义按钮
- python - 如何使用`scipy.integrate.quad`计算依赖于另一个函数积分的函数的积分
- flutter - 如何在 Flutter 中使滑块更平滑
- c++ - OpenMP 4.5 不会使用 target 指令卸载到 GPU
- arrays - 在 Swift 中创建具有两种变量类型的二维数组