EC2 实例存储克隆或通过 GUI 管理控制台克隆到 EBS

EC2 实例存储克隆或通过 GUI 管理控制台克隆到 EBS

我在这里发现了类似的问题,但答案要么过时,要么来自命令行。

情况是这样的。我有一个使用实例存储的 EC2 实例(这是爱尔兰唯一可用于 Debian 6 的 AMI)。现在,通过 AWS GUI,我可以对实例卷进行快照和/或甚至创建卷。但从快照生成的映像无法启动。

最好的解决方案是什么?是克隆使用实例存储的 EC2 实例,还是从实例存储的创建快照启动新的 EBS 实例(相同克隆),从 gui aws 管理控制台而不是命令行?在拒绝之前,请考虑没有关于如何通过 aws 管理控制台执行此操作的类似问题。

暗示无法完成不是一个合适的答案。因为您可以创建实例存储支持的实例和/或卷的快照,并从该快照创建 AMI。

答案1

您无法通过 AWS 控制台对实例存储卷上的数据执行任何操作。这样做有充分的理由,稍后我会详细说明。

首先让我澄清一下你问题中的几点:

情况是这样的。我有一个使用实例存储的 EC2 实例(这是爱尔兰唯一可用于 Debian 6 的 AMI)。

EU-West-1 中有几个 EBS-root Debian 6 AMI(32 位和 64 位)。其中一些可以在Debian 维基

现在,通过 AWS GUI,我可以对实例卷进行快照,甚至可以创建卷。但是,从快照生成的映像无法启动。

AWS 所指的“快照”只能从 EBS 卷制作(见图)。就其本质而言,实例存储卷是短暂的 - 临时的。捕获实例存储卷状态的唯一方法是将文件捆绑在其上(几乎就像您通过创建存档一样) - 这些不是块级的。AWS 控制台中提到的快照适用于 EBS 卷 - 这些是块级的。您创建的快照很可能是附加到实例的 EBS 卷的快照,并且由于这不是根卷,因此尝试从中运行实例会不断失败。

AWS 控制台

此外,您无法将实例存储卷添加到正在运行的实例中。实例存储是实例类型的一个特性 - 它以固定卷大小(例如,您无法添加 15GB 的实例存储卷)并且只能在启动实例时添加(作为命令的一部分ec2-run-instances或内置于 AMI 中)。

一般来说,除非有非常好的理由(通常是高 io、瞬态任务),否则应该避免使用实例存储实例

现在,尝试回答您提出的一些问题:

最好的解决方案是什么?是克隆使用实例存储的 EC2 实例,还是从实例存储的创建快照启动新的 EBS 实例(相同克隆),从 gui aws 管理控制台而不是命令行?在拒绝之前,请考虑没有关于如何通过 aws 管理控制台执行此操作的类似问题。

使用命令行。在您认为我拒绝回答您的问题之前,请允许我解释一下。AWS 不会访问您的文件 - 您可以远程执行的任何操作都不需要了解您的实例上实际的内容。因此,创建 EBS 快照发生在块级别 - 它不需要了解文件系统或读取卷上包含的文件的权限(想象一下,如果 AWS 需要能够读取 Linux 操作系统上每个可以想象的文件系统,那将是一项不可能完成的任务)。另一方面,从实例存储卷创建“捆绑包”的过程需要对系统上的文件具有读取权限。您会注意到必须ec2-bundle-vol从相关实例运行(与 ec2-create-snapshot 命令不同,后者可以在不访问实例的情况下运行)。

命令行和 API 存在的原因有多种。首先,它们对于自动化至关重要 - 您无法编写“AWS 控制台”脚本。但同样重要的是,它们提供了更广泛的选项。虽然 AWS 控制台一直在不断添加新功能,但出于某种原因,仍有许多事情只能通过命令行完成。选择最适合您的方法,但不要忽略命令行或 GUI 界面,因为两者都有其用途。

因此,由于控制台已被排除,您必须使用命令行来继续。

选项1:

从现有实例创建新的实例存储 AMI。您需要运行:

  • ec2-bundle-vol创建 AMI
    ec2-bundle-vol -d /mnt -k $EC2_PRIVATE_KEY -c $EC2_CERT -u USERID -s 大小
  • ec2-upload-bundle保存到 S3
    ec2-upload-bundle -b 存储桶名称 -m 清单文件 -a 访问密钥 -s 机密密钥
  • ec2-register注册 AMI(最后一个可以从 AWS 控制台完成)。 注册 AMI

这绝对是最简单的方法,但就我个人而言,我不会采用这种方法。如果你要付出努力,你不妨全力以赴,转换为 EBS。

选项 2:

将您拥有的文件复制到 EBS 卷并基于该卷创建新的图像。

您需要首先创建一个新的 EBS 卷(在与现有实例相同的可用区域中),然后将该卷附加到该实例。

注意:如果您计划在不同实例类型上使用 AMI,最好从 /etc/fstab 中删除对临时存储的任何引用,因为每个实例类型上可用的临时存储各不相同(通常安装在 /mnt 上)。

有两种方法可以实现此目的,具体取决于您当前拥有的内容。

  1. 如果您有一个捆绑卷(例如来自'选项 1'),您可以解除该卷的捆绑,然后使用dd它将其复制到您的 EBS 卷上(您可能需要先使用 下载捆绑包ec2-download-bundle):

    ec2-unbundle -m /local/path/to/manifest.xml -s 源目录 -d 目标目录 dd if=/path/to/image of=/dev/NAME

  2. 否则,您可以使用rsync将根卷上的文件复制到新的 EBS 卷。

    • 格式化你的 EBS 卷(例如mkfs.ext3 /dev/sdf
    • 挂载 EBS 卷(例如mkdir /mnt/ebs && mount /dev/sdf /mnt/ebs
    • 尽可能停止实例上运行的服务(以最大限度地降低不一致的风险)
    • 刷新缓存:(例如sync
    • 将文件复制到:(例如rsync -aHAXxSP --exclude /mnt/ebs / /mnt/ebs)。您也可以使用dd,但对于已挂载的源文件系统,rsync 更合适。
    • 刷新缓存:(例如sync
    • 卸载EBS卷:(例如umount /mnt/ebs
    • 检查文件系统:(例如fsck /dev/sdf

    从这里开始,您可以在 AWS 控制台中执行其余操作:制作 EBS 卷的快照并从该快照创建 AMI。启动您的新 AMI 以确保一切正常。

相关内容