繁体   English   中英

通过 AWS lambda 在 EC2 实例上执行 python 脚本

[英]Execute python script on EC2 instance via AWS lambda

我在 linux 上有一个 24/7 全天候运行的 AWS EC2 实例,其中有一组运行正常的 python 文件。 从 shell 中,我可以输入python python_script.py var1 var2 var1 和 var2 只是值小于 5,000 的整数。

我能够设置 AWS API 以接收将这些变量作为环境变量提供的 HTTPS 请求。 然后我可以使用 AWS lambda 在 API 被触发时运行一些代码。

我一生都无法弄清楚要在 lambda 函数中包含哪些代码,以便在具有两个变量的 EC2 实例上运行 python 脚本。 我发现的所有与此问题相关的结果都与 EC2 实例启动时的脚本、运行没有任何变量的命令或设置具有域的整个 Web 服务器以及接收 HTTPS 请求的所有内容有关。 我只是希望能够从远程位置访问 API,提供两个整数,然后使用这些整数运行 python 文件。

我确实找到了有关如何从本地计算机上的脚本在 aws-ec2 上运行脚本的建议

ssh -i key.pem ubuntu@ec2-instance "bash /path/to/your/script/data.sh"

因此,对于我自己的用例,我尝试将其修改为:

ssh -i python_bot.pem ubuntu@ec2-instance "python Python_Project/python_script.py 2 166"

但是,当我从自己的 shell 运行此代码时,我得到bash: python: command not found 这很奇怪,因为如果我执行ssh -i python_bot.pem ubuntu@ec2-instance然后登录后执行python Python_Project/python_script.py 2 166文件成功运行。 我猜我是否可以让它工作,然后我可以尝试从Can bash script be write inside a AWS Lambda function 中尝试一些解决方案

我还在AWS 上的现有 EC2 实例中找到了Running Python Script,虽然答案给了我一些指导,但它太宽泛而无法帮助提供特定的解决方案。

从 AWS Lambda 函数触发 Amazon EC2 实例上的脚本不是一个好的架构设计。

在 AWS 上的现有 EC2 实例(您链接到的)中运行 Python 脚本中所述,计算机通常不喜欢“推送”到它的东西,除非它作为 Web 服务器运行。

相反,我想向您推荐一个不同的架构

  • Lambda 函数将“作业”推送到Amazon SQS 队列
  • Amazon EC2 实例上的代码定期检查(“轮询”)SQS 队列以查看是否有任何消息可用
  • 如果消息可用,它会使用消息的内容来触发EC2 实例上的一些本地工作

这样,两个系统断开连接,但通过 SQS 队列进行通信。 它还有一个额外的好处,如果 EC2 实例繁忙或离线,消息(作业)会在 SQS 队列中累积,直到它们可以被处理。

这种架构比尝试使用 SSH 或 SCP 来触发作业要好(这不是一种非常“云”的系统架构方式)。

通过 SSH 登录 shell 和运行命令可能有不同的环境变量,尤其是这里的PATH 明确说明口译员应该会有所帮助。

登录实例并查看您使用的是哪种 Python:

which python

然后将其替换到您的 SSH 命令行中,例如

ssh -i python_bot.pem ubuntu@ec2-instance "/usr/bin/python Python_Project/python_script.py 2 166"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM