LoginSignup
69
77

AWS LambdaをDocker化する際の注意点と学びの備忘録

Last updated at Posted at 2024-05-15

はじめに

AWS Lambdaを使ってデプロイするときに、
Dockerイメージを使って、デプロイしたいケースがありました。

すでに、動いているLambdaをLambda Dockerへ変更する際に、
つまずきポイントがあったので、備忘録として、残しておきます

Lambdaでコンテナイメージを利用とは?

Lambdaには、通常のLambda(ソースコードのみを記述するタイプ)と
Dockerイメージを利用するパターンが存在する
※Dockerイメージは、ECRから参照し、Lambda上で実行が出来る

image.png

なぜDockerイメージを使うのか?

通常のLambdaとLambda Dockerには、仕様の一部に違う部分が存在している

今回、Lambda Dockerを利用したいと考えたのは、
通常のLambdaよりも、大きいパッケージを展開できる為

●Lambda
50 MB (圧縮、直接アップロード用)
250MB(解凍後)
3 MB (コンソールエディター)

●Lambda Docker
コンテナイメージコードのパッケージサイズ:
10GB

Lambdaに乗せられる容量が大きければ、
利用したいパッケージが多少大きくてデプロイが可能となる

今回Lambda Docker化したい内容

以前、記事に書き起こしたLINEWORKS BOT用のLambdaに
LangChainを実装したかった為、Lambda Docker化する必要があった

つまずきポイント1

LambdaとLambda Dockerのhandlerの宣言方法が異なる

前回の記事で、作成したLambdaのソースコードをそのまま利用し、イメージを作成
デプロイし、動作確認をしたところ、以下のエラーが発生

[ERROR] Runtime.HandlerNotFound: Handler 'handler' missing on module 'lambda_function'

通常のLambdaだと、ランタイム設定の中のハンドラという部分で、宣言が可能
image.png

Lambda Dockerだと、GUI上に宣言部分が存在していない
image.png

今回、Dockerイメージを作成する際、
AWSが準備しているPythonイメージを利用した

上記のドキュメントによれば、lambda_function.lambda_handlerではなく、
handlerと宣言する必要があった

なお、Dockerfile内の以下を調整することで、
lambda_function.lambda_handlerとすることも可能

CMD [ "lambda_function.handler" ]

Lambda Dockerで、ハンドラの宣言は、Dockerfileの中を確認しましょう
AWSドキュメントのまま、利用する場合は、handlerと宣言しよう

つまずきポイント2

ECR側で、latestを更新しても、Lambda側のイメージが変更されない
image.png

イメージの調整が必要と分かり、再度ECRへpushするが、エラーログに変化が出てこない
なぜ?と試行錯誤し、Lambdaの[新しいイメージをデプロイ]を開き、
そのまま保存をすることで、ログに変化が出ていた

image.png

latestとしているので、同じタグが付いているものを引っ張ってきてくれると思っていたが、
キャッシュ? もしくは、latestと記載しているが、SHAで引っ張ってきているのか、
最新イメージで動作している状態ではなかった

なお、コンテナイメージのベストプラクティスでは、
latestは利用しない方がよいと記載されている

今回もlatestではなく、バージョンをきちんと振って、
都度デプロイすれば混乱しなかった

Dockerイメージを運用する場合は、latest運用はやめましょう

さいごに

初めてのLambda Dockerでつまずいたポイントでした
自分が利用するサービス仕様やベストプラクティスは、把握して利用していきたいですね!
それでは、また!

69
77
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
69
77