DVA-C02トラブルシューティングと最適化HARD単一選択

あるチームがX-Rayを使ってマルチサービスアーキテクチャをトレースしている。あるリクエストのX-Rayトレースを確認すると、API Gateway → Lambda → SNS → Lambda2 というフローのはずが、Lambda2のトレースがSNSトリガーのトレースと別のトレースIDになっており、サービスマップ上でつながっていない。原因として最も可能性が高いのはどれか。

  1. A. Lambda2のIAMロールにX-Rayへの書き込み権限がない
  2. B. SNS → Lambda2のサブスクリプションがHTTPSではなくLambdaプロトコルを使っているためコンテキストが失われる
  3. C. Lambda2のX-Ray有効化設定が無効になっている
  4. D. SNSはX-Rayトレースコンテキストの伝播をサポートしていないため、Lambda2は新しいトレースを開始する
解答と解説を見る

正解: D

X-Rayのトレースコンテキスト伝播はサービスによってサポート状況が異なる。AmazonSNSはX-RayのトレースヘッダーをLambdaのリクエストに伝播する機能を持っているが、SNSを経由した非同期呼び出しでは「X-Amzn-Trace-Id」ヘッダーが伝播される。ただし実際の環境では、SNSトピックのサブスクリプションがLambdaの場合にトレースが断絶するケースがある(選択肢D)。SNSが非同期でLambdaを呼び出す際、呼び出し元のトレースコンテキストが必ずしも引き継がれない設計上の制約がある。この問題を解決するにはLambda2のコード内でX-Ray SDKを使い、SNSメッセージのメタデータに埋め込まれたトレースIDを明示的に読み取って継続するか、SNSメッセージの属性にトレースIDを含めてLambda2側で参照する。選択肢CのActive Tracing無効であればLambda2自体のトレースが全く取れないはずで別トレースIDで存在はしない。選択肢AのIAM権限不足はトレースの書き込みエラーであり、別トレースIDでの記録は起きない。選択肢Bはプロトコルの違いとトレース伝播は無関係。

▸ この試験を本気で演習する(全150問・無料)