以 Python 編寫的 Lambda 函數處理常式 - AWS Lambda

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

以 Python 編寫的 Lambda 函數處理常式

Lambda 函數處理常式是您的函數程式碼中處理事件的方法。當有人呼叫您的函數時,Lambda 會執行處理常式方法。函數會執行,直到處理常式傳回回應、結束或逾時為止。

在 Python 中建立函數處理常式時,您可以使用下列一般語法:

def handler_name(event, context): ... return some_value

命名

建立 Lambda 函數時指定的 Lambda 函數處理常式名稱衍生自下列項目:

  • Lambda 處理常式函數所在的檔案名稱。

  • Python 處理常式函數的名稱。

函數處理常式可以是任何名稱;但 Lambda 主控台中的預設名稱為 lambda_function.lambda_handler。此函數處理常式名稱會反映函數名稱 (lambda_handler),以及存放處理常式程式碼的檔案 (lambda_function.py)。

如果要在主控台中使用不同檔案名稱或函數處理常式名稱建立函數,您必須編輯預設處理常式名稱。

變更函數處理常式名稱的方式 (主控台)
  1. 開啟 Lambda 主控台的函數頁面,然後選擇您的函數。

  2. 選擇 程式碼 索引標籤。

  3. 向下捲動至執行時間設定窗格,並選擇編輯

  4. 處理常式中,輸入函數處理常式的新名稱。

  5. 選擇 儲存

運作方式

Lambda 調用函數處理常式時,Lambda 執行時間會將兩個引數傳遞給函數處理常式:

  • 第一個引數是事件物件。事件是一種 JSON 格式的文件,會包含供 Lambda 函數處理的資料。Lambda 執行時間會將事件轉換為物件,再將它傳遞到您的函數程式碼。其通常屬於 Python dict 類型。同時也屬於 liststrintfloatNoneType 類型。

    事件物件包含調用服務的資訊。當您呼叫函數時,您決定事件的結構和內容。當某項 AWS 服務調用您的函數時,該服務會定義事件結構。如需 AWS 服務事件的詳細資訊,請參閱 AWS Lambda 搭配其他服務使用

  • 第二個引數是內容物件。Lambda 在執行時間將內容物件傳遞到您的函數。此物件提供的方法和各項屬性提供了有關調用、函式以及執行時間環境的資訊。

傳回值

處理常式也可選擇傳回值。傳回值的情況取決於調用該函數的調用類型服務。例如:

  • 如果使用 RequestResponse 調用類型,例如 同步調用,AWS Lambda 會將 Python 函數呼叫結果傳回調用 Lambda 函數的用戶端;該結果會出現在呼叫請求的 HTTP 回應中,且序列化為 JSON 格式。例如,AWS Lambda 主控台使用 RequestResponse 調用類型。因此,當您在主控台上調用函數時,主控台即會顯示傳回值。

  • 如果處理常式傳回 json.dumps 無法序列化的物件,則執行時間會傳回錯誤。

  • 如果處理常式傳回 None (如沒有 return 陳述式的 Python 函數隱含作業),則執行時間會傳回 null

  • 如果使用 Event 調用類型 (非同步調用),便會捨棄該值。

注意

在 Python 3.9 及更高版本中,Lambda 會在錯誤回應中包含調用的請求 ID。

範例

下述章節顯示您可以與 Lambda 搭配使用的 Python 函數範例。如果您使用 Lambda 主控台編寫您的函數,則不需要附加 .zip 封存檔即可執行本節中的函數。這些函數使用標準 Python 程式庫,其包含在您選擇的 Lambda 執行時間內。如需詳細資訊,請參閱 Lambda 部署套件

傳回訊息

下列範例顯示稱為 lambda_handler 的函數。該函數接受使用者的名字和姓氏輸入,並傳回一則訊息,其中包含其作為輸入接收的事件資料。

def lambda_handler(event, context): message = 'Hello {} {}!'.format(event['first_name'], event['last_name']) return { 'message' : message }

您可以使用下列事件資料來調用函數:

{ "first_name": "John", "last_name": "Smith" }

該回應顯示作為輸入傳遞的事件資料:

{ "message": "Hello John Smith!" }

剖析回應

下列範例顯示稱為 lambda_handler 的函數。該函數會使用在執行時間由 Lambda 傳遞的事件資料。其剖析 JSON 回應中 AWS_REGION 傳回的環境變數

import os import json def lambda_handler(event, context): json_region = os.environ['AWS_REGION'] return { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "body": json.dumps({ "Region ": json_region }) }

您可以使用任何事件資料來調用函數:

{ "key1": "value1", "key2": "value2", "key3": "value3" }

Lambda 執行時間會在初始化期間設定數個環境變數。如需在執行時間回應傳回的環境變數詳細資訊,請參閱使用 Lambda 環境變數

此範例中的函數取決於調用 API (200 中) 的成功回應。如需有關調用 API 狀態的詳細資訊,請參閱調用回應語法。

傳回計算

下列範例顯示稱為 lambda_handler 的函數。該函數接受使用者輸入並將計算傳回給使用者。如需有關此範例的詳細資訊,請參閱aws-doc-sdk-examples GitHub 存放庫

import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ... result = None action = event.get('action') if action == 'increment': result = event.get('number', 0) + 1 logger.info('Calculated result of %s', result) else: logger.error("%s is not a valid action.", action) response = {'result': result} return response

您可以使用下列事件資料來調用函數:

{ "action": "increment", "number": 3 }