AWS Lambda
開発者ガイド

Ruby の AWS Lambda 関数エラー

コードが原因でエラーが発生すると、Lambda によって、エラーの JSON 表現が生成されます。このエラードキュメントは、呼び出しログ (同期呼び出しの場合は出力) で確認できます。

例 function.rb

def handler(event:, context:) puts "Processing event..." [1, 2, 3].first("two") "Success" end

このコードの場合は、入力エラーになります。Lambda はエラーを検出して、エラーメッセージ、タイプ、スタックトレースのフィールドを含む JSON ドキュメントを生成します。

{ "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] }

コマンドラインから関数を呼び出すと、AWS CLI はレスポンスを 2 つのドキュメントに分割します。発生した関数エラーを示すため、ターミナルに表示されるレスポンスには FunctionError フィールドが含まれます。関数によって返されたレスポンスまたはエラーは、出力ファイルに書き込まれます。

$ aws lambda invoke --function-name my-function out { "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }

出力ファイルを表示して、エラードキュメントを確認します。

$ cat out {"errorMessage":"no implicit conversion of String into Integer","errorType":"Function<TypeError>","stackTrace":["/var/task/function.rb:3:in `first'","/var/task/function.rb:3:in `handler'"]}

注記

Lambda からのレスポンスの 200 (成功) ステータスコードは、Lambda に送信したリクエストにエラーはなかったことを示します。エラーステータスコードが発生する原因となる問題については、「Errors」を参照してください。

また、Lambda は関数のログに最大 256 KB のエラーオブジェクトを記録します。コマンドラインから呼び出すときにログを表示するには、--log-type オプションを使用し、レスポンスで base64 文字列をデコードします。

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d START RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Version: $LATEST Processing event... Error raised from handler method { "errorMessage": "no implicit conversion of String into Integer", "errorType": "Function<TypeError>", "stackTrace": [ "/var/task/function.rb:3:in `first'", "/var/task/function.rb:3:in `handler'" ] } END RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 REPORT RequestId: 5ce6a15a-f156-11e8-b8aa-25371a5ca2a3 Duration: 22.74 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 18 MB

ログの詳細については、Ruby の AWS Lambda 関数ログ作成 を参照してください。

イベントソースに応じて、AWS Lambda はエラーになった Lambda 関数を返す場合があります。たとえば、Kinesis がイベントソースである場合、AWS Lambda は Lambda 関数が成功するかストリームのレコードの有効期限が切れるまで、エラーになった呼び出しを再試行します。再試行の詳細については、「エラー処理と AWS Lambda での自動再試行」を参照してください。