メニュー
AWS Lambda
開発者ガイド

Lambda 関数ハンドラー (Python)

Lambda 関数を作成するときに、ハンドラーを指定します。これはサービスでコードを実行する際に AWS Lambda が呼び出すコード内の関数です。Python でハンドラー関数を作成する場合は、次の一般的な構文構造を使用します。

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

構文では、以下の点に注意してください。

  • event – AWS Lambda はこのパラメーターを使用してイベントデータをハンドラーに渡します。このパラメータは通常、Python の dict タイプです。また、liststrintfloat、または NoneType タイプを使用できます。

  • context – AWS Lambda はこのパラメーターを使用してランタイム情報をハンドラーに提供します。このパラメータは LambdaContext タイプになります。

  • オプションで、ハンドラーは値を返すことができます。Lambda 関数の呼び出しに使用した呼び出しタイプに応じて、戻り値は次のようになります。

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

      ハンドラーが NONE を返した場合、AWS Lambda は null を返します。

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

たとえば、次の Python コードの例を考えてみます。

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

この例では、my_handler という 1 つの関数があります。この関数は、入力として受け取ったイベントからのデータを含むメッセージを返します。

このコードを Lambda 関数としてアップロードしてテストするには

  1. このファイル (hello_python.py など) を保存します。

  2. ファイルと依存関係をすべて .zip ファイルにパッケージ化します。zip を作成するときは、コードおよび依存関係のみを含め、フォルダは含めません。

    手順については、「デプロイパッケージの作成 (Python)」を参照してください。

  3. コンソールまたは AWS CLI を使用して .zip ファイルをアップロードし、Lambda 関数を作成します。Lambda 関数を作成する際に、ハンドラーとして使用する Python コードで関数名を指定します。コンソールを使用して Lambda 関数を作成する手順については、 ステップ 2.1: Hello World Lambda 関数を作成する。この例では、ハンドラーは hello_python.my_handler (file-name.function-name) です。「ご利用開始にあたって」では、Lambda 関数用のサンプルコードを提供する設計図を使用していることに注意してください。この場合は、デプロイパッケージが既に存在しています。したがって、関数の設定のステップで、ZIP ファイルをアップロードすることを選択します。

    次の create-function AWS CLI コマンドは、Lambda 関数を作成します。その他のパラメータの中で、--handler パラメータを指定してハンドラー名を指定しています。--runtime パラメータは python3.6 を指定することに注意してください。python2.7 を使用することもできます。

    Copy
    aws lambda create-function \ --region us-west-2 \ --function-name HelloPython \ --zip-file fileb://deployment-package.zip \ --role arn:aws:iam::account-id:role/lambda_basic_execution \ --handler hello_python.my_handler \ --runtime python3.6 \ --timeout 15 \ --memory-size 512