5
6

More than 3 years have passed since last update.

シンプルに動かせるLambda(Python)のローカル環境を5分で作ってみました

Last updated at Posted at 2021-02-06

今回Lambda関数のテストをローカル環境でできないかなと調べていまして、Amazonが公式に公開しているdockerイメージ(aws-lambda-python)を使用すれば簡単に動かせるらしいということを知りました。

ただ、これを説明しているサイトだとイメージの作成、ポートの指定とかコマンド直打ちでやってるのが多くてめんどくさい(みんなバラバラのイメージ名、ポート番号だと正直めんどくさい)なあと思ったので、このあたりをdocker-composeで簡単かつ自動で動くようにしちゃおうというものです。

「aws-lambda-python 使い方」とか調べても出てこなかったので、参考にしていただければ幸いです。

環境

  • Windows 10
  • Docker for Windows
  • Git Bash

前提

上記がすべてインストール済みであること。

今回のディレクトリ構成

proj/
  ├ app.py
  ├ docker-compose.yml
  └ Dockerfile

方法

app.pyに実行する内容を書きます。今回はシンプルに文字列を返すだけのものにしてます。

app.py
def handler(event, context):
    return 'Hello World! from Lambda'

Amazon公式ドキュメントに書いてある内容を貼り付けます。

Dockerfile
FROM public.ecr.aws/lambda/python:3.8
COPY app.py ${LAMBDA_TASK_ROOT}
CMD [ "app.handler" ]

これで公式サイトに書いてある方法で実行できるのですが、正直2,3ステップ踏むのが面倒だなあと感じたのでこの先の手順を自動化します。

docker-compose.yml
version: "3.9"

services:
  lambda:
    build: .
    ports:
      - "9000:8080"

試してみる。

ここまでやったら準備は整ったので、いよいよ進めます。

今回のプロジェクトファイルのあるディレクトリで以下を実行。

$ docker-compose up -d

これだけで9000番ポートでLambdaを実行できるようになりました。

最後に確認してみます。

$ curl http://127.0.0.1:9000/2015-03-31/functions/function/invocations -s -d '{}'
"Hello World! from Lambda"

これ、windowsのコマンドプロンプトでやると以下のようなエラーが発生するので、気を付けてください。(なので、環境のところで敢えてGit Bashと書きました。)

{"errorMessage": "Unable to unmarshal input: Expecting value: line 1 column 1 (char 0)", "errorType": "Runtime.UnmarshalError", "stackTrace": []}

参考

5
6
0

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
5
6