我使用CreateImageRequest
拍摄正在运行的EC2机器的快照。当我登录EC2控制台时,我看到以下内容:
任何人都可以解释每种用法的差异吗?例如,有没有办法在没有关联的“AMI”的情况下创建“快照”,在这种情况下,如何启动EBS支持的此快照副本?
最后,是否有一个简单的API来删除AMI和所有相关数据(快照,卷和AMI)。事实证明,我们的脚本只存储AMI标识符,而不存储其余数据,所以看起来这只是取消注册图像的足够信息。
答案 0 :(得分:7)
AMI代表可启动的机器配置 - 它实际上并不包含任何机器的数据,只是对它的引用。 AMI可以从S3或(在您的情况下)EBS快照获取其磁盘映像。
EBS卷与正在运行的实例相关联。它基本上是一个读写磁盘映像。当您终止实例时,卷将自动销毁(这可能需要几分钟,请注意)。
快照是您在创建AMI时的EBS卷的冻结图像。快照可以与AMI相关联,但并非所有快照都是AMI的一部分 - 您也可以手动创建它们。
有关EBS支持的AMI的更多信息可以在the user's guide.中找到。掌握这些概念非常重要,因此我建议在进一步操作之前给予整个用户指导。
如果要删除与AMI关联的所有数据,则必须使用AMI的blockDeviceMapping属性上的DescribeImageAttribute API调用来查找快照ID;然后按顺序删除AMI和快照。
答案 1 :(得分:1)
这个小PS脚本获取AMI参数(存储在变量中),通过将它们存储到数组中来获取给定AMI ID的快照,最后执行所需的清理(取消注册并删除快照)。 / p>
# Unregister and clean AMI snapshots
$amiName = 'ami-XXXX' # replace this with the AMI ID you need to clean-up
$myImage = Get-EC2Image $amiName
$count = $myImage[0].BlockDeviceMapping.Count
# Loop and store snapshotID(s) to an array
$mySnaps = @()
for ($i=0; $i -lt $count; $i++)
{
$snapId = $myImage[0].BlockDeviceMapping[$i].Ebs | foreach {$_.SnapshotId}
$mySnaps += $snapId
}
# Perform the clean up
Write-Host "Unregistering" $amiName
Unregister-EC2Image $amiName
foreach ($item in $mySnaps)
{
Write-Host 'Removing' $item
Remove-EC2Snapshot $item
}
Clear-Variable mySnaps