亚马逊EC2上的快照

3
我使用CreateImageRequest来对正在运行的EC2机器进行快照。当我登录EC2控制台时,我看到以下内容:
  1. AMI - 我可以启动的映像
  2. Volume - 我认为这是磁盘映像?
  3. Snapshot - 快照相关的另一个条目?
请问有人能解释一下它们的使用差异吗?例如,是否有任何方法可以创建“快照”而不必同时拥有相关的“AMI”,在这种情况下,如何启动此快照的EBS支持副本?
最后,是否有一个简单的API可以删除AMI和所有关联的数据(快照、卷和AMI)?结果我们的脚本仅存储AMI标识符,而不是其余的数据,因此似乎只有足够的信息来注销图像。
2个回答

7

AMI 代表可启动的机器配置 - 实际上它并不包含任何机器数据,只是对其进行引用。AMI 可以从 S3 或(在您的情况下)EBS 快照获取其磁盘映像。

EBS 卷与运行实例相关联。 它基本上是一个读写磁盘映像。 当您终止实例时,卷将自动销毁(这可能需要几分钟)。

快照是创建 AMI 时 EBS 卷在某一时间点的冻结图像。 快照可以与 AMI 关联,但不是所有快照都属于 AMI - 您也可以手动创建它们。

有关基于 EBS 的 AMI 的更多信息,请参阅 用户指南。 重要的是要深入了解这些概念,因此我建议在进一步操作之前仔细阅读整个用户指南。

如果您想删除与AMI相关的所有数据,则必须使用DescribeImageAttribute API调用AMI的blockDeviceMapping属性以查找快照ID;然后按顺序删除AMI和快照。


你能否添加有关如何通过SDK删除AMI的信息? - Ian R. O'Brien
@frinkenstein,这个问题最好在一个单独的问题中提问。 - bdonlan
我已经创建了第二个问题链接到这个,因为我认为这两个问题是相关的:如何使用 SDK 删除 AWS EC2 中的镜像(AMI)? - Ian R. O'Brien

1
这个小的 PowerShell 脚本接收 AMI 参数(存储在变量中),通过将快照存储到数组中获取给定 AMI ID 的快照,最后执行必要的清理操作(注销并删除快照)。
# 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接