Amazon EC2上的快照

时间:2011-01-28 18:28:28

标签: amazon-s3 amazon-ec2 amazon-web-services cloud

我使用CreateImageRequest拍摄正在运行的EC2机器的快照。当我登录EC2控制台时,我看到以下内容:

  1. AMI - 我可以发布的图片
  2. 卷 - 我相信这是磁盘映像?
  3. 快照 - 与快照相关的另一个条目?
  4. 任何人都可以解释每种用法的差异吗?例如,有没有办法在没有关联的“AMI”的情况下创建“快照”,在这种情况下,如何启动EBS支持的此快照副本?

    最后,是否有一个简单的API来删除AMI和所有相关数据(快照,卷和AMI)。事实证明,我们的脚本只存储AMI标识符,而不存储其余数据,所以看起来这只是取消注册图像的足够信息。

2 个答案:

答案 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
相关问题