簡體   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