尝试研究如何配置 EC2 自动缩放以在生成新实例时自动附加 EBS 卷。
理想情况下,当产生新实例时,我们会尝试实现以下目标。
从主实例(组中当前活动的实例之一)生成快照(这可能会随着自动缩放添加和删除实例而有所不同。)
从我们的 AMI 创建一个新实例
从 1 中的快照创建 EBS 卷。
将卷附加并安装到实例
将新实例添加到负载均衡器。
这可能吗?关键问题在于处理 EBS 方面的事情……
有什么建议吗
答案1
在一定程度上,通过一些基本的 API 调用可以实现这一点。如何进行 API 调用取决于您,可以使用路径中已有的工具(或至少它们应该已经存在)从命令行进行调用,或者使用 Amazon 为其构建 SDK 的各种库(包括 Java、Ruby、Python、PHP 和 .NET)进行调用。以下说明针对的是使用 bash 脚本的 Linux 机器,尽管它们有类似的 Windows 命令,但我不知道与它们的使用相关的怪癖。
我使用 AMI 来指代 Amazon 系统映像,使用 API 调用来指代命令行工具,它们都称为 AMI 工具和 API 工具,因为它们的命名是唯一的。
要从 EBS 卷生成快照,必须将卷与实例分离。要在生产环境中实现这一点,您可能需要一个只写从属服务器,其中包含某种操作日志,以便您可以卸载它、对其进行快照、重新安装驱动器,并应用任何缺失的操作来追赶它。
- 从您的机器上卸载实例,小心处理应用程序中的任何后果(例如没有可写入的数据库)。通常我使用 umount -v /dev/sdf /$MOUNT_DIR。使用 -v 开关获取一些错误处理的输出。
- 传递卷的卷 ID 以使用以下命令创建快照ec2-创建快照。无需卸载驱动器即可执行此操作,但这样做会更安全。某些文件系统(如 xfs)可以冻结文件系统,以便安全安装快照。请务必保存快照 ID 以供日后使用。
- 如果需要,使用 mount -v -t [文件系统类型] /dev/sdf /$MOUNT_DIR 重新挂载驱动器
从已部署的 AMI 捆绑新实例相当简单。理想情况下,您的 AMI 设置为所有大部分静态信息(配置、库、已安装的程序等)都位于设备的临时存储中,所有数据(数据库、日志等)都存储在连接的驱动器上。这是理想的,因为 AMI 捆绑命令需要锁定 FS,但允许您排除某些目录。注意:对于每个目录,您都需要提供您的 Amazon 凭证,这些凭证涵盖您帐户页面中的多个内容,包括您的访问密钥 ID、秘密访问密钥、证书、私钥和 AWS 帐户 ID。
- 使用以下方式捆绑您的根文件系统ec2-bundle-vol
- 使用以下方式将捆绑包上传到亚马逊ec2-上传包
- 在 Amazon 上注册包,这样你就可以使用它启动一个实例ec2-注册. 跟踪新的 AMI ID 以便稍后重新启动时使用。
- 要启动您刚刚创建的图像或您想要重复使用的图像,请调用ec2-运行-实例,根据需要指定详细信息。
通过 API 调用可以轻松从快照创建 EBS。
- 获得快照 ID 后,只需创建卷并使用以下命令指定 IDec2-创建卷但要小心,卷的大小必须与快照的大小相同,如果您需要增加大小,请同时安装更大的驱动器并以您喜欢的方式复制数据。
要连接和安装驱动器,您需要对操作系统命令进行组合 API 调用。
再次,另一个 API 调用。我没有太多通过自动脚本使用它的经验,但它应该像调用一样简单elb-使用 lb 注册实例。
确保对这些调用的响应进行错误处理。几个月前,我遇到了一个特别的问题,ec2-upload-bundle 调用超时,无法完成整个图像的上传。如果您决定使用 SDK,步骤应该大致相同,因为所有 Amazon API 命令都包含在 SDK 中,尽管语法不同。