📝

Lambda で Python 3.6 のコンテナイメージを使用してみた

2025/02/06に公開

Lambda のマネージドランタイムとしての Python 3.6 は 2022 年 7 月 18 日に廃止されているため、現状では新規関数作成時に Python 3.6 のランタイムを指定することはできません。

Lambda ランタイム - AWS Lambda

しかし、検証用にどうしても Lambda で Python 3.6 を使用する必要がある場合にはコンテナイメージを利用する方法もあるかと思うのでやってみました。

前提

  • 開発環境は Cloud9
  • AWS CLI バージョン 2 をインストール済み
  • Docker をインストール済み
  • Python をインストール済み

手順概要

コンテナイメージで Python Lambda 関数をデプロイする - AWS Lambda
上記ドキュメントの手順を参考に実施します。

  1. ベースイメージからイメージを作成
  2. ECR リポジトリへのプッシュ
  3. Lambda 関数作成
  4. 動作確認

1. ベースイメージからイメージを作成

1-1. プロジェクト用のディレクトリを作成し、そのディレクトリに切り替えます。

$ mkdir example
$ cd example

1-2. lambda_function.py の作成
lambda_function.py ファイルを作成し、以下のコードを書き込みます。

lambda_function.py
import sys
def handler(event, context):
    return 'Hello from AWS Lambda using Python' + sys.version + '!'

1-3. Dockerfile の作成
Dockerfile を作成し、以下のコードを書き込みます。

Dockerfile
FROM public.ecr.aws/lambda/python:3.6

# Copy requirements.txt
COPY requirements.txt ${LAMBDA_TASK_ROOT}

# Install the specified packages
RUN pip install -r requirements.txt

# Copy function code
COPY lambda_function.py ${LAMBDA_TASK_ROOT}

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.handler" ]

FROM のイメージには ECR パブリックギャラリーで公開されている Python 3.6 のイメージを指定しました。
Amazon ECR Public Gallery - AWS Lambda/python

2. ECR リポジトリへのプッシュ

2-1. ECR リポジトリはコンソールからデフォルト設定で作成しました。

2-2. ECR リポジトリへのプッシュ
ECR リポジトリのプッシュコマンドを順番に実行しました。

$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com

$ docker build -t test .

$ docker tag test:latest 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest

$ docker push 012345678901.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest

3. Lambda 関数作成

3-1. コンソールからコンテナイメージを指定して Lambda 関数を作成します。

4. 動作確認

4-1. コンソールからテスト実行して、以下の結果が表示されれば成功です。

"Hello from AWS Lambda using Python3.6.15 (default, Nov  3 2022, 12:39:40) \n[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)]!"

ベースイメージのサポートについて

Lambda ランタイム - AWS Lambda

ランタイムが非推奨になると、 Lambda のマネージドランタイムとコンテナベースイメージの更新はサポートされなくなります。サポートされているランタイムまたはベースイメージの使用における関数のアップグレードは、お客様の責任で行ってください。

上述の通り、Python 3.6 のランタイムは非推奨になっているため、今回使用した Python 3.6 のベースイメージも非推奨です。
そのため、問題が発生した場合はユーザーの責任範囲となりますのでご注意ください。

まとめ

今回は Lambda で Python 3.6 のコンテナイメージを使用してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion