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

Jar*_*d C 3 python amazon-ec2 amazon-web-services 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"
Run Code Online (Sandbox Code Playgroud)

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

ssh -i python_bot.pem ubuntu@ec2-instance "python Python_Project/python_script.py 2 166"
Run Code Online (Sandbox Code Playgroud)

但是,当我从自己的 shell 运行此代码时,我得到bash: python: command not found. 这很奇怪,因为如果我这样做ssh -i python_bot.pem ubuntu@ec2-instance,然后一旦登录,python Python_Project/python_script.py 2 166文件就会成功运行。我猜我是否可以让它工作,然后我可以尝试一些解决方案,可以在 AWS Lambda 函数中编写 bash 脚本

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

Joh*_*ein 5

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

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

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

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

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

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