以 Python 編寫的 Lambda 函數處理常式
Lambda 函數處理常式是您的函數程式碼中處理事件的方法。當有人呼叫您的函數時,Lambda 會執行處理常式方法。當處理常式結束或傳回回應時,就可以處理另一個事件。
在 Python 中建立函數處理常式時,您可以使用下列一般語法:
def
handler_name
(event, context): ... returnsome_value
命名
建立 Lambda 函數時指定的 Lambda 函數處理常式名稱衍生自下列項目:
-
Lambda 處理常式函數所在的檔案名稱。
-
Python 處理常式函數的名稱。
函數處理常式可以是任何名稱;但 Lambda 主控台中的預設名稱為 lambda_function.lambda_handler
。此函數處理常式名稱會反映函數名稱 (lambda_handler
),以及存放處理常式程式碼的檔案 (lambda_function.py
)。
如果要在主控台中使用不同檔案名稱或函數處理常式名稱建立函數,您必須編輯預設處理常式名稱。
變更函數處理常式名稱的方式 (主控台)
-
開啟 Lambda 主控台的函數
頁面,然後選擇您的函數。 -
選擇 程式碼 索引標籤。
-
向下捲動至執行時間設定窗格,並選擇編輯。
-
在處理常式中,輸入函數處理常式的新名稱。
-
選擇 儲存 。
運作方式
Lambda 調用函數處理常式時,Lambda 執行時間會將兩個引數傳遞給函數處理常式:
-
第一個引數是事件物件。事件是一種 JSON 格式的文件,會包含供 Lambda 函數處理的資料。Lambda 執行時間會將事件轉換為物件,再將它傳遞到您的函數程式碼。其通常屬於 Python
dict
類型。同時也屬於list
、str
、int
、float
或NoneType
類型。事件物件包含調用服務的資訊。當您呼叫函數時,您決定事件的結構和內容。當某項 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 執行時間會在初始化期間設定數個環境變數。如需在執行時間回應傳回的環境變數詳細資訊,請參閱使用 AWS 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 }