【问题标题】:What Python or CLI call can I use to terminate an AWS spot instance and request from within the spot instance itself?我可以使用什么 Python 或 CLI 调用来终止 AWS Spot 实例并从 Spot 实例本身发出请求?
【发布时间】:2020-08-10 04:54:59
【问题描述】:
我有一个长期运行的 aws 工作,并且正在使用现场实例(每个工作一个实例)来节省资金。 python代码可以处理停止和重新启动,但是当我结束分析工作时,我想终止现场实例并且不再启动(对于那个批次),这样我就不必手动照看东西(我正在使用昂贵的 GPU 实例,所以我想尽快停止)。我的代码全部在 python 中 - 是否有一个 aws python sdk 或 cli 调用将终止该点实例 并且 停止再启动,全部来自点实例本身?结果是我不想在工作完成后为 GPU 时间付费。
几年前的一个相关问题是here,但它并没有完全回答我的问题。
谢谢!
【问题讨论】:
标签:
python
amazon-web-services
command-line-interface
spot-instances
【解决方案1】:
对最后一个 Spot 实例执行以下操作:
- 检索实例 ID:
wget -q -O - http://169.254.169.254/latest/meta-data/instance-id
- 修改实例的关闭行为:
aws ec2 modify-instance-attribute --instance-initiated-shutdown-behavior terminate
- 那么当你想终止它时:
sudo shutdown -h now。也可以通过以下方式安排关机:echo "sudo halt" | at now + 5 minutes。
【解决方案2】:
如果您正在寻找一种更加 Pythonic 的方式来执行此操作。您可以使用boto3。它是一个用于管理 AWS 实例和 AWS 下的许多服务的 SDK。您可以使用 Udhav 的方法从 http://169.254.169.254/latest/meta-data/instance-id 获取实例 id 并将此实例 id 传递给 boto3 function 以终止它。
请确保在使用 sdk 或 cli 时,您必须使用 secret_access_key 和 secret_access_id 创建一个 IAM 角色来验证此请求。
以下文字来自官方AWS documentation
程序化访问
您必须提供您的 AWS 访问密钥才能以编程方式调用 AWS 或使用
AWS 命令行界面或适用于 PowerShell 的 AWS 工具。
创建访问密钥时,您将访问密钥 ID(例如,AKIAIOSFODNN7EXAMPLE)和秘密访问密钥(例如,wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)创建为一组。秘密访问密钥仅在您创建时可供下载。如果您没有下载秘密访问密钥或丢失了它,则必须创建一个新密钥。