我有两个 AWS 账户:
- 测试帐户
- 产品帐户
我正在使用测试帐户中的打包程序创建 AMI,并希望在此之后将 AMI 复制到生产帐户。
如何使用 Packer 执行此操作并在作业完成后删除实际的 AMI?
我已经检查了以下问题,但他们没有解决我的查询:
- 如何将 AMI AWS 账号权限从一个 AMI 映像批量复制到另一个映像?
- 如何将 AMI 从一个 AWS 账户复制到另一个 AWS 账户?
您可以通过在打包程序中使用 ami_users 指令来完成此行为。这将允许指定的账户从源账户访问创建的 AMI。
如果您希望在每个账户(不同的 ID)中拥有 AMI 的深层副本,则必须在另一个账户中重新运行带有凭证的packer build
。
如上所述,使用ami_users。
我们在生产中使用它的方式是,我们通常在"vars"文件夹中为每个环境提供vars文件。vars JSON 文件中的值之一是"nonprod_account_id":"1234567890"
。然后在 packer.json 中,按如下所示使用ami_users。
"ami_users": ["{{user `nonprod_account_id`}}"]
我不清楚为什么您希望在将 AMI 复制到另一个帐户后将其从构建它的帐户中删除,而不仅仅是在"目标"帐户中构建它,除非可能有更强的访问限制或 Prod 中的某些内容,但在这种情况下,我会质疑在"松散"的地方构建的 AMI 中复制。
要专门进行复制,您可能需要此插件。
https://github.com/martinbaillie/packer-post-processor-ami-copy
从源账户中删除可能需要"手动",也可以通过清理过程自动删除超过特定时间段的 AMI。截至 2019 年 5 月,可以在一个账户中创建并共享未加密和加密 AMI 的访问权限(与其他答案相比,复制/利用加密 AMI 的能力是新的)。
一些亚马逊发布了有关新功能的帖子。
https://aws.amazon.com/about-aws/whats-new/2019/05/share-encrypted-amis-across-accounts-to-launch-instances-in-a-single-step/
https://aws.amazon.com/blogs/security/how-to-share-encrypted-amis-across-accounts-to-launch-encrypted-ec2-instances/
本文概述了使用 Packer 在账户之间复制 AMI 的过程,而不仅仅是引用另一个账户中的源,您可以扩展它以执行清理。
https://www.helecloud.com/single-post/2019/03/21/How-to-overcome-AWS-Copy-AMI-boundaries-by-using-Hashicorp%E2%80%99s-Packer
这一个显示了上面的更新过程,该过程使用跨账户授予访问权限的功能,以避免创建 AMI 的多个副本,每个账户/环境一个副本。
https://www.helecloud.com/single-post/2019/11/06/Overcome-AWS-Copy-AMI-boundaries-%E2%80%93-share-encrypted-AMIs-with-Packer-%E2%80%93-follow-up