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 日

2024 年 11 月 13 日

2025 年 1 月 7 日

注記

この表のランタイム情報は、常に更新されています。Lambda での AWS SDK の使用に関する詳細については、Serverless Land の「Lambda 関数での AWS SDK の管理」を参照してください。

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 コンソールでは、AWS Cloud9 を使用して、ブラウザに統合開発環境を提供します。また、AWS Cloud9 を使用して、独自の環境で Lambda 関数を開発することもできます。詳細については、AWS Cloud9 ユーザーガイドの「AWS Toolkit を使用した AWS Lambda 関数の使用」を参照してください。

注記

ローカル環境でアプリケーション開発を開始するには、このガイドの GitHub リポジトリで利用可能なサンプルアプリケーションの 1 つをデプロイします。

Python のサンプル Lambda アプリケーション
  • blank-python - ログ記録、環境変数、AWS X-Ray トレース、レイヤー、単位テスト、AWS SDK の使用を示す Python 関数。

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 リポジトリ」を参照してください。