EC2 实例存储克隆或通过 gui 管理控制台复制到 ebs

dev*_*ull 0 amazon-ec2

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

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

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

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

cyb*_*x86 6

您无法从 AWS 控制台对实例存储卷上的数据执行任何操作。这有一个很好的理由,我将在后面介绍。

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

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

EU-West-1(32 位和 64 位)中有多个 EBS-root Debian 6 AMI 可用。其中一些可以在Debian Wiki上找到。

现在通过 AWS GUI,我可以制作实例卷的快照和/或什至创建一个卷。但是从快照制作的映像无法启动。

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

AWS 控制台

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

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

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

克隆使用实例存储的 EC2 实例或从实例存储的创建快照从 gui aws 管理控制台而不是命令行启动新的 EBS 实例(相同克隆)的最佳解决方案是什么?在拒绝之前,请考虑没有关于如何通过 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 用户 ID -s 大小
  • ec2-upload-bundle 将其保存到 S3
    ec2-upload-bundle -b BUCKETNAME -m MANIFESTFILE -a ACCESSKEY -s SECRETKEY
  • 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 SOURCE_DIRECTORY -d DESTINATION_DIRECTORY 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 以确保一切正常。