【问题标题】:Manually resending an AWS EC2 spot instance request after its termination, with data persistance终止后手动发送 AWS EC2 现货实例请求,并具有数据持久性
【发布时间】:2017-11-13 23:58:13
【问题描述】:

在 Amazon Web Services \ EC2 中,我有一个已运行并手动终止的现场实例请求(由我)。现在,我想再次运行同一个实例 - 无需经历创建新实例的过程(我的意思是,我选择 AMI、即时类型、配置、安全组等的过程)。使用不间断实例时,这很容易,因为我可以根据需要手动终止或启动实例(并且我保存的数据在终止之间保持不变)。但是对于现场实例,我看不到如何做到这一点,因为在它终止后,EC2 管理控制台中的现场请求页面显示请求已关闭,我看不到如何重新发送相同的请求再次。

我知道我可以选择持久的现场请求,但我知道这会在请求终止时自动重新发送请求,而我希望继续手动控制何时请求已发送。

总而言之,我希望能够拥有以下工作流程:

  1. 创建 Spot 实例请求。
  2. 运行竞价实例(当竞价低于我的出价时)。
  3. 在实例中保存一些数据。
  4. 终止实例(手动或由于投标价格阈值)。
  5. 在我选择的时间手动重新发送运行同一实例的请求,这样当它打开时,我仍然可以看到之前的数据。
  6. 返回 2。

如何做到这一点?

【问题讨论】:

  • 是的,可以做到。其他答案没有任何限制。您可以像按需车队一样自动扩展现货车队。 s3 中的持久数据存储很容易实现以管理实例状态。我一直为 Jenkins 和 Bastion 主机队列执行此操作,在这些队列中,您需要在实例启动时使用 autoscal 保持一致的状态。是不是现场也没关系。稍后我会发布答案。

标签: amazon-web-services amazon-ec2


【解决方案1】:

简短的回答是,一旦 Spot 实例终止,您将无法重新启动它。终止意味着实例、数据等被销毁。您的描述描述了按需实例(价格除外)。

【讨论】:

  • 你知道有没有什么原因会变成这样?为什么 Spot 实例不能像普通实例一样工作,只是 Spot 实例仅在请求为 maid 且满足价格条件时运行?
  • 可能是因为保存持久数据是有成本的。请记住,现货实例(最有可能)用于帮助亚马逊抵消新容量的成本,直到普通客户吸收它。这就是价格便宜的原因。如果 Amazon 创建了具有太多功能的 Spot 实例,则不需要按需实例。
  • 我要对罗德里戈的回答竖起大拇指,这非常好。但是,我试图将我的回答限制在所提出的问题上,而不是将问题重新设计为不同的问题。这就是为什么我以“简短的答案是......”开始我的回答
【解决方案2】:

简短的回答是强调是的绝对

您描述的实例“工作流程”实际上是实例生命周期。该生命周期是云中任何表现良好的应用服务器的正常生命周期,即使您依赖现场实例进行计算。您可以控制实例生命周期的所有方面:启动、配置、扩展和终止。

使用此 CloudFormation template for a Jenkins server with automatic backup and recovery 的修改版本,我有许多自动扩展队列,它们完全符合您的描述(注意我使用按需实例。但同样的策略适用于现场实例。NB2 我说 fleet 下面,但这只能是 1 个实例的舰队)

这里是快速概述(或长答案):

  1. 使用 CloudFormation(可选,但推荐)定义/启动自动缩放组并启动配置以启动 1 个(或更多)实例的队列。在 Auto Scaling 中直接支持 Spot 实例。见Launching Spot Instances in Your Auto Scaling Group

  2. 使用 Auto Scaling 策略和您的 Spot 出价参数/持续时间来控制要为您的实例支付的时间和成本,以获得您需要的计算能力。对于 Jenkins,我自动缩放以在我的 VPC 中的任何 AZ 中拥有 1 个健康实例。自动扩展策略非常灵活。对于手动终止,暂停 ASG Launch 进程。见Suspending and Resuming Auto Scaling Processes

  3. 在实例启动时,使用 UserData scripting 来配置您的软件、安装备份和恢复脚本、配置您的实例以及从上次备份中加载任何实例数据。使用专用 S3 存储桶备份实例数据。就我而言,我将整个 Jenkins 工作空间和配置数据归档在一个压缩的 tar 文件中。您可能希望根据数据集的需要频繁备份。

  4. 在新实例的任何自动重新启动时,该实例被配置为检查 S3 数据返回存储桶,并恢复最新的存储桶。它会立即使用上次备份的所有数据投入使用。如第 3 步所述,您有手动备份和恢复脚本,因此您可以登录到实例并根据需要执行这些操作。

使用这些技术,您可以构建按需或现场实例的实例队列,并集成备份和自动恢复功能。

【讨论】:

  • 我承认这可能是一个正确的答案,但我目前无法验证这一点,因为我还不明白第 3 步。具体来说,我还不知道如何将我的数据加载到新的实例(当我使用按需实例时,如果我终止一个实例然后再次启动它,数据将持续存在,无需编写任何脚本或使用任何其他 AWS 服务)。我对S3一无所知。所以希望我能弄清楚这些事情,然后我可以验证你的答案并将其标记为正确答案。
  • 如何从 EC2 管理控制台重新启动实例?据我了解,我需要转到 Auto Scaling 组页面,并从“暂停的进程”中删除 Launch 进程,这将使实例自行启动(然后我需要确保添加 @ 987654327@ 手动终止前返回)。这个对吗?有没有更简单、更直接的方法?
  • 检查我附加到答案的 CFN 模板,例如备份脚本(/usr/local/bin/jenkins-backup,第 205 行)恢复脚本(/usr/local/bin/jenkins-restore,第 159 行)。这些脚本将数据文件夹复制到 S3 并返回命令。重新启动您的队列,是的,禁用Launch 以停止启动过程以防止新实例启动使用 CLI 总是更容易。这是一个示例:aws autoscaling suspend-processes --auto-scaling-group-name my-auto-scaling-group --scaling-processes Launch
猜你喜欢
  • 1970-01-01
  • 2020-04-23
  • 2015-12-13
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 2022-12-07
相关资源
最近更新 更多