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

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

注意

從 2021 年 7 月 15 日開始終止 Python 2.7 執行時間的支援。如需更多詳細資訊,請參閱 執行時間淘汰政策

Lambda 函數處理常式是您的函數程式碼中處理事件的方法。當有人呼叫您的函數時,Lambda 會執行處理常式方法。當處理常式結束或傳回回應時,就可以處理另一個事件。

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

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

Naming

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

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

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

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

若要變更 Lambda 主控台中的函數處理常式名稱,請在 Runtime settings (執行時間設定) 窗格中,選擇 Edit (編輯)。


        Lambda 主控台中的函數處理常式名稱。

運作方式

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。

Examples

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

傳回訊息

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

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,且使用 python3.8 Lambda 執行時間的函數。該函數會使用在執行時間由 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 狀態的詳細資訊,請參閱叫用回應語法。

傳回計算

下列 GitHub 上的 Lambda Python 函數程式碼範例顯示了使用 python3.6 Lambda 執行時間叫用 lambda_handler 的函數。該函數接受使用者輸入並將計算傳回給使用者。

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

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