Python の Lambda 関数ハンドラー - AWS Lambda

Python の Lambda 関数ハンドラー

注記

Python 2.7 ランタイムのサポートは、2021 年 7 月 15 日で終了します。詳細については、「ランタイムサポートポリシー」を参照してください。

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 コンソールの関数ハンドラー名を変更するには、ランタイム設定ペインで、[Edit] (編集) を選択します。


        Lambda コンソールの関数ハンドラー名。

仕組み

Lambda が関数ハンドラーを呼び出すと、Lambda ランタイムが 2 つの引数を関数ハンドラーに渡します。

  • 最初の引数は イベントオブジェクト です。イベントは、処理する Lambda 関数のデータを含む JSON 形式のドキュメントです。 Lambda ランタイム は、イベントをオブジェクトに変換し、それを関数コードに渡します。これは通常 Python dict タイプです。また liststrintfloat、または NoneType タイプを使用できます。

    イベントオブジェクトには、呼び出し元のサービスからの情報が含まれます。関数を呼び出すときは、イベントの構造とコンテンツを決定します。AWS のサービスで関数を呼び出す場合、そのイベントはサービスによって定義されます。AWS サービスからのイベントの詳細については、「他のサービスで AWS Lambda を使用する」を参照してください。

  • 2番目の引数は コンテキストオブジェクト です。コンテキストオブジェクトは、ランタイムに Lambda によって関数に渡されます。このオブジェクトは、呼び出し、関数、およびランタイム環境に関する情報を示すメソッドおよびプロパティを提供します。

値の返し

オプションで、ハンドラーは値を返すことができます。戻り値に何が起きるかは、呼び出しの種類と呼び出したサービス に応じて変わります。以下に例を示します。

  • 同期呼び出し のような RequestResponse 呼び出しタイプを使用すると、AWS Lambda は Python 関数の呼び出しの結果を、Lambda 関数を呼び出したクライアントに返します (呼び出しリクエストに対する HTTP レスポンスでは、JSON にシリアル化されます)。たとえば、AWS Lambda のコンソールは RequestResponse の呼び出しタイプを使用するため、コンソールを使用して関数を呼び出すと、コンソールに戻り値が表示されます。

  • ハンドラーから json.dumps でシリアル化できないオブジェクトが返された場合、ランタイムはエラーを返します。

  • None ステートメントを指定しなかった場合の Python 関数の暗黙の動作と同じように、ハンドラーが return を返した場合、ランタイムは null を返します。

  • Event の呼び出しタイプ、非同期呼び出し を使用すると、値は破棄されます。

注記

Python 3.9 以降のリリースでは、Lambda はエラーの応答時に呼び出しの requestId を含めます。

Examples

次のセクションでは、Lambda で使用できる Python 関数の例を示します。Lambda のコンソールを使用して関数を作成する場合、このセクションで関数を実行するために .zip アーカイブファイルを添付する必要はありません。これらの関数は、選択した Lambda ランタイムに含まれている標準の Python ライブラリを使用します。詳細については、「Lambda デプロイパッケージ」を参照してください。

メッセージの返し

次の例は、 Lambdaランタイム lambda_handlerを使用する python3.8 という関数を示しています。この関数は、姓と名のユーザー入力を受け入れ、入力として受信したイベントからのデータを含むメッセージを返します。

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ランタイム lambda_handlerを使用する python3.8 という関数を示しています。この関数は、ランタイムに 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 環境変数の使用」を参照してください。

この例の関数は、Invoke API からの正常なレスポンス (200からの) によって異なります。[API を呼び出す] ステータスの詳細については、「 Invoke Response Syntax」を参照してください。

計算の返し

次の GitHub の Lambda Python 関数コード例は、python3.6 Lambda ランタイム を使用する lambda_handler という関数を示しています。この関数はユーザー入力を受け入れ、ユーザーに計算を返します。

次のイベントデータを使用して 関数を呼び出す ことができます 。

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