本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda 的運作方式
Lambda 函式是用來建置 Lambda 應用程式的基本建置區塊。若要編寫函式,必須了解組成 Lambda 程式設計模型的核心概念和元件。本節將引導您了解開始使用 Lambda 建置無伺服器應用程式所需的基本元素。
-
Lambda 函式與函式處理常式 - Lambda 函數是一小段程式碼,用於回應事件。函數可以是標準 (最多 15 分鐘) 或耐用 (最多一年)。函數是您用來建置應用程式的基本建置區塊。處理常式是 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
若要讓函式回應事件,您可以設定觸發程序。觸發程序會將函式連線至事件來源,且函式可以有多個觸發程序。當事件發生時,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 服務的括號許可。