簡體   English   中英

如何在專用 EC2 服務器上執行 Amazon Lambda 功能?

[英]How to execute Amazon Lambda functions on dedicated EC2 server?

我目前正在基於 Amazon Web 服務為我的應用程序開發后端。 我假裝使用 DynamoDB 來存儲用戶的數據,但最終選擇了 MongoDB,我已經在我的 EC2 實例中安裝了它。

我在 Python 中編寫了一些代碼來更新/查詢...數據庫,這樣當 Cognito 事件觸發我的 lambda function 時,這段代碼直接在我的實例上執行,因此我可以訪問我的數據庫。 任何想法我怎樣才能做到這一點?

正如Gustavo Tavares所提到的, “lambda 的全部意義在於無需部署 EC2 實例即可運行代碼” 而且您不必將帶有數據庫的 EC2 放入“公共” su.nets 以供 Lambda 訪問它們。 實際上,你永遠不應該那樣做。

創建/編輯 Lambda 配置時,您可以 select 在任何 VPC 中運行它(配置 -> 高級設置 -> VPC)。 然后 select Su.net(s) 在其中運行您的 Lambda。這將為您運行 Lambda 的虛擬機創建 ENI(彈性網絡接口)。

您的 su.net 必須配置路由/ACL 才能訪問數據庫所在的 su.net。 至少與 Lambda 關聯的 SecurityGroups 之一還必須允許出站流量在適當的端口 (27017) 上到達數據庫 su.net。

由於您提到您的 Lambda 是“后端”,那么您應該將它們放在與您的 MongoDB 相同的“私有” su.net 中,並避免任何訪問/路由問題。

實現此目的的一種方法是為 Lambda 提供一個 SAM 模板,然后在 EC2 實例內部使用sam local invoke在本地執行。

好的,但是為什么哦,為什么會有人這樣做?

如果您的 Lambda 需要訪問 VPC 和 Inte.net,並且不使用大量 memory 並且實際上不需要可擴展性,並且您已經編寫了代碼 (*) ,它實際上便宜 10 倍(**)在公共 su.net 上啟動t3.nano EC2 Spot 實例比將 NAT 網關添加到 Lambda function 性能更高。

(*) 如果你還沒有編寫代碼,甚至不用費心把它弄成 Lambda。

(**) 3 美元比 30 美元便宜 10 倍,所以這實際上只適用於預算有限的業余愛好者項目。 不要在工作中這樣做,因為從長遠來看,工程師管理和維護 EC2 實例的時間成本將遠遠超過 30 美元/月。

如果您希望 Lambda 在您的 ec2 實例上執行代碼,您需要使用 SDK 作為您編寫 lambda 的語言。然后您可以簡單地使用 AWS API 在您的 EC2 實例上運行命令。

請參閱: http://docs.aws.amazon.com/systems-manager/latest/userguide/run-command.html

我認為您誤解了 AWS lambda 的概念。

lambda 的全部意義在於無需部署 EC2 實例即可運行代碼。 您上傳代碼,然后即時配置基礎設施。 如果您的應用程序不再需要基礎設施(在短暫的一段時間后),它就會消失,並且您不會為空閑時間付費。 如果您再次需要它,則會提供新的基礎設施。

如果你有一個服務,比如你的 MongoDB,在 EC2 實例中運行,你的 lambda 函數可以像訪問任何其他代碼一樣訪問它。 您只需配置您的 lambda 代碼以連接到 EC2 實例,就像如果您的數據庫安裝在任何其他面向 inte.net 的服務器上一樣。

例如:您可以將您的 MongoDB 服務器放在您的 VPC 的公共 su.net 中,並為您的服務器分配一個彈性 IP。 在您的 Python lambda 代碼中,您將驅動程序配置為連接到此彈性 IP 並更新數據庫。

它的工作方式就像每項服務都部署在 inte.net 的不同服務器上:Cognito 連接到 Lambda 跨 inte.net 功能,然后部署在 lambda 中的 python 代碼跨 inte.net 連接到您的 MongoDB。

如果我可以給你建議,請多嘗試一下 DynamoDB。 使用 DynamoDB,使所有這些工作變得更加簡單,因為您不需要配置公共 su.net 和請求彈性 IP。DynamoDB 的 API 與 MongDB 的 API 沒有太大區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM