0

我有一个长期运行的 aws 工作,并且正在使用现场实例(每个工作一个实例)来省钱。python代码可以处理停止和重新启动,但是当我结束分析工作时,我想终止现场实例并且不再启动(对于那个批次),这样我就不必手动照看东西(我正在使用昂贵的 GPU 实例,所以我想尽快停止)。我的代码全部在 python 中 - 是否有一个 aws python sdk 或 cli 调用将终止该现场实例停止再启动,所有这些都来自现场实例本身?结果是我不想在工作完成后为 GPU 时间付费。

几年前的一个相关问题是here,但它并没有完全回答我的问题。

谢谢你!

4

2 回答 2

0

对最后一个 Spot 实例执行以下操作:

  1. 检索实例 ID:wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
  2. 修改实例的关闭行为: aws ec2 modify-instance-attribute --instance-initiated-shutdown-behavior terminate
  3. 然后当你想终止它时:sudo shutdown -h now. 也可以通过以下方式安排关机:echo "sudo halt" | at now + 5 minutes
于 2020-08-10T06:40:02.303 回答
0

如果您正在寻找一种更 Pythonic 的方式来执行此操作。您可以使用boto3。它是一个用于管理 AWS 实例和 AWS 下的许多服务的 SDK。您可以使用 Udhav 的方法从中获取实例 ID,http://169.254.169.254/latest/meta-data/instance-id并将此实例 ID 传递给boto3 函数以终止它。

请确保在使用 sdk 或 cli 时,您必须使用 secret_access_key 和 secret_access_id 创建一个 IAM 角色来验证此请求。以下文字来自官方AWS 文档

程序化访问

您必须提供 AWS 访问密钥才能以编程方式调用 AWS 或使用 AWS 命令​​行界面或适用于 PowerShell 的 AWS 工具。

创建访问密钥时,您将访问密钥 ID(例如,AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)创建为一组。秘密访问密钥仅在您创建时可供下载。如果您没有下载秘密访问密钥或丢失了它,则必须创建一个新密钥。

于 2020-08-10T07:22:40.613 回答