非默认VPC封隔器和Terraform之间的循环依赖关系

非默认VPC封隔器和Terraform之间的循环依赖关系,terraform,packer,Terraform,Packer,我的部署工作流是首先使用Packer创建ami,然后使用Terraform进行部署 我有一个EC2类,它是在2013年之前创建的,所以没有配置默认的VPC 当我运行packer build packer.json时,工具会抱怨 amazon-ebs: Adding tag: "Name": "Packer Builder" ==> amazon-ebs: Error launching source instance: VPCResourceNotSpecified: The sp

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

我有一个EC2类,它是在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,然后运行封隔器。还是按相反的顺序运行?或者,我们拆分网络配置(VPC),使用Terraform部署一次,然后使用Packer,然后使用Terraform部署其余的服务器

更新: 如果我使用该策略:
运行网络模块(主要是静态的东西),然后运行Packer,然后运行“频繁变化的东西”模块,我如何在Terraform和Packer之间共享状态?意思是,一旦我创建了一个新的专有网络,我如何让Packer知道这个新的专有网络id?是否需要修改每个打包机文件?

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


对于一个小的设置,合理的做法是将其划分为大部分静态内容(专有网络、子网、路由等)。经常更换物品(EC2、SG等)。这也将解决您的依赖循环

谢谢你回答我的问题。如果我创建了一个新的VPC,TF和Packer如何共享状态?我不确定,Packer没有状态。例如,在使用Terraform创建了一个新的VPC和子网之后,我获得了一个新的VPC id和子网id。我如何将此信息传递给Packer json文件?请参阅
var
var file
命令的参数。