10
4

More than 1 year has passed since last update.

Docker+AWS Lambdaのローカルテスト環境を作成する

Last updated at Posted at 2022-03-02

概要

Lambdaのローカルテスト環境をDockerで作成しました。本記事ではPythonで書いています。
公式ドキュメントを読んでも上手くいかなかったので、記事にします。

用意するもの

  • Dockerコマンドを実行できる環境

構築手順

ディレトリ構成

(プロジェクトルートディレクトリ)/
├── Dockerfile
├── requirements.txt (不要なら作成しなくて良い)
└── app.py

ファイル作成

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

COPY app.py ${LAMBDA_TASK_ROOT}
COPY requirements.txt  .

RUN  pip3 install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

CMD [ "app.handler" ]
app.py
import sys
def handler(event, context): 
    return 'Hello, This is Lambda Test'

※本記事ではrequirements.txtは空で環境作成します。
何か必要なモジュールがあれば追記して次の動作確認をしてください。

環境構築・動作確認

1. イメージ作成

テストでhello-worldという名前のイメージにしていますが、お好きな名前で問題ございません。

$ docker build -t hello-world .

2. コンテナ作成

ローカルはポート9000で公開していますが、こちらもお好きなポートで大丈夫です。コンテナ内の8080ポートについては変更しないでください。

$ docker run -p 9000:8080 hello-world
~~
02 Mar 2022 15:57:27,797 [INFO] (rapid) exec '/var/runtime/bootstrap' (cwd=/var/task, handler=)

3. 動作確認

別ターミナルを起動し、curlで作成した関数を実行します。/2015-03-31/functions/function/invocationsのパスについてはDockerfileで指定したイメージによるものなので特に考えずに設定してください。

app.pyで設定したレスポンスが表示されます。

$ curl -d '{}' http://localhost:9000/2015-03-31/functions/function/invocations
"Hello, This is Lambda Test"

コンテナ作成を実行したターミナルのログには以下が表示されます。環境などによって表示が異なりますのでご承知おきください。

02 Mar 2022 15:57:27,797 [INFO] (rapid) exec '/var/runtime/bootstrap' (cwd=/var/task, handler=)
02 Mar 2022 16:00:22,977 [INFO] (rapid) extensionsDisabledByLayer(/opt/disable-extensions-jwigqn8j) -> stat /opt/disable-extensions-jwigqn8j: no such file or directory
02 Mar 2022 16:00:22,977 [WARNING] (rapid) Cannot list external agents error=open /opt/extensions: no such file or directory
START RequestId: f96f05b2-cf54-4ebf-94d7-d8399c37afcd Version: $LATEST
END RequestId: f96f05b2-cf54-4ebf-94d7-d8399c37afcd
REPORT RequestId: f96f05b2-cf54-4ebf-94d7-d8399c37afcd  Init Duration: 0.21 ms  Duration: 65.85 ms      Billed Duration: 66 ms    Memory Size: 3008 MB    Max Memory Used: 3008 MB

まとめ

Docker+Lambdaのローカルテスト環境が簡単に作成できました。
テストを書く際はapp.pyを編集したり、requirements.txtに必要なモジュールを記載してからビルドしてください。

10
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4