Python による Lambda 関数の構築 - AWS Lambda

Python による Lambda 関数の構築

AWS Lambda で Python コードを実行できます。Lambda は、コードを実行してイベントを処理する Python 用のランタイムを提供します。コードは、管理している AWS Identity and Access Management (IAM) ロールの認証情報により、SDK for Python (Boto3) を備えた環境で実行されます。Python ランタイムに含まれている SDK バージョンの詳細については、「ランタイムに含まれる SDK バージョン」を参照してください。

Lambda は、以下の Python ランタイムをサポートしています。

Python
名前 識別子 オペレーティングシステム 廃止日 関数の作成をブロックする 関数の更新をブロックする

Python 3.12

python3.12

Amazon Linux 2023

Python 3.11

python3.11

Amazon Linux 2

Python 3.10

python3.10

Amazon Linux 2

Python 3.9

python3.9

Amazon Linux 2

Python 3.8

python3.8

Amazon Linux 2

2024 年 10 月 14 日

2025 年 2 月 28 日

2025 年 3 月 31 日

Python 関数を作成するには
  1. Lambda コンソールを開きます。

  2. [Create function] (関数の作成) をクリックします。

  3. 以下の設定を行います。

    • [Function name]: 関数名を入力します。

    • [ランタイム][Python 3.12] を選択します。

  4. [Create function] (関数の作成) をクリックします。

  5. テストイベントを設定するには、[テスト] を選択します。

  6. [イベント名] で、「test」と入力します。

  7. [変更を保存] をクリックします。

  8. [テスト] を選択して関数を呼び出します。

コンソールで、lambda_function という名前の単一のソースファイルを含む Lambda 関数が作成されます。このファイルを編集し、組み込みのコードエディタでファイルをさらに追加することができます。変更を保存するには [保存] を選択します。コードを実行するには、[Test] (テスト) を選択します。

Lambda 関数には CloudWatch Logs ロググループが付属しています。関数のランタイムは、各呼び出しに関する詳細を CloudWatch Logs に送信します。これは呼び出し時に、任意の関数が出力するログを中継します。関数がエラーを返す場合、Lambda はエラー形式を整え、それを呼び出し元に返します。

ランタイムに含まれる SDK バージョン

Python ランタイムに含まれる AWS SDK のバージョンは、ランタイムバージョンと AWS リージョン によって異なります。使用しているランタイムに含まれている SDK のバージョンを確認するには、次のコードを使用して Lambda 関数を作成します。

import boto3 import botocore def lambda_handler(event, context): print(f'boto3 version: {boto3.__version__}') print(f'botocore version: {botocore.__version__}')

レスポンスの形式

Python 3.12 以降の Python ランタイムでは、関数は JSON レスポンスの一部としてユニコード文字を返します。以前の Python ランタイムは、レスポンス内の Unicode 文字のエスケープシーケンスを返していました。例えば、Python 3.11 では、"こんにちは" のようなユニコード文字列を返すと、ユニコード文字はエスケープされ、"\u3053\u3093\u306b\u3061\u306f" が返されます。Python 3.12 ランタイムは本来の "こんにちは" を返します。

Unicode レスポンスを使用すると、Lambda レスポンスのサイズが小さくなるため、同期関数の 6 MB の最大ペイロードサイズに大きなレスポンスを簡単に収めることができます。前の例では、エスケープされたバージョンは 32 バイトですが、Unicode 文字列では 17 バイトです。

Python 3.12 にアップグレードする場合、新しい応答形式に合わせてコードを調整する必要がある場合があります。呼び出し側が Unicode のエスケープを想定している場合、戻り値関数にコードを追加して Unicode を手動でエスケープするか、Unicode の戻り値を処理するように呼び出し側を調整する必要があります。

拡張機能の正常なシャットダウン

Python 3.12 以降の Python ランタイムでは、外部拡張機能を含む関数のグレースフルシャットダウン機能が改善されています。Lambda は、実行環境をシャットダウンするときに、ランタイムに SIGTERM シグナルを送信してから、登録された各外部拡張機能に SHUTDOWN イベントを送信します。Lambda 関数で SIGTERM シグナルをキャッチし、その関数によって作成されたデータベース接続などのリソースをクリーンアップできます。

実行環境のライフサイクルの詳細については、「Lambda 実行環境のライフサイクルを理解する」を参照してください。拡張機能でグレースフルシャットダウンを使用する方法の例については、「AWS Samples GitHub リポジトリ」を参照してください。