Lambda Java 関数の SnapStart エラーのトラブルシューティング - AWS Lambda

Lambda Java 関数の SnapStart エラーのトラブルシューティング

このページでは、スナップショット作成エラー、タイムアウトエラー、内部サービスエラーなど、Lambda SnapStart を使用する際に発生する一般的な問題を解決します。

SnapStartNotReadyException

エラー: An error occurred (SnapStartNotReadyException) when calling the Invoke20150331 operation: Lambda is initializing your function. It will be ready to invoke once your function state becomes ACTIVE.

一般的な原因

このエラーは、Inactive 状態の関数バージョンを呼び出そうとしたときに発生します。関数バージョンは、14 日間呼び出されなかったとき、または Lambda が実行環境を定期的にリサイクルしたときに Inactive になります。

解決方法

関数バージョンが Active 状態になるまで待ってから、もう一度呼び出してください。

SnapStartTimeoutException

問題: SnapStart 関数バージョンを呼び出そうとすると SnapStartTimeoutException が表示される。

一般的な原因

復元フェーズ中、Lambda は Java ランタイムを復元し、afterRestore() ランタイムフックを実行します。afterRestore() ランタイムフックが 10 秒以上実行された場合、Restore フェーズはタイムアウトし、関数を呼び出そうとするとエラーが発生します。ネットワーク接続と認証情報の問題により、Restore フェーズのタイムアウトが発生する可能性もあります。

解決方法

関数の CloudWatch ログで、復元フェーズ中に発生したタイムアウトエラーを確認します。すべての afterRestore() フックが 10 秒未満で完了していることを確認します。

例 CloudWatch ログ
{ "cause": "Lambda couldn't restore the snapshot within the timeout limit. (Service: Lambda, Status Code: 408, Request ID: 11a222c3-410f-427c-ab22-931d6bcbf4f2)", "error": "Lambda.SnapStartTimeoutException"}

500 Internal Service Error

エラー: Lambda was unable to create a new snapshot because you have reached your concurrent snapshot creation limit.

一般的な原因

500 エラーは、関数やコードの問題ではなく、Lambda サービス自体の内部エラーです。多くの場合、これらのエラーは断続的です。

解決方法

関数バージョンを再発行してみてください。

401 Unauthorized

エラー: Bad session token or header key

一般的な原因

このエラーは、Lambda SnapStart で AWS Systems Manager Parameter Store および AWS Secrets Manager 拡張機能を使用する場合に発生します。

解決方法

AWS Systems Manager Parameter Store および AWS Secrets Manager 拡張機能は SnapStart と互換性がありません。この拡張機能は、関数の初期化中に AWS Secrets Manager と通信するための認証情報を生成します。このため、SnapStart で使用すると、認証情報の期限切れエラーが発生します。

UnknownHostException

エラー: Unable to execute HTTP request: Certificate for abc.us-east-1.amazonaws.com doesn't match any of the subject alternative names.

一般的な原因

Lambda 関数は、既に DNS レスポンスをキャッシュしています。SnapStart で別の DNS キャッシュを使用すると、関数がスナップショットから再開されるときに接続タイムアウトが発生する可能性があります。

解決方法

Java 11 ランタイムで UnknownHostException 障害を防ぐには、networkaddress.cache.negative.ttl を 0 に設定することをお勧めします。Java 17 以降のランタイムでは、このステップは必要ありません。このプロパティは、 AWS_LAMBDA_JAVA_NETWORKADDRESS_CACHE_NEGATIVE_TTL=0環境変数を使用して Lambda 関数に設定できます。

スナップショット作成エラー

エラー: AWS Lambda could not invoke your SnapStart function. If this error persists, check your function's CloudWatch logs for initialization errors.

解決方法

関数の Amazon CloudWatch Logs で beforeCheckpoint() ランタイムフックタイムアウトを確認します。また、新しい関数バージョンの発行を試行することによって問題が解決することもあります。

スナップショット作成のレイテンシー

問題: 新しい関数バージョンを発行すると、関数が長期間 Pending 状態のままになる。

一般的な原因

Lambda がスナップショットを作成するときは、初期化コードが最大 15 分間実行される場合があります。制限時間は 130 秒、または設定されている関数のタイムアウト (最大 900 秒) のいずれか長い方です。

また、関数が VPC にアタッチされている場合、Lambda では関数が Active になる前にネットワークインターフェイスを作成する必要がある場合があります。関数が Pending のときに関数バージョンを呼び出そうとすると、409 ResourceConflictException が発生する可能性があります。関数が Amazon API Gateway エンドポイントを使用して呼び出される場合、API Gateway で 500 エラーが発生する可能性があります。

解決方法

関数バージョンが初期化されるまで、少なくとも 15 分待機してから呼び出します。