2016-11-23 74 views
1

我已经从AWS账户分享了一堆AMI到另一个账户。通过AWS API或CLI修改AMI属性[创建卷]

我用这个EC2conn1.modify_image_attribute(AMI_id, operation='add', attribute='launchPermission', user_ids=[second_aws_account_id])来做到这一点。

但是,通过仅为第二个帐户添加启动权限,我可以启动一个实例,但我无法将共享AMI复制到另一个区域[在第二个帐户中]。

当我勾选复选框,从第1个帐户的用户界面,以“创建卷”,我可以从第二复制共享AMI:

1st account AMI permissions

我可以使用modify_image_attribute启动权限修改功能从boto

在文档中说,attribute (string) – The attribute you wish to change但我知道它只能更改启动权限并添加一个帐户。

然而,get_image_attribute有3个选项Valid choices are: * launchPermission * productCodes * blockDeviceMapping

那么,有没有一种方法可以通过编程将其从API调整为启动权限,或者还没有实现?

回答

1

控制台使用API​​,因此在控制台中几乎没有任何东西可以使用API​​。

请记住,AMI只是一个配置实体 - 基本启动配置,链接到(不包含)一个或多个备份快照,这是技术上独立的实体。

当它提供可选的“将创建卷权限添加到以下关联的快照”时,控制台几乎可以肯定地提出一个额外的API请求ModifySnapshotAttribute API。

又见http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modifying-snapshot-permissions.html

据推测,在复制快照到另一个地区依赖于相同的“创建卷”权限(事实上,你会看到一个复制快照都有假的源卷ID,大概的神器复制过程)。

+0

谢谢,我不知道这些细节,它帮助我寻找正确的方向。事实上,我错过了一个需要使用单独API调用的步骤。我将发布我的代码以供参考.. –

0

基于公认的答案,这是我为任何感兴趣的人写的代码。

# Add copy permission to the image's snapshot 
# Find the snapshot of the specific AMI 
image_object = EC2conn.get_image(AMI_id) 

# Grab the block device mapping dynamically 
ami_devices = [] 
for key in image_object.block_device_mapping.iterkeys(): 
    # print key #debug 
    ami_devices.append(key) 
# print ami_devices #debug 

for ami_device in ami_devices: 
    snap_id = image_object.block_device_mapping[ami_device].snapshot_id 

    # Add permission 
    EC2conn.modify_snapshot_attribute(snap_id, attribute='createVolumePermission', operation='add', user_ids=second_aws_account_id) 
    print "{0} [{1}] Permission added to snapshot".format(AMI_name,snap_id)