Lambda 的運作方式 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Lambda 的運作方式

Lambda 函數是您用來建置 Lambda 應用程式的基本建置區塊。若要編寫函數,請務必了解組成 Lambda 程式設計模型的核心概念和元件。本節將引導您完成開始使用 Lambda 建置無伺服器應用程式所需的基本元素。

  • Lambda 函數和函數處理常式 - Lambda 函數是一小塊程式碼,用於回應事件。 函數是您用來建置應用程式的基本建置區塊。函數處理常式是 Lambda 函數程式碼處理之事件物件的進入點。

  • Lambda 執行環境和執行時間 - Lambda 執行環境會管理執行函數所需的資源。執行時間是函數執行時的語言特定環境。

  • 事件和觸發 - 其他 如何 AWS 服務 調用函數以回應特定事件。

  • Lambda 許可和角色 - 如何控制誰可以存取您的函數,以及 AWS 服務 您的函數可以與哪些其他函數互動。

提示

如果您想要從更普遍地了解無伺服器開發開始,請參閱《無AWS 伺服器開發人員指南》中的了解傳統和無伺服器開發之間的差異

Lambda 函數和函數處理常式

在 Lambda 中,函數是您用來建立應用程式的基本建置區塊。Lambda 函數是為回應事件而執行的一段程式碼,例如使用者按一下網站上的按鈕,或上傳到 Amazon Simple Storage Service (Amazon S3) 儲存貯體的檔案。您可以將函數視為具有下列屬性的一種獨立程式。Lambda 函數處理常式是函數程式碼中處理事件的方法。當函數執行以回應事件時,Lambda 會執行函數處理常式。導致函數執行的事件相關資料會直接傳遞至處理常式。雖然 Lambda 函數中的程式碼可以包含多個方法或函數,但 Lambda 函數只能有一個處理常式。

若要建立 Lambda 函數,請在部署套件中綁定函數程式碼及其相依性。Lambda 支援兩種類型的部署套件:.zip 檔案封存容器映像

  • 函數有一個特定的任務或用途

  • 它們只會在需要時執行以回應特定事件

  • 完成後,它們會自動停止執行

Lambda 執行環境和執行時間

Lambda 函數會在 Lambda 為您管理的安全隔離執行環境中執行。此執行環境會管理執行函數所需的程序和資源。第一次叫用函數時,Lambda 會為函數建立新的執行環境以執行。函數執行完成後,Lambda 不會立即停止執行環境;如果再次叫用函數,Lambda 可以重複使用現有的執行環境。

Lambda 執行環境也包含執行時間,這是一種特定語言的環境,可轉送 Lambda 與您的函數之間的事件資訊和回應。Lambda 為最熱門的程式設計語言提供許多受管執行時間,您也可以建立自己的執行時間。

對於受管執行期,Lambda 會自動使用執行期將安全性更新和修補程式套用至函數。

事件和觸發

您也可以使用 Lambda 主控台、 AWS CLI或其中一個AWS 軟體開發套件 (SDKs),直接叫用 Lambda 函數。在生產應用程式中,另一個 會調用您的函數 AWS 服務 以回應特定事件,這是比較常見的。例如,您可能希望每當項目新增至 Amazon DynamoDB 資料表時,函數就會執行。

若要讓您的函數回應事件,您可以設定觸發。觸發會將您的函數連線至事件來源,而您的函數可以有多個觸發。事件發生時,Lambda 會以 JSON 文件的形式接收事件資料,並將其轉換為程式碼可以處理的物件。您可以為您的事件定義下列 JSON 格式,Lambda 執行時間會將此 JSON 轉換為 物件,然後再將其傳遞至函數的處理常式。

範例 自訂 Lambda 事件
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }

串流和佇列服務,例如 Amazon Kinesis 或 Amazon SQS,Lambda 會使用事件來源映射,而不是標準觸發。事件來源映射會輪詢來源以取得新資料、批次記錄,然後使用批次事件叫用函數。

若要了解觸發的運作方式,請先完成使用 Amazon S3 觸發教學課程,或使用 Lambda 主控台建立觸發的一般概觀,請參閱 整合其他服務

Lambda 許可和角色

對於 Lambda,您需要設定兩種主要的許可類型:

  • 您的函數存取其他 所需的許可 AWS 服務

  • 其他 使用者和 存取函數 AWS 服務 所需的許可

下列各節說明這兩種許可類型,並討論套用最低權限許可的最佳實務。

函數存取其他 AWS 資源的許可

Lambda 函數通常需要存取其他 AWS 資源並對其執行動作。例如,函數可能會從 DynamoDB 資料表讀取項目、將物件存放在 S3 儲存貯體中,或寫入 Amazon SQS 佇列。若要為函數提供執行這些動作所需的許可,您可以使用 執行角色

Lambda 執行角色是一種特殊的 AWS Identity and Access Management (IAM) 角色,您在帳戶中建立的身分,具有政策中定義與其相關聯的特定許可。

每個 Lambda 函數都必須有 執行角色,而且一個以上的函數可以使用單一角色。叫用函數時,Lambda 會擔任函數的執行角色,並獲授予許可以採取角色政策中定義的動作。

當您在 Lambda 主控台中建立函數時,Lambda 會自動為您的函數建立執行角色。角色的政策提供函數將日誌輸出寫入 Amazon CloudWatch Logs 的基本許可。若要授予函數在其他 AWS 資源上執行動作的許可,您需要編輯角色以新增額外的許可。新增許可最簡單的方法是使用 AWS 受管政策。受管政策是由 建立和管理 AWS ,並提供許多常見使用案例的許可。例如,如果您的函數在 DynamoDB 資料表上執行 CRUD 操作,您可以將 AmazonDynamoDBFullAccess 政策新增至您的角色。

其他使用者和資源存取函數的許可

若要授予其他 AWS 服務 許可來存取您的 Lambda 函數,您可以使用以資源為基礎的政策。在 IAM 中,以資源為基礎的政策會連接至資源 (在此情況下為 Lambda 函數),並定義誰可以存取資源,以及允許他們採取哪些動作。

若要 AWS 服務 讓另一個透過觸發叫用函數,函數的資源型政策必須授予該服務使用該lambda:InvokeFunction動作的許可。如果您使用主控台建立觸發,Lambda 會自動為您新增此許可。

若要授予其他 AWS 使用者存取函數的許可,您可以在函數的資源型政策中定義此許可,方式與另一個 AWS 服務 或 資源完全相同。您也可以使用與使用者相關聯的身分型政策

Lambda 許可的最佳實務

當您使用 IAM 政策設定許可時,安全最佳實務是僅授予執行任務所需的許可。這稱為最低權限原則。若要開始授予 函數的許可,您可以選擇使用 AWS 受管政策。受管政策可以是授予執行任務許可最快速且最簡單的方式,但也可能包含您不需要的其他許可。當您從早期開發到測試和生產時,我們建議您定義自己的客戶受管政策,只將許可降低到需要的許可。

授予使用資源型政策存取函數的許可時,也適用相同的原則。例如,如果您想要授予 Amazon S3 叫用函數的許可,最佳實務是限制對個別儲存貯體或儲存貯體的存取 AWS 帳戶,而不是授予 S3 服務的空白許可。