通过雾化制作 AWS AMI public

Make AWS AMI public by fog

我正在使用 fog 从 运行 实例创建一个 ami:

@fog = Fog::Compute.new(
        :provider => 'AWS',
        :region => 'us-west-2',
        :aws_access_key_id => aws_access_key,
        :aws_secret_access_key => aws_secret_key
    )
@fog.create_image(instance.identity,image_name,image_description)

我可以用雾来制作这个 ami public吗?

我不知道 fog 语法,但要制作 AMI 图像 public,则需要对 AMI 图像使用 ec2:ModifyImageAttribute 操作。

http://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyImageAttribute.html

在这种情况下,您需要指定 AMI 映像 ID,同时将 "Launch Permission" 添加到 "all" 组。

AWS CLI 中 modify-image-attribute 的文档有一个设置 AMI 映像的示例 public:

http://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html

aws ec2 modify-image-attribute --image-id ami-5731123e 
  --launch-permission "{\"Add\": [{\"Group\":\"all\"}]}"

我找到了方法,我需要在上面的代码中添加一行:

@fog.modify_image_attribute(image_id,{'Add.Group' => ['all']}

如果图片状态为'pending'(比如我的情况),就会抛出异常,所以最后修改为:

@fog = Fog::Compute.new(
        :provider => 'AWS',
        :region => 'us-west-2',
        :aws_access_key_id => aws_access_key,
        :aws_secret_access_key => aws_secret_key
    )
data = @fog.create_image(instance.identity,image_name,image_description)

image_id = data.body['imageId']

print 'Waiting ami to come up'

begin
  @fog.modify_image_attribute(image_id,{'Add.Group' => ['all']})
rescue
  print(".")
  sleep(10)
  retry
end

puts 'READY!'