将 EBS 卷自动附加到新的 Spot 实例?

将 EBS 卷自动附加到新的 Spot 实例?

我正在试验 EC2 竞价实例,需要在终止之间保留一些数据。现在据我了解,当当前价格超过我的最高出价时,它将自动终止。我假设我拥有的任何初始化脚本都将在关机时运行,这样我就可以在卸载之前将数据推送到 EBS。

我的问题是,一旦价格下降,我怎样才能自动在新的现货实例上安装相同的 EBS 卷,因为它不会有我第一次加载到根卷上的任何初始化脚本?

我是否必须创建自定义 AMI,或者是否有其他方法可以实现这一点?

答案1

如果您只是希望实例每次运行时都从固定的起点开始,那么您可以:

  1. 创建自己的 AMI 并每次将其作为实例运行,或者

  2. 指定一个用户数据脚本,该脚本每次从标准基础 AMI 启动新实例时都会根据您的规范安装和配置软件。

如果您需要在实例运行之间保持状态,则需要将数据保存在实例/AMI 之外的某个位置。例如:

  1. 数据可以在 S3、SimpleDB、DynamoDB、RDS 等上保持更新。

  2. 您可以指定一个永久 EBS 卷,实例在启动时动态附加和挂载该卷。这可以通过用户数据脚本完成。

答案2

查看ec2-spotter 项目在 GitHub 上。它是为了解决您描述的问题而创建的。

@mcenzm 的回答中描述的问题(#1 至 #4)是真实存在的,并且在 ec2-spotter 中得到了正确处理。

答案3

我已经尝试了一段时间了,但 EC2 竞价实例和附加存储仍然存在许多问题。

  1. 您要附加的卷可能与实例不在同一区域?启动时无法指定区域。
  2. 使用初始化脚本进行内部连接是可行的,但是有点异步,所以您需要对其进行测试或sleep 10说。
  3. 我不明白为什么 AWS 控制台将“分区”显示为主块设备。也许是为了阻止我们在另一个分区上盗版 Windows 映像?(sda1 而不是 sda)。祝你好运找到分区表。

    在此处输入图片描述

  4. 目前很难使用 CLI 从外部控制点进行连接,这使得使用快照进行版本控制变得困难。

  5. 因此,一般来说,我会将 ...tar.bz2 备份到另一个框中,然后在启动时填充“工作区”。这只适用于少量数据,因此使用两个卷对新 ami 进行基准测试是个好主意。无论如何,竞价实例对于“工作单元”或“可重新启动”工作非常有用,因此从服务器获取工作的概念已经确立。考虑到您正在等待 9 分钟才能启动,您可能不介意格式化(尽可能小的)磁盘。

    1. EBS 仍然相当不稳定,您需要为“优化”支付额外费用。当实例“价格过高”时,它仍然比尝试在 90 秒左右上传完成的工作更快。

    2. 我认为这一切都会随着任何“弹性文件”的提供而改变。

答案4

可能的解决方案是使用 EBS 启动 EC2 Spot 实例,然后在不需要时停止 EC2 实例,然后重新启动,因为新功能 EBS 将重新连接。

https://aws.amazon.com/about-aws/whats-new/2020/01/amazon-ec2-spot-instances-stopped-started-similar-to-on-demand-instances/

相关内容