什么时候在Packer和Terraform中提供?

时间:2018-03-16 06:49:47

标签: amazon-web-services amazon-ec2 terraform packer

我坐的时候需要在启动时为一些软件包配置EC2实例。存在一些(企业/公司)约束:

  • 我需要在特定的AMI之上进行配置,这会增加企业级的东西,例如LDAP / AD访问等等。
  • 这些更改旨在用于所有内部开发机器

由于主要是第二个约束,我想知道放置配置的最佳位置在哪里。这就是我想出来的

在Terraform中提供

正如它所述,我只是在terraform中为必要的实例提供。如果我将这些资源打包到模块中,那么配置不会“泄漏”。缺点

  • 我将无法在模块顶部添加一组不同的配置步骤?
  • 配置的更改可能会导致实例在申请时被销毁?
  • 由于尝试安装的软件包
  • ,配置需要很长时间

在Packer中进行配置

这是基于Packer允许您在AMI之上进行配置的assumption,以便AMI可以“扩展”。此外,这只会在AWS中使用,因此不会使用其他构建器。 Packer中的配置使Terraform代码更加简单,并且适用的terraform将变得更快,因为它只是您启动的AMI。

对我来说,这两种方法都有它们的位置。但我真正想知道的是你何时选择Packer Provisioning而不是Terraform Provisioning?

2 个答案:

答案 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实例经常说2到3次 那天然后用打包器创建一个定制的AMI,然后打电话 ami through terraform。
  • 如果基本图像(由打包程序创建的AMI)基于频繁更改 根据您的要求,然后与包装商一起使用。但对我来说 运行打包程序脚本非常耗时。
  • 您也可以对包装工做同样的事情。你可以写你的 脚本中的需求并以terraform调用它。拥有一切 并入terraform脚本会减少一些时间

最后是你决定和你提出EC2实例的频率。