【问题标题】:Running a long-running python script on another AWS instance (from an AWS instance) using SSH使用 SSH 在另一个 AWS 实例(来自 AWS 实例)上运行长时间运行的 python 脚本
【发布时间】:2020-12-01 16:51:49
【问题描述】:

我正在考虑使用this post 中详述的策略,使用 SSH 在另一个 AWS 实例(来自 AWS 实例)上运行 python 脚本。但是,这个 python 脚本可能需要几天才能完成,我担心 SSH 连接可能会中断,导致脚本在远程实例上停止(如果发生这种情况,这不是世界末日,但这意味着我必须重新启动从头开始编写脚本,因此这种情况不会经常发生)。两个 AWS 实例之间的 SSH 连接在几天内中断的可能性有多大?是否有任何简单方法可以使这种连接更加稳定,同时仍保持 SSH 提供的控制台转发?

(我不能使用 AWS 的 SSM,因为 SSM 命令的最大超时值为 48 小时)

【问题讨论】:

    标签: python amazon-web-services ssh subprocess


    【解决方案1】:

    SSH 旨在提供对交互式 shell 的登录。这不是架构机器间通信的好方法。

    我会推荐一种松散耦合的方法

    • Instance-A 将工作请求推送到 Amazon SQS 队列
    • Instance-B 有一个“worker”应用程序正在等待工作。它定期轮询 SQS 队列等待工作。收到工作请求后,它会处理该请求。

    如果工人失败或没有完成工作,您还需要决定该怎么做。通常,消息会超时并重新出现在队列中以供其他工作人员处理。但是,您的方案可能要简单得多,只有一名工人。

    通过 SQS 发送工作请求的好处是工作可以排队,等待工作人员完成之前的任务。此外,如果您希望并行处理作业,可以生成多个工作人员。

    见:Queuing Chain Pattern - AWS-CloudDesignPattern

    【讨论】:

    • 感谢您的回复!我希望使用 SSH 之类的东西,因为控制台转发很重要(我将定期检查在实例 A 上的 Tmux shell 中运行的脚本,并希望在同一个 shell 中看到实例 B 的脚本的输出)。基本上我需要 SSH 的功能,除非没有断开连接的可能性。而且我希望异常也可以像使用子进程/SSH一样被转发。我可以使用 s3 设计自己的伪日志流系统,但我试图让事情变得简单。
    • 有关我的用例的更多信息,我使用实例 A 作为开发盒,实例 B 作为 CNN 模型训练的(每小时更昂贵的)GPU 盒。这样做的另一个好处是开发盒可以一次运行多个培训课程。我希望能够检查模型训练,但希望在开发盒上运行的脚本在完成时自动关闭实例 B(我已经使用 boto3 编写了此代码)。我试图限制复杂性,因为我将把这个项目转移给其他开发人员,并希望限制系统工作原理的学习曲线。
    • 或者 SSM 可以满足我的目的,但不幸的是,最长 executionTimeout 是 48 小时,我很可能会运行比这更长的培训课程。你知道有什么方法可以让 SSM 命令的运行时间超过 48 小时吗?
    猜你喜欢
    • 2013-01-05
    • 2018-08-30
    • 1970-01-01
    • 2017-06-10
    • 2020-01-13
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多