非同期的に呼び出すように AWS Lambda 関数を設定しましたが、送信先が開始されません。この問題を修正するにはどうすればよいですか?
Lambda コンソールを通じて Lambda 関数を呼び出すと、その関数は同期的に呼び出されますか? それとも、非同期的に呼び出されますか?
- または -
重複した Lambda 関数呼び出しを修正する方法を教えてください。
解決方法
Lambda 関数を非同期的に呼び出して失敗した場合、考えられる原因は次のとおりです。
- Lambda には、コードに含まれるアクションを実行するための許可がない。
- Lambda 関数を呼び出す AWS のサービスに十分なアクセス許可がない。
- Lambda 関数が同期的に呼び出される。
- Lambda 関数の非同期呼び出し設定で、再試行回数が 0 に設定された。
非同期呼び出しの問題をトラブルシューティングするには、次の手順に従ってください。
1. Lambda 関数がどのように呼び出されるかを決定します。関数は AWS CLI を使用して呼び出されますか? 関数は AWS のサービスを通じて呼び出されますか?
2. AWS のサービスが Lambda 関数を同期的に呼び出すか、非同期的に呼び出すかを確認します。
3. 次のコマンドを使用して Lambda 関数を非同期的に呼び出します。
aws lambda invoke
--function-name my-function
--invocation-type Event
--cli-binary-format raw-in-base64-out
--payload '{ "key": "value" }' response.json
202 ステータスコードが報告されているかどうか、またはコマンドがエラーを返すかどうかを確認します。
4. Lambda 関数の Amazon CloudWatch Logs を確認して、重複した呼び出しが以下になっていないかをチェックします。
- 同じリクエスト ID を持っているかどうか。
- エラーが返されたか、タイムアウトしたか。
詳細については、「Lambda 関数呼び出しの重複を防ぐ方法を教えてください」を参照してください。
5. 重複した呼び出しのリクエスト ID が同じでエラーを返したり、タイムアウトしたりした場合は、非同期呼び出しのエラー処理を設定します。この設定を使用すると、障害が発生した場合に Lambda サービスが実行できる再試行回数を制御できます。
詳細については、「エラー処理と AWS Lambda での自動再試行」を参照してください。
注: 同じリクエスト ID の重複した呼び出しでエラーやタイムアウトが返される場合は、Lambda が関数を再試行したことを示しています。
6. 重複した呼び出しでエラーが返されず、タイムアウトもされなかった場合は、次の操作を行います。
- Lambda 関数のコードがべき等で、同じメッセージを複数回処理できることを確認してください。
- Lambda 関数の同時実行制限が、受信する呼び出しリクエストの数を処理できるほど高く設定されていることを確認します。
- Lambda 関数が返すエラーを特定して解決します。
詳細については、「Lambda 関数が失敗する場合のトラブルシューティング方法を教えてください」を参照してください。
注: クライアント側からの呼び出しが重複している場合、リクエスト ID が異なります。
7. それでも問題が解決しない場合は、AWS サポートに対してケースをオープンします。ケースで次の情報を提供してください。
- Lambda 関数の Amazon リソースネーム (ARN)。
- Lambda 関数のワークフローは、含まれるすべてのサービスで設定されています。
- 問題が断続的か継続的かに関する詳細。
- 問題が発生したときの CloudWatch ログを .txt 形式で完成させます。これらの CloudWatch ログは、タイムアウトの問題、Init Duration、許可の問題を含む Lambda 関数のエラーを特定するために使用されます。
- 問題の正確なタイムスタンプ (タイムゾーンまたはタイムスタンプ付き (UTC))。
注: セキュリティとプライバシー上の理由から、AWS サポート担当者はお客様の CloudWatch ログにアクセスできません。
関連情報
Comparing Lambda invocation modes (Lambda 呼び出しモードの比較)
Lambda 関数を呼び出す
Introducing AWS Lambda Destinations (AWS Lambda の送信先のご紹介)