AWS Java删除使用CreateImage创建的快照

时间:2013-03-12 21:12:43

标签: java amazon-web-services amazon-ec2

我已经使用Java API for AWS一段时间了,但不知怎的,我找不到如何删除使用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??

1 个答案:

答案 0 :(得分:2)

在浏览AWS开发者论坛后,我发现解决方案非常令人失望。

您必须检查所有快照的说明,并删除与您的图片ID匹配的快照。

使用CreateImage时,描述的格式如下: Created by CreateImage(i-xxxxxxxx) for ami-xxxxxxxx from vol-xxxxxxxx

所以这是将ami-xxxxxxx部分与您自己的图像ID匹配的问题。

修改

使用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()));
                }
            }
        }
    }
}