2016-11-23 97 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)