2013-03-12 57 views
1

我已经使用AWS的AWS API一段时间了,但不知何故我找不到如何删除使用CreateImage请求创建的快照。AWS Java删除使用CreateImage创建的快照

此请求将为您提供包含图像ID的图像。 当你想删除图像,你可以取消注册它给这个ID。 但我找不到如何删除该图像正在使用的快照。

我在这里错过了什么吗?

由于提前,

Giriel

PS:一些代码来说明我的意思:

final CreateImageResult createAMIResult = AWS.ec2.createImage(new CreateImageRequest().withInstanceId(instanceID).withName(amiName).withNoReboot(noReboot)); 
final String imageId = createAMIResult.getImageId(); 

//After a while I want to remove it again 

AWS.ec2.deregisterImage(new DeregisterImageRequest(imageId)); 
//TODO: How to remove the snapshot?? 

回答

2

通过AWS开发者论坛已经搜查后,我找到了解决办法是相当令人失望。

你必须检查你的所有快照的描述,并删除一个匹配你的图像ID。 Created by CreateImage(i-xxxxxxxx) for ami-xxxxxxxx from vol-xxxxxxxx

因此,它与自己的形象标识的AMI-XXXXXXX部分匹配的问题:使用时创建图像

说明具有以下格式。

编辑

当您使用AWS提供的复制功能此解决方案不起作用。 我的新解决方案基于这样一个事实,即EBS卷作为阻止设备添加到ami并可以访问快照ID! 部分代码如图:

/** 
* Removes an ami and its snapshot. 
* @param amiID 
* @param snapshotID 
*/ 
public static void removeImage(final String amiID, final AmazonEC2 ec2) { 
    if (amiID != null) { 
     DescribeImagesResult result = ec2.describeImages(new DescribeImagesRequest().withImageIds(amiID).withOwners(owner)); 
     if (!result.getImages().isEmpty()) { 
      ec2.deregisterImage(new DeregisterImageRequest(amiID)); 
      for (BlockDeviceMapping blockingDevice : result.getImages().get(0).getBlockDeviceMappings()) { 
       if (blockingDevice.getEbs() != null) { 
        ec2.deleteSnapshot(new DeleteSnapshotRequest().withSnapshotId(blockingDevice.getEbs().getSnapshotId())); 
       } 
      } 
     } 
    } 
}