【问题标题】: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 实例执行以下操作:

    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

    【讨论】:

      【解决方案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)创建为一组。秘密访问密钥仅在您创建时可供下载。如果您没有下载秘密访问密钥或丢失了它,则必须创建一个新密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 2018-07-12
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2016-11-15
        相关资源
        最近更新 更多