Lambda 的運作方式 - AWS Lambda

Lambda 的運作方式

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

  • Lambda 函式與函式處理常式 – Lambda 函式是一小段程式碼,在回應事件時執行。函式是用來建置應用程式的基本建置區塊。處理常式是 Lambda 函式程式碼處理事件物件的進入點。

  • Lambda 執行環境與執行時期 – Lambda 執行環境會管理執行函式所需的資源。執行時期是函式執行所在的特定語言環境。

  • 事件與觸發程序 – 其他 AWS 服務調用函式來回應特定事件的方式。

  • Lambda 許可與角色 – 您控制能夠存取函式之對象的方式,以及您的函式可以與之互動的其他 AWS 服務。

提示

若要更全面地了解無伺服器開發,請參閱 AWS Serverless Developer Guide 中的 Understanding the difference between traditional and serverless development

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 軟體開發套件 (SDK) 直接調用 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 服務存取 Lambda 函式所需的許可

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

函式存取其他 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 服務概括許可。