我坐的时候需要在启动时为一些软件包配置EC2实例。存在一些(企业/公司)约束:
由于主要是第二个约束,我想知道放置配置的最佳位置在哪里。这就是我想出来的
在Terraform中提供
正如它所述,我只是在terraform中为必要的实例提供。如果我将这些资源打包到模块中,那么配置不会“泄漏”。缺点
在Packer中进行配置
这是基于Packer允许您在AMI之上进行配置的assumption,以便AMI可以“扩展”。此外,这只会在AWS中使用,因此不会使用其他构建器。 Packer中的配置使Terraform代码更加简单,并且适用的terraform将变得更快,因为它只是您启动的AMI。
对我来说,这两种方法都有它们的位置。但我真正想知道的是你何时选择Packer Provisioning而不是Terraform Provisioning?
答案 0 :(得分:10)
使用Packer创建完成(或非常接近完成)的图像可以大大缩短部署新实例所需的时间,还允许您使用自动缩放组。
如果Terraform在每次创建EC2实例时运行Chef或Ansible等配置程序,则会为需要部署新实例时的配置程序添加一段时间。在我看来,使用Packer尽可能多地烘焙到AMI然后使用用户数据脚本/工具(如Consul-Template)来提前和提前进行配置要好得多,以提供特定于环境的差异。
Packer当然可以构建在图像之上,实际上需要指定source_ami
。我强烈建议您以允许您在Packer和Terraform的source_ami_filter
中使用aws_ami
data source的方式标记您的AMI,这样当您对AMI Packer进行更改时,Terraform会自动将这些更改为内置在下一个机会的顶部或部署。
我亲自烘焙一个相当轻量级的“Base”AMI,它可以进行一些基本的强化,并为所有部署的实例设置我想要的监控和日志记录,并确保Packer加密AMI的根卷。然后,所有其他图像都是根据最新的“Base”AMI构建的,并且不必担心确保安装/配置这些内容或担心加密根卷。
通过将配置烘焙到AMI中,您还可以转向不可变基础架构模型,该模型具有一些主要优点,因为您知道可以随时丢弃有问题的实例并且很快将其替换为新的一。根据您的成熟度级别,您甚至可以删除对实例的访问权限,以便在部署实例后不再可能更改实例,根据我的经验,这是操作问题的主要因素。
有时候您可能会遇到一些使得为AMI烘焙非常困难的事情,在这种情况下,您可能会选择在创建Terraform配置器时运行配置脚本。有时将现有流程移动到使用Terraform的配置器比烘烤AMI更容易,但我会尽可能地将事情移交给Packer。
答案 1 :(得分:0)
我遇到过同样的情况。根据我的理解
最后是你决定和你提出EC2实例的频率。