コンテナイメージで Python Lambda 関数をデプロイする - AWS Lambda

コンテナイメージで Python Lambda 関数をデプロイする

注記

Python 3.6 ランタイムのサポートは、2022 年 7 月 18 日で終了します。詳細については、「ランタイムの非推奨化に関するポリシー」を参照してください。

Lambda 関数コードをコンテナーイメージとしてデプロイすることができます。AWS では、Python 関数のコンテナーイメージの構築に役立つ次のリソースが提供されています。

  • Lambda の AWS ベースイメージ

    これらのベースイメージには、Lambda でイメージを実行するために必要な言語ランタイムおよびその他のコンポーネントがプリロードされています。AWS は、コンテナイメージの構築に役立つ各ベースイメージの Dockerfile を提供します。

  • オープンソースのランタイムインターフェイスクライアント (RIC)

    コミュニティベースイメージまたはプライベートエンタープライズベースイメージを使用する場合は、ランタイムインターフェイスクライアントをベースイメージに追加して、Lambda と互換性を持たせる必要があります。

  • オープンソースのランタイムインターフェイスエミュレータ (RIE)

    Lambda は、関数をローカルでテストするためのランタイムインターフェイスエミュレータを提供します。Lambda の ベースイメージとカスタムランタイムのベースイメージには、RIE が含まれます。その他のベースイメージでは、イメージをローカルでテストするための RIE をダウンロードできます。

コンテナイメージとして定義された関数のワークフローには、次のステップが含まれます。

  1. このトピックにリストされているリソースを使ってコンテナイメージを構築します。

  2. イメージを Amazon ECR コンテナレジストリにアップロードします。

  3. Lambda 関数を作成するか、または関数コードを更新して、イメージを既存の関数にデプロイします。

AWS Python のベースイメージ

AWS は、Python 用の次のベースイメージを提供します。

タグ ランタイム オペレーティングシステム Dockerfile 廃止

3.9

Python 3.9 Amazon Linux 2 GitHub の Dockerfile for Python 3.9

3.8

Python 3.8 Amazon Linux 2 GitHub の Python 3.8用の Dockerfile

37

Python 3.7 Amazon Linux GitHub の Python 3.7用の Dockerfile

Amazon ECR リポジトリ: gallery.ecr.aws/lambda/python

AWS ベースイメージから Python イメージを作成する

AWS ベースイメージを使用して Python 用のコンテナーイメージを構築する場合、Python アプリをコンテナーにコピーし、依存関係をインストールするだけで済みます。

関数に依存関係がある場合、ローカル Python 環境が Dockerfile で指定したベースイメージのバージョンと一致する必要があります。

python:3.8 ベースイメージで Python 関数を構築してデプロイします。

  1. ローカルマシンで、新しい関数のプロジェクトディレクトリを作成します。

  2. プロジェクトディレクトリに、関数コードを含む app.py という名前のファイルを追加します。以下は、シンプルな Python ハンドラーの例です。

    import sys def handler(event, context): return 'Hello from AWS Lambda using Python' + sys.version + '!'
  3. プロジェクトディレクトリに、requirements.txt という名前のファイルを追加します。このファイルで、必要な各ライブラリを個別の行としてリスト化します。依存関係がない場合は、ファイルを空のままにします。

  4. テキストエディタを使用して、プロジェクトディレクトリに Dockerfile を作成します。次は、前のステップで作成したハンドラーの Dockerfile の例です。関数ハンドラの横にある ${LAMBDA_TASK_ROOT} ディレクトリに依存関係をインストールして、関数の呼び出し時に Lambda ランタイムがそれらの依存関係を検索できるようにします。

    FROM public.ecr.aws/lambda/python:3.8 # Copy function code COPY app.py ${LAMBDA_TASK_ROOT} # Install the function's dependencies using file requirements.txt # from your project folder. COPY requirements.txt . RUN pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" # Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile) CMD [ "app.handler" ]
  5. コンテナイメージを作成するには、Create an image from an AWS base image for Lambda のステップ 4~7 を実行します。

代替のベースイメージから Python イメージを作成します

代わりのベースイメージを使用する場合は、Python ランタイムインターフェイスクライアントをインストールする必要があります。

Alpine ベースイメージから Python イメージを作成する方法の例については、AWS ブログの Lambda のコンテナイメージのサポートを参照してください。

Python ランタイムインターフェイスクライアント

pip パッケージマネージャーを使用して、Python 用のランタイムインターフェイスクライアントをインストールします。

pip install awslambdaric

パッケージの詳細については、Python パッケージインデックス (PyPI) ウェブサイトの Lambda RIC を参照してください。

Python ランタイムインターフェイスクライアント をGitHub からダウンロードすることもできます。

コンテナイメージのデプロイ

新しい関数を作成する場合、Python イメージをデプロイします。既存の関数では、コンテナーイメージを再ビルドする場合は、関数コードの更新を行うことでイメージを再度デプロイする必要があります。