非默认 VPC 的 Packer 和 Terraform 之间的循环依赖

Cyclic dependency between Packer and Terraform for non-default VPC

我的部署工作流程是首先使用 Packer 创建 ami,然后使用 Terraform 进行部署。

我有一个 EC2-class,它是在 2013 年之前创建的,所以没有配置默认 VPC。

当我 运行 packer build packer.json 时,工具抱怨

    amazon-ebs: Adding tag: "Name": "Packer Builder"
==> amazon-ebs: Error launching source instance: VPCResourceNotSpecified: The specified instance type can only be used in a VPC. A subnet ID or network interface ID is required to carry out the request.
==> amazon-ebs:     status code: 400, request id: 35ca5736-f808-4bb9-9a34-3dca24b59259

我正计划使用 Terraform 创建 VPC。那么问题来了,执行顺序是怎样的呢? 运行 先是 Terraform,然后是 Packer。或者 运行 倒序?或者,我们把网络配置(VPC)拆分出来,用Terraform部署一次,然后再用Packer,再terraform剩下的服务器?

更新: 如果我使用策略: 运行 网络模块(大部分是静态的东西),然后是 Packer,然后是 运行 "Frequently changing things" 模块,我如何在 Terraform 和 Packer 之间共享状态?意思是,一旦我创建了一个新的 VPC,我如何让 Packer 知道这个新的 vpc_id?我需要修改每个 Packer 文件吗?

一般建议是将 Terraform 配置拆分为大小合理的部分。

对于小型设置,合理的做法是将其拆分为主要是静态的东西(VPC、子网、路由等)。 经常更改内容(EC2、SG 等)。这也将解决您的依赖周期。