gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:28:00 24 4
gpt4 key购买 nike

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

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

我在这里遗漏了什么吗?

提前致谢,

吉里尔

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??

最佳答案

在搜索了 AWS 开发者论坛后,我发现该解决方案非常令人失望。

您必须检查所有快照的描述,并删除与您的图像 ID 匹配的快照。

使用CreateImage时,描述格式如下:由 CreateImage(i-xxxxxxxx) 为 vol-xxxxxxxx 的 ami-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()));
}
}
}
}
}

关于java - AWS Java 删除使用 CreateImage 创建的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15372224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com