将EBS卷自动附加到新的竞价型实例?

我正在试验EC2点实例,并且需要在terminal之间保留一些数据。 现在据我所知,当前价格高于我的最高价。 出价,它会自动终止。 我假设我有任何init脚本将在关机时运行,所以我可以在卸载之前将数据推送到EBS。

我的问题是,一旦价格下跌,我怎么能自动挂载相同的EBS卷,因为它不会有我第一次加载到根卷上的init脚本?

我必须创build一个自定义的AMI,还是有其他方法来实现这一目标?

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

  1. 创build你自己的AMI,并且每次运行它,或者

  2. 指定一个用户数据脚本,每次从标准基础AMI启动新实例时,都将安装软件并将其configuration为您的规范。

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

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

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

查看GitHub上的ec2-spotter项目 。 它是为了解决你所描述的问题而创build的。

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

我一直在尝试这一点,EC2现货实例和附加存储仍然存在一些问题。

  1. 您要附加的卷可能与实例不在同一个区域中? 启动时不能指定区域。
  2. 使用init脚本进行内部连接是可行的,但是有点不同步,所以你需要testing它,或者sleep 10
  3. 我不明白为什么AWS控制台显示“分区”作为主要的块设备。 也许否认我们在另一个分区的海盗窗口的图像? (sda1而不是sda)。 祝你好运,find分区表。

    在这里输入图像描述

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

  5. 所以一般情况下我会备份… tar.bz2到另一个盒子,然后可以在启动时填充“工作区域”。 这只对less量数据有用,因此用两个卷来对新的ami进行基准化是个不错的主意。 竞争实例对于“工作单元”或“可重新启动”工作来说真的很好,所以从服务器获取工作的概念已经很完善了。 由于您在等待9分钟后才能启动,您可能不介意格式化(尽可能小)的磁盘。

    1. EBS仍然很漂亮,你需要额外支付“优化”。 当实例被“定价”时,它比90秒左右上传完成的作品还要快。

    2. 我怀疑这将会随着任何“弹性文件”的提供而改变。