0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ローカルでAWS Lambdaをいい感じにデバッグする方法

0
Posted at

はじめに

サーバーレスなどでLambdaを使うとかっこいいけど、ローカルで実行しづらく
かと言ってAWSにデプロイして動かしてデバッグするというのは時間と手間がかかるので
なんかいい方法ないかなと模索した結果のまとめです。

前提

  • LambdaをPythonで書いている(多分他の言語でも大丈夫)
  • デプロイは、ECR経由でDockerイメージで実施
  • lambci/docker-lambdaを使う

方法

依存ライブラリなどなし

READMEにあるように、

docker run --rm -v "$PWD":/var/task:ro,delegated \
lambci/lambda:python3.8 lambda_function.lambda_handler

とするだけ。
event に渡したいJSONパラメータがあるのであれば、lambda_handler の後に指定するだけよいです(これもREADMEにある通り)
この辺は、いろんな人が記事書いているので、特筆することもないかなと思います。

依存ライブラリなどあり

lambci/docker-lambdaを単純に使うだけだと実はできなくて、ちょっとした裏技(?)が必要です。
実はこの辺書いている記事を見つけられなくて、ちょっと時間かかりました。

実行用のDockerイメージを用意する

FROM lambci/lambda:build-python3.8

COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip install --upgrade pip \
&& pip install -r requirements.txt
RUN yum -y install poppler-utils

ENTRYPOINT ["/var/rapid/init", "--bootstrap", "/var/runtime/bootstrap", "--enable-msg-logs"]

今回はサンプルとして poppler-utils を入れています。
あと、requirements.txt はこんな感じ。

pdf2image==1.16.0

実行用のDockerイメージを作成する

docker build -t hogehoge:debug .

実行する

docker run --rm -v "$PWD":/var/task:ro,delegated \
hogehoge:debug lambda_function.lambda_handler

実は、指定するDockerイメージを差し替えただけです。

もし、Lambdaの中でAWS内のリソース(S3やECR)にアクセスする場合は、env ファイルを用意して指定するとよいです。

AWS_ACCESS_KEY_ID=AKIQURAH5AQUP45R44T4
AWS_SECRET_ACCESS_KEY=YRFJeT1F219dR8BiFrQmybf3MPyHWBQ19WvZrMAw
AWS_DEFAULT_REGION=ap-northeast-1
docker run --rm -v "$PWD":/var/task:ro,delegated \
 --env-file env hogehoge:debug lambda_function.lambda_handler

最後に

この方法を知っているだけでLambdaのデバッグが簡単にできるので個人的にオススメです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?