トラブルシューティング
うまく動作しない場合に考えられるケースをいくつか照会します。
私もハマりましたので、ちょっと書いておきます。
サムネイル画像が作成されない
トリガーが正しくセットできていない
- サフィックスに間違いがある。大文字と小文字は別物と判定されますので、JPEGファイルなら、jpg、Jpg、JPGなど登録する必要があります。
- プレフィックスに間違いがある。こちらも大文字と小文字は別物と判定されますので確認が必要です。
Lambda関数の実行ロールの権限不足
S3への読み書きで失敗している場合はアクセス権限が不足している可能性が高いです。
Lambda関数の設定でロールを確認してください。
サムネイル画像が作成できる場合とできない場合がある
前回、AWSのS3にアップロードした画像のサムネイルを自動で作成する処理をサーバレスで実行するLambda関数を作って無事に動いたのですが、動く場合と動かない場合があったのでCloudWatchのログを調べてみました。
サムネイル画像を作成できたのログ
REPORT Duration: 1500.01 ms Billed Duration: 1501 ms Memory Size: 128 MB Max Memory Used: 83 MB Init Duration: 373.20 ms
サムネイル画像を作成できなかった時のログ
REPORT Duration: 3003.62 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 122 MB
2021-10-07T13:27:35.147Z Task timed out after 3.00 seconds
どうやらタイムアウトしていますね。サイズの小さい画像ファイルは問題なく処理できたのですが、サイズの大きい画像ファイルは処理が間に合わなかったのでしょう。タイムアウトで処理が打ち切られてしまった結果、サムネイルが作成できなかったようです。
Lambda関数実行設定を変更
Lambda関数の設定を変更することができます。
Lambda関数を実行する時に割り当てるメモリ容量を指定できます。初期値だと128MBしかありません。ちょっとした軽い処理を動かす分にはよいですが、今回のような大きい画像を処理するような場合は増やしておかないとメモリ不足で動きません。
また、タイムアウトも初期値だと3秒です。これも少し重い処理を動かすと3秒を超えてしまいタイムアウトで処理が打ち切られてしまいます。実行する処理に応じて伸ばしておきましょう。
設定変更できました。これで再度動かして確認してみましょう。
これで再度試したところ、無事にサムネイルが作成されました。ログを確認すると、メモリを256MB中165MB使いましたし、実行時間も4.3秒かかっていますので、初期サイズだとリソースが足りていないことがわかります。
REPORT Duration: 4384.66 ms Billed Duration: 4385 ms Memory Size: 256 MB Max Memory Used: 165 MB Init Duration: 418.94 ms
まとめ
Lambda関数が想定どおりに動作しない場合は、まずCloudWatchで実行結果を確認しましょう。標準のログだけでは少ない場合、Lambdaコードの中でデバッグプリントを入れることでCloudWatchでも処理の流れが追えますので、処理が安定するまでは入れておくと確認しやすいと思います。
また、Lambda関数はちょっとした処理をサーバレスで動かしたい場合に使うものですので、ステータフルで本格的な重たい処理には向いていないと思います。その場合は、EC2などでしっかりアプリケーションを動かしたほうがよいと思いました。
逆に軽い処理だったり、たまにしか動作しないような処理にEC2でインスタンスを起動して構えるとコストが嵩みますので、この場合はサーバレスでコードの実行単位でコスト計上されるLambdaがよいです。
要は使い所を見極めて、適切なコンポーネントでシステムを組み上げることが重要です。
プログラミング初心者は、技術本より教材の方が学習効率がよいと思います
コメント