翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Lambda の Error Processor サンプルアプリケーション
Error Processor サンプルアプリケーションは、 を使用して Amazon CloudWatch Logs サブスクリプション からのイベントAWS Lambdaを処理する方法を示しています。 CloudWatch Logs を使用すると、ログエントリがパターンに一致するときに Lambda 関数を呼び出すことができます。このアプリケーションのサブスクリプションは、ERROR
という単語を含むエントリの関数のロググループをモニタリングします。レスポンスとして、プロセッサ Lambda 関数が呼び出されます。プロセッサ関数は、エラーの原因となったリクエストのフルログストリームとトレースデータを取得して、後に使用するためにそれらを保存します。
関数コードは、次のファイルで使用できます。
-
ランダムエラー - random-error/index.js
-
プロセッサ - processor/index.js
サンプルは、AWS CLI および AWS CloudFormation を使用して数分でデプロイできます。アカウントでダウンロード、設定、デプロイするには、README
アーキテクチャとイベント構造
サンプルアプリケーションでは、次の AWS サービスを使用します。
-
AWS Lambda – 関数コードを実行し、ログを CloudWatch Logs に送信し、トレースデータを X-Ray に送信します。
-
Amazon CloudWatch Logs – ログを収集し、ログエントリがフィルターパターンに一致すると 関数を呼び出します。
-
AWS X-Ray - トレースデータの収集、トレースのインデックス作成 (検索用)、サービスマップの生成を行います。
-
Amazon Simple Storage Service (Amazon S3) — デプロイのアーティファクトとアプリケーションの出力を保存します。
各サービスには標準料金が適用されます。
アプリケーションの Lambda 関数でエラーをランダムに生成します。 CloudWatch Logs は、関数のログERROR
で という単語を検出すると、処理のためにイベントをプロセッサ関数に送信します。
例 CloudWatch メッセージイベントをログに記録する
{ "awslogs": { "data": "H4sIAAAAAAAAAHWQT0/DMAzFv0vEkbLYcdJkt4qVXmCDteIAm1DbZKjS+kdpB0Jo350MhsQFyVLsZ+unl/fJWjeO5asrPgbH5..." } }
これがデコードされている場合、データにはログイベントに関する詳細が含まれます。関数ではこの詳細を使用してログストリームを識別し、ログメッセージを解析してエラーの原因となったリクエストの ID を取得します。
例 デコードされた CloudWatch Logs イベントデータ
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "/aws/lambda/lambda-error-processor-randomerror-1GD4SSDNACNP4", "logStream": "2019/04/04/[$LATEST]63311769a9d742f19cedf8d2e38995b9", "subscriptionFilters": [ "lambda-error-processor-subscription-15OPDVQ59CG07" ], "logEvents": [ { "id": "34664632210239891980253245280462376874059932423703429141", "timestamp": 1554415868243, "message": "2019-04-04T22:11:08.243Z\t1d2c1444-efd1-43ec-b16e-8fb2d37508b8\tERROR\n" } ] }
プロセッサ関数は、 CloudWatch Logs イベントの情報を使用して、エラーの原因となったリクエストの完全なログストリームと X-Ray トレースをダウンロードします。そしてこの両方を Amazon S3 バケットに格納します。ログストリームとトレース時間を終了できるように、この関数では、データにアクセスする前に短時間待機します。
AWS X-Ray での計測
アプリケーションは、AWS X-Rayを使用して、関数呼び出しと関数が AWS サービスに実行する呼び出しとをトレースします。X-Ray は、関数から受け取ったトレースデータを使用して、エラーの特定に役立つサービスマップを作成します。
2 つの Node.js 関数は、テンプレートでのアクティブトレース用に設定されており、コードで AWS X-Ray SDK for Node.js を使用して計測されています。アクティブトレースでは、Lambda タグは、受信リクエストにトレースヘッダーを追加し、タイミングの詳細を含むトレースを X-Ray に送信します。さらに、ランダムエラー関数は X-Ray SDK を使用して、リクエスト ID およびユーザー情報を注釈に記録します。この注釈はトレースにアタッチされ、これを使用して特定のリクエストを見つけることができます。
プロセッサ関数は CloudWatch Logs イベントからリクエスト ID を取得し、 を使用してそのリクエストを X-Ray でAWS SDK for JavaScript検索します。X-Ray SDK が搭載された AWS SDK クライアントを使用して、トレースとログストリームをダウンロードします。次に、それらを出力バケットに保存します。X-Ray SDK でこれらの呼び出しを記録します。これらの呼び出しは、トレースのサブセグメントとして表示されます。
AWS CloudFormation テンプレートと追加リソース
アプリケーションは、2 つの Node.js モジュールで実装され、AWS CloudFormation テンプレートとシェルスクリプトを使用してデプロイされます。このテンプレートでは、プロセッサ関数、ランダムエラー関数、および以下のサポートリソースを作成します。
-
実行ロール - 他の AWS のサービスにアクセスするアクセス許可を関数に付与する IAM ロール。
-
Primer 関数 - ロググループを作成するためにランダムエラー関数を呼び出す追加の関数。
-
カスタムリソース - デプロイ中に primer 関数を呼び出して、ロググループが存在することを確認する AWS CloudFormation カスタムリソース。
-
CloudWatch Logs サブスクリプション – ERROR という単語がログに記録されたときにプロセッサ関数をトリガーするログストリームのサブスクリプション。
-
リソースベースのポリシー – CloudWatch Logs に呼び出しを許可するプロセッサ関数のアクセス許可ステートメント。
-
Amazon S3 バケット - プロセッサ関数からの出力の保存場所。
でアプリケーションテンプレート
Lambda の AWS CloudFormation との統合の制限を回避するには、デプロイ中に実行する追加の関数をテンプレートで作成します。すべての Lambda 関数には、関数実行からの出力を保存する CloudWatch Logs ロググループが付属しています。ただし、このロググループは、関数が初めて呼び出されるまで作成されません。
サブスクリプション (ロググループの有無によって異なる) を作成するには、アプリケーションを使用して 3 つめの Lambda 関数を使用してランダムエラー関数を呼び出します。このテンプレートには、プライマー関数インライン用のコードが含まれています。デプロイ中に AWS CloudFormation カスタムリソースでそのコードを呼び出します。DependsOn
プロパティを使用して、ログストリームとリソースベースのポリシーがサブスクリプションの前に作成されるようにします。