AWS Lambda
開発者ガイド

Go の AWS 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 関数から直接例外をスローさせ、AWS Step Functions State Machine 内で直接処理 (再試行またはキャッチ) できます。詳細については、「ステートマシンを使用したエラー条件の処理」を参照してください。

CreateAccount ステートは、Lambda 関数を使用してお客様の詳細をデータベースに書き込むタスクと考えてください。

  • タスクが成功した場合は、アカウントが作成され、ようこそ E メールが送信されます。

  • 既に存在するユーザー名でアカウントを作成しようとすると、Lambda 関数はエラーを発生させ、ステートマシンによって別のユーザー名を使用してアカウント作成プロセスを再試行するように促されます。

次のコード例はそれを行う方法を示しています。

package main type CustomError struct {} func (e *CustomError) Error() string { return "bad stuff happened..." } func MyHandler() (string, error) { return "", &CustomError{} }

実行時、AWS Step Functions はエラーをキャッチし、Next 移行に指定されているとおり SuggestAccountName 状態に移行します。

カスタムエラー処理によって、サーバーレスアプリケーションの作成がより簡単になります。この機能は、Lambda プログラミングモデル でサポートされているすべての言語に統合できるため、選択したプログラミング言語でアプリケーションを設計したり、作業途中で混用したり組み合わせたりできます。

AWS Step Functions および AWS Lambda を使用した独自のサーバーレスアプリケーション作成の詳細については、「AWS Step Functions」を参照してください。

予期しないエラーの処理

Lambda 関数は、ネットワークの停止など、制御できない理由によって失敗することがあります。このような状況は、例外的です。Go では、panic がこのような問題に対応します。コードがパニックすると、Lambda はエラーをキャプチャして、標準エラー json フォーマットでそのエラーをシリアル化することを試みます。また、Lambda はパニックの値を関数の CloudWatch ログに挿入することを試みます。回答が返されると、Lambda は自動的に関数を再作成します。必要と思われる場合には、コードに panic 関数を含めて、エラー回答をカスタマイズできます。

package main import ( "errors" "github.com/aws/aws-lambda-go/lambda" ) func handler(string) (string, error) { panic(errors.New("Something went wrong")) } func main() { lambda.Start(handler) }

これは、次のスタックを json に返します。

{ "errorMessage": "Something went wrong", "errorType": "errorString", "stackTrace": [ { "path": "github.com/aws/aws-lambda-go/lambda/function.go", "line": 27, "label": "(*Function).Invoke.function" }, ... ] }