Go の AWS Lambda 関数エラー - AWS Lambda

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Go の AWS Lambda 関数エラー

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

このページでは、Lambda コンソールおよび AWS CLI を使用して、Go ランタイムの Lambda 関数呼び出しエラーを表示する方法について説明します。

例外を返す関数の作成

次のコード例は、Lambda 関数から直接例外を発生させ、それを直接処理するカスタムエラー処理を示しています。Go のカスタムエラーには、errors モジュールをインポートする必要があることに注意してください。

package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func OnlyErrors() error { return errors.New("something went wrong!") } func main() { lambda.Start(OnlyErrors) }

以下が返ります。

{ "errorMessage": "something went wrong!", "errorType": "errorString" }

仕組み

Lambda 関数を呼び出すと、Lambda は呼び出しリクエストを受け取り、実行ロールのアクセス許可を検証し、イベントドキュメントが有効な JSON ドキュメントであることを確認し、パラメータ値をチェックします。

リクエストが検証に合格した場合、Lambda は関数インスタンスにリクエストを送信します。Lambda ランタイム環境は、イベントドキュメントをオブジェクトに変換して、関数ハンドラーに渡します。

Lambda がエラーを検出した場合、例外のタイプ、メッセージ、およびエラーの原因を示す HTTP ステータスコードを返します。Lambda 関数を呼び出したクライアントまたはサービスは、エラーを処理するか、エラーをエンドユーザーに渡すことができます。正しいエラー処理動作は、アプリケーションの種類、対象ユーザー、エラーの原因によって異なります。

次の一覧は、Lambda から受信できるステータスコードの範囲を示したものです。

2xx

応答に X-Amz-Function-Error ヘッダーのある 2xx 番台のエラーは、Lambda ランタイムまたは関数エラーを示します。2xx シリーズステータスコードは、Lambda がリクエストを受け入れたことを示しますが、エラーコードの代わりに、Lambda は、レスポンスに X-Amz-Function-Error ヘッダーを含めることでエラーを示します。

4xx

4xx一連のエラーは、呼び出し元のクライアントまたはサービスが、要求を変更したり、許可を要求したり、要求を再試行したりすることによって修正できるエラーを示します。4xx以外の一連のエラーは、429 通常、リクエストのエラーを示します。

5xx

5xx シリーズエラーは、Lambda の問題、または関数の構成やリソースの問題を示します。5xx シリーズエラーは、ユーザーの操作なしで解決できる一時的な状態を示す場合があります。これらの問題は、呼び出し側のクライアントやサービスでは対処できませんが、Lambda 関数の所有者によって問題を解決できる場合があります。

呼び出しエラーの完全なリストについては、「エラーInvokeFunction 」を参照してください。

Lambda コンソールの使用

テストイベントを設定し、出力を表示することで、Lambda コンソールで関数を呼び出すことができます。出力は関数の実行ログにも記録され、トレースが有効になっている場合は AWS X-Ray にも記録されます。

Lambda コンソールで関数を呼び出すには
  1. Lambda コンソールの [関数ページ] を開きます。

  2. テストする関数を選択し、[Test] (テスト) を選択します。

  3. [Test event] (テストイベント) で、[New event] (新しいイベント) を選択します。

  4. テンプレートを選択します。

  5. [Name] (名前) にテストの名前を入力します。テキスト入力ボックスに、JSON テストイベントを入力します。

  6. [変更の保存] をクリックします。

  7. [テスト] を選択します。

Lambda コンソールで、関数が同期的に呼び出され、結果が表示されます。レスポンス、ログ、その他の情報を表示するには、[Details (詳細)] セクションを展開します。

AWS Command Line Interface (AWS CLI) を使用する

AWS CLI は、コマンドラインシェルでコマンドを使用して AWS サービスとやり取りするためのオープンソースツールです。このセクションの手順を完了するには、以下が必要です。

AWS CLI で Lambda 関数を呼び出すと、AWS CLI はレスポンスを 2 つのドキュメントに分割します。AWS CLIのレスポンスがコマンドプロンプトに表示されます。エラーが発生した場合は、レスポンスにはFunctionErrorフィールドが含まれます。関数によって返されたレスポンスまたはエラーは、出力ファイルに書き込まれます。例えば、output.jsonoutput.txt などです。

次の 読み出し コマンドの例は、関数を呼び出し、 呼び出し応答をoutput.txtファイルに書き込む方法を示しています。

aws lambda invoke \ --function-name my-function \ --cli-binary-format raw-in-base64-out \ --payload '{"key1": "value1", "key2": "value2", "key3": "value3"}' output.txt

AWS CLI バージョン 2 を使用している場合、cli-binary-format オプションは必須です。これをデフォルト設定にするには、aws configure set cli-binary-format raw-in-base64-out を実行します。詳細については、バージョン 2 の AWS Command Line Interface ユーザーガイドの「AWS CLI でサポートされているグローバルコマンドラインオプション」を参照してください。

コマンドプロンプトにAWS CLIレスポンスが表示されるはずです:

{ "StatusCode": 200, "FunctionError": "Unhandled", "ExecutedVersion": "$LATEST" }

output.txtファイル内に関数呼び出しレスポンスが表示されるはずです。同じコマンドプロンプトで、次のコマンドを使用してコマンドプロンプトに出力を表示することもできます。

cat output.txt

コマンドプロンプトに呼び出し応答が表示されます。

他の AWS サービスでのエラー処理

別の AWS のサービスが関数を呼び出すと、サービスは呼び出しの種類と再試行動作を選択します。AWS のサービスは、スケジュールに従って、リソースのライフサイクルイベントに応答して、またはユーザーからのリクエストを処理するために、関数を呼び出すことができます。サービスによっては、関数を非同期に呼び出し、Lambda でエラーを処理する場合もあれば、再試行するか、ユーザーにエラーを返す場合もあります。

例えば、API Gateway はすべての呼び出しエラーと関数エラーを内部エラーとして扱います。Lambda API が呼び出しリクエストを拒否した場合、API Gateway は 500 エラーコードを返します。関数が実行されてもエラーが返された場合、または誤った形式でレスポンスが返された場合、API Gateway は 502 エラーコードを返します。エラーレスポンスをカスタマイズするには、コードでエラーをキャッチし、レスポンスを必要な形式に加工する必要があります。

エラーの発生元とその原因を特定するには、AWS X-Ray を使用することをお勧めします。X-Ray を使用すると、エラーが発生したコンポーネントを特定し、そのエラーの詳細を確認することができます。次の例は、API Gateway から 502 応答が返された関数エラーを示しています。


          API Gateway での関数エラーのトレースマップ。

詳細については、「AWS Lambda での Go コードの作成」を参照してください。

次のステップ