我已经使用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??
答案 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()));
}
}
}
}
}