如何使用Packer将AMI复制到另一个帐户?

时间:2019-03-29 19:38:38

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

我有两个AWS账户:

  1. 测试帐户
  2. 产品帐户

我要在测试帐户中使用Packer创建AMI,然后将AMI复制到产品帐户。

我该如何使用Packer做到这一点,并在完成工作后删除实际的AMI?

我已经检查了以下问题,但他们没有解决我的问题:

  1. How do I bulk copy AMI AWS account number permissions from one AMI image to another?
  2. how to copy AMI from one aws account to other aws account?

3 个答案:

答案 0 :(得分:3)

您可以通过在Packer中使用ami_users指令来完成此行为。这将允许指定的帐户从源帐户访问创建的AMI。

如果您希望每个帐户中都有AMI的深层副本(不同的ID),则必须使用凭据将packer build重新运行到另一个帐户中。

答案 1 :(得分:1)

如上回答,请使用 ami_users

我们在生产中使用此方法的方式是,通常在“ vars”文件夹中有每个环境的vars文件。 vars JSON文件中的值之一是"nonprod_account_id":"1234567890"。然后在packer.json中,如下使用 ami_users

"ami_users": ["{{user `nonprod_account_id`}}"]

答案 2 :(得分:0)

我不清楚您为什么要在将AMI复制到另一个帐户后将其从构建它的帐户中删除,而不是仅仅在“目标”帐户中构建它,除非可能存在更强的访问限制或其他功能在Prod中,但是在那种情况下,我会质疑在“松动”的AMI中进行复制。

要专门进行复制,您可能需要此插件。

https://github.com/martinbaillie/packer-post-processor-ami-copy

从源帐户中删除可能需要“手动”,或者可以通过清除过程自动执行,该清除过程会删除早于特定时间段的AMI。自2019年5月起,可以在一个帐户中创建并共享未加密和加密AMI的访问权限(与其他答案相比,复制/利用加密AMI的功能是新的功能)。

有关此新功能的几个Amazon帖子。

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的多个副本,而每个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