问题描述
我正在考虑使用this post中详述的策略来使用SSH在另一个AWS实例(来自一个AWS实例)上运行python脚本。但是,此python脚本可能需要几天才能完成,而且我担心SSH连接可能会中断,从而导致脚本在远程实例上停止(如果发生这种情况,这不是世界末日,但这意味着我必须重新启动从头开始编写脚本,因此这种情况不会经常发生)。两个AWS实例之间的SSH连接在几天内断开的可能性有多大?是否有任何简单方法来使这种连接更稳定,同时仍保持SSH提供的控制台转发?
(由于SSM命令的最大超时值为48小时,我无法使用AWS的SSM)
解决方法
SSH旨在提供对交互式Shell的登录。这不是构建机器间通信的好方法。
我建议采用松耦合的方法:
- 实例A将工作请求推送到 Amazon SQS队列
- 实例B具有等待工作的“工作者”应用程序。它会定期轮询SQS队列以等待工作。收到工作请求后,它将处理该请求。
您还需要确定如果工作人员失败或未完成工作的方法。通常,该消息将超时并重新出现在队列中,以供其他工作人员处理。但是,您的方案可能会简单得多,只有一名工人。
通过SQS发送工作请求的好处是可以将工作排队,等待工人完成上一个任务。另外,如果您希望并行处理作业,则可以产生多个工作程序。