使用Jenkins和Cloud Formation的AWS AMI Automation

时间:2018-02-18 21:57:44

标签: amazon-web-services jenkins amazon-ec2 amazon-cloudformation ec2-ami

现在,我正在从EC2实例手动创建AWS AMI。我想使用Jenkins构建过程自动化该过程。

我已使用凭据配置了jenkins-cloudformation插件,并尝试触发云形成模板以启动EC2实例。从这里开始,我如何进行自动化过程以在云形成模板中创建AMI?

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但这里有一些信息供任何尝试进行此类自动化的人使用。您可能会使用 HashiCorp Packer 来创建映像,但是,如果您了解 lambdas 和 AWS API,您就不需要 Packer。

您可以通过从源 AMI 启动实例来创建新的 AMI,按照您想要的方式对其进行自定义,然后调用 AWS api 以从该实例中创建一个 AMI。为此,您可以遵循以下步骤:

  • 首先,您需要找到源图像。您可以指定 aws ec2 describe_images 过滤器来执行此操作。
  • 获得映像后,您需要从中启动一个实例。我是 boto3 api 打电话。
  • 在启动实例时,您需要将“UserData”传递给它。您的用户数据可能是安装软件包或执行高级操作的几行简单行。您可以将其全部放入一个脚本中,将其托管在 s3 中,然后下载 UserData 并执行您的脚本。
  • 完成实例上的工作后,就该capture it as a new AMI了。

那么,你会怎么做这些,胶水在哪里? 您可以使用 AWS lambda 来管理这些步骤。一个 lambda 可以找到源 AMI 并从中启动和实例化。另一个 lambda 可以捕获图像。

自定义实例后,您将触发 lambda,将其捕获为 AMI。您可以通过直接调用 lambda 来做到这一点。根据您的可重用性要求,您可能希望从 SNS 或 CloudWatch 触发该 lambda,在这种情况下,您可以将 SNS 消息发送到您的 SNS 主题或启用/触发您的 CloudWatch 规则。

您的 cloudformation 将安装这些 l​​ambda 表达式以及会触发它们的任何其他组件(SNS 和 CloudWatch)。