![](/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.