![](/img/trans.png)
[英]Trigger python script on ec2 instance via lambda function?
[英]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 服务器运行。
相反,我想向您推荐一个不同的架构:
这样,两个系统断开连接,但通过 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.