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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过AWS lambda在EC2实例上执行python脚本相关的知识,希望对你有一定的参考价值。

我在运行24/7的Linux上有一个AWS EC2实例,其中包含一组运行正常的python文件。从外壳,我可以输入python python_script.py var1 var2。 var1和var2是值小于5,000的简单整数。

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

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

我确实找到了关于How to run a script on your aws-ec2 from a script on your local machine?的建议

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 written inside a AWS Lambda function

的一些解决方案

我也找到了Running Python Script in an existing EC2 instance on AWS,虽然答案为我提供了一些指导,但范围太广,无法提供具体的解决方案。

答案

通过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"

以上是关于通过AWS lambda在EC2实例上执行python脚本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用AWS Lambda函数在本地系统上执行文件

在创建新的 AWS EC2 实例时运行 AWS Lambda 代码

AWS:Lambda函数无法使用EC2实例的私有API调用rest api

SSH到位于VPC中的私有子网中的AWS EC2实例

如何在 AWS Lambda 上创建 EC2 时将脚本传递给 UserData 字段?

AWS Lambda 无法访问同一 VPC 中的 EC2 端口