Python による Lambda 関数の構築
AWS Lambda で Python コードを実行できます。Lambda は、コードを実行してイベントを処理する Python 用のランタイムを提供します。コードは、管理している AWS Identity and Access Management (IAM) ロールの認証情報により、SDK for Python (Boto3) を備えた環境で実行されます。Python ランタイムに含まれている SDK バージョンの詳細については、「ランタイムに含まれる SDK バージョン」を参照してください。
Lambda は、以下の Python ランタイムをサポートしています。
名前 | 識別子 | オペレーティングシステム | 廃止日 | 関数の作成をブロックする | 関数の更新をブロックする |
---|---|---|---|---|---|
Python 3.13 |
|
Amazon Linux 2023 |
2029 年 6 月 30 日 |
2029 年 7 月 31 日 |
2029 年 8 月 31 日 |
Python 3.12 |
|
Amazon Linux 2023 |
2028 年 10 月 31 日 |
2028 年 11 月 30 日 |
2029 年 1 月 10 日 |
Python 3.11 |
|
Amazon Linux 2 |
2026 年 6 月 30 日 |
2026 年 7 月 31 日 |
2026 年 8 月 31 日 |
Python 3.10 |
|
Amazon Linux 2 |
2026 年 6 月 30 日 |
2026 年 7 月 31 日 |
2026 年 8 月 31 日 |
Python 3.9 |
|
Amazon Linux 2 |
2025 年 11 月 3 日 |
2025 年 12 月 8 日 |
2026 年 1 月 8 日 |
Python 関数を作成するには
-
Lambda コンソール
を開きます。 -
[Create function] (関数の作成) をクリックします。
-
以下の設定を行います。
-
[Function name]: 関数名を入力します。
-
[ランタイム]: [Python 3.13] を選択します。
-
-
[Create function (関数の作成)] を選択します。
コンソールで、lambda_function
という名前の単一のソースファイルを含む Lambda 関数が作成されます。このファイルを編集し、組み込みのコードエディタでファイルをさらに追加することができます。[DEPLOY] セクションで [デプロイ] を選択して関数のコードを更新します。次に、コードを実行するには、[TEST EVENTS] セクションで [テストイベントを作成] を選択します。
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.13 の実験的な機能
Python 3.13 マネージドランタイムおよびベースイメージは、以下の実験的機能をサポートしていません。ランタイムフラグを使用してこれらの機能を有効にすることはできません。Lambda 関数でこれらの機能を使用するには、Python 3.13 の独自のビルドを備えたカスタムランタイムまたはコンテナイメージをデプロイする必要があります。
-
フリースレッド CPython
: グローバルインタープリターロックを無効にすることはできません。 -
ジャストインタイム (JIT) コンパイラ
: JIT コンパイラを有効にすることはできません。
レスポンスの形式
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 以降の Python ランタイムにアップグレードする場合、新しい応答形式に合わせてコードを調整する必要がある場合があります。呼び出し側が Unicode のエスケープを想定している場合、戻り値関数にコードを追加して Unicode を手動でエスケープするか、Unicode の戻り値を処理するように呼び出し側を調整する必要があります。
拡張機能の正常なシャットダウン
Python 3.12 以降の Python ランタイムでは、外部拡張機能を含む関数のグレースフルシャットダウン機能が改善されています。Lambda は、実行環境をシャットダウンするときに、ランタイムに SIGTERM
シグナルを送信してから、登録された各外部拡張機能に SHUTDOWN
イベントを送信します。Lambda 関数で SIGTERM
シグナルをキャッチし、その関数によって作成されたデータベース接続などのリソースをクリーンアップできます。
実行環境のライフサイクルの詳細については、「Lambda 実行環境のライフサイクルの概要」を参照してください。拡張機能でグレースフルシャットダウンを使用する方法の例については、「AWS Samples GitHub リポジトリ