EC2 自动缩放 AMI 并从快照自动附加新的 EBD

EC2 自动缩放 AMI 并从快照自动附加新的 EBD

尝试研究如何配置 EC2 自动缩放以在生成新实例时自动附加 EBS 卷。

理想情况下,当产生新实例时,我们会尝试实现以下目标。

  1. 从主实例(组中当前活动的实例之一)生成快照(这可能会随着自动缩放添加和删除实例而有所不同。)

  2. 从我们的 AMI 创建一个新实例

  3. 从 1 中的快照创建 EBS 卷。

  4. 将卷附加并安装到实例

  5. 将新实例添加到负载均衡器。

这可能吗?关键问题在于处理 EBS 方面的事情……

有什么建议吗

答案1

在一定程度上,通过一些基本的 API 调用可以实现这一点。如何进行 API 调用取决于您,可以使用路径中已有的工具(或至少它们应该已经存在)从命令行进行调用,或者使用 Amazon 为其构建 SDK 的各种库(包括 Java、Ruby、Python、PHP 和 .NET)进行调用。以下说明针对的是使用 bash 脚本的 Linux 机器,尽管它们有类似的 Windows 命令,但我不知道与它们的使用相关的怪癖。

我使用 AMI 来指代 Amazon 系统映像,使用 API 调用来指代命令行工具,它们都称为 AMI 工具和 API 工具,因为它们的命名是唯一的。

  1. 要从 EBS 卷生成快照,必须将卷与实例分离。要在生产环境中实现这一点,您可能需要一个只写从属服务器,其中包含某种操作日志,以便您可以卸载它、对其进行快照、重新安装驱动器,并应用任何缺失的操作来追赶它。

    • 从您的机器上卸载实例,小心处理应用程序中的任何后果(例如没有可写入的数据库)。通常我使用 umount -v /dev/sdf /$MOUNT_DIR。使用 -v 开关获取一些错误处理的输出。
    • 传递卷的卷 ID 以使用以下命令创建快照ec2-创建快照。无需卸载驱动器即可执行此操作,但这样做会更安全。某些文件系统(如 xfs)可以冻结文件系统,以便安全安装快照。请务必保存快照 ID 以供日后使用。
    • 如果需要,使用 mount -v -t [文件系统类型] /dev/sdf /$MOUNT_DIR 重新挂载驱动器

  2. 从已部署的 AMI 捆绑新实例相当简单。理想情况下,您的 AMI 设置为所有大部分静态信息(配置、库、已安装的程序等)都位于设备的临时存储中,所有数据(数据库、日志等)都存储在连接的驱动器上。这是理想的,因为 AMI 捆绑命令需要锁定 FS,但允许您排除某些目录。注意:对于每个目录,您都需要提供您的 Amazon 凭证,这些凭证涵盖您帐户页面中的多个内容,包括您的访问密钥 ID、秘密访问密钥、证书、私钥和 AWS 帐户 ID。

    • 使用以下方式捆绑您的根文件系统ec2-bundle-vol
    • 使用以下方式将捆绑包上传到亚马逊ec2-上传包
    • 在 Amazon 上注册包,这样你就可以使用它启动一个实例ec2-注册. 跟踪新的 AMI ID 以便稍后重新启动时使用。
    • 要启动您刚刚创建的图像或您想要重复使用的图像,请调用ec2-运行-实例,根据需要指定详细信息。

  3. 通过 API 调用可以轻松从快照创建 EBS。

    • 获得快照 ID 后,只需创建卷并使用以下命令指定 IDec2-创建卷但要小心,卷的大小必须与快照的大小相同,如果您需要增加大小,请同时安装更大的驱动器并以您喜欢的方式复制数据。

  4. 要连接和安装驱动器,您需要对操作系统命令进行组合 API 调用。

    • 使用ec2-创建卷并解析命令的返回值以获取卷 ID,以便您可以调用ec2-附加卷。对于卷信息,请安装到后面的设备位置,因为前面的设备位置通常用于临时存储(实例本身)。在 Linux 上,从 /dev/sdf 或更高版本开始。我在本文中使用了 /dev/sdf,但只要您保持一致,f 之后直到 p 的任何字母都应该有效。
    • 在文件系统中安装设备。在 Linux 中,我使用 mount -v -t [文件系统类型] /dev/sdf /$MOUNT_DIR。-v 开关会为您提供一些可以解析以进行错误处理的输出。

  5. 再次,另一个 API 调用。我没有太多通过自动脚本使用它的经验,但它应该像调用一样简单elb-使用 lb 注册实例

确保对这些调用的响应进行错误处理。几个月前,我遇到了一个特别的问题,ec2-upload-bundle 调用超时,无法完成整个图像的上传。如果您决定使用 SDK,步骤应该大致相同,因为所有 Amazon API 命令都包含在 SDK 中,尽管语法不同。

相关内容