のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

AWS X-Ray における Amazon SQS × AWS Lambda の新しいトレースリンクの機能を試してみる

今回は、最近発表されたAWS X-Ray の次の新機能を試してみます。

aws.amazon.com

従来までどうだったか、この新機能により何ができるようになったか、というのを簡単に図にまとめてみました。

https://cdn-ak.f.st-hatena.com/images/fotolife/n/neob/20221129/20221129162101.png

Amazon SQS にメッセージが送信され、その後 AWS Lambda 関数により取り出される処理についてもトレースを取得できるようになったわけですね。

この機能は自動的に適用されるので、使用している Amazon SQS の Queue や AWS Lambda 関数について追加の設定は不要です。

あくまで例ですが、次のような AWS SAM テンプレートから作成すれば、この機能を試すことができます。

github.com

上記の SAM テンプレートでは、Amazon SQS の Queue にメッセージを送信する AWS Lambda 関数と、受信する AWS Lambda 関数がリソースとして定義されています。

Globalsセクションで、それぞれの AWS Lambda 関数のプロパティに対して、Tracing: Active を設定し、AWS X-Ray のトレースを取得するようにしています。

Globals:
  Function:
    Timeout: 15
    Environment:
      Variables:
        SQS_QUEUE: !Ref SQSQUEUE
        DDB_TABLE: !Ref DDBTABLE
    Tracing: Active

同じく Globals セクションで、Amazon API Gateway にも AWS X-Rayのトレースを取得するようにしています。

 Api:
    TracingEnabled: True

またこのテンプレートでは、Amazon SQS の Queue にメッセージを送信する AWS Lambda 関数 は Python で作成しています。

github.com

この AWS Lambda 関数の中で下記のコードを適用して AWS Lambda 関数から他の AWS サービスにアクセスする処理のトレースも取得しています。

from aws_xray_sdk.core import patch
patch(['boto3'])

これらをみると、特に何も新しい設定やコードの追加などは行っていませんね。

では、この SAM テンプレートからスタックを作成します。テンプレートの中の Parameters セクションで、S3 バケット名は任意の値に変更して下さい。

SAMのリソース全体は、次から参照できます。samconfig.toml の内容も環境に応じて変更して下さい。

github.com

この SAM テンプレートで作成するアプリは、作成した S3 バケットにあらかじめ何かテキストファイルを入れてから実行する前提になっているので、適当なテキストファイルを S3 バケットに入れておきましょう。

その後、Amazon API Gateway に対して API リクエストを送ってみます。

curl -X POST \
    https://(API Gateway のURL)/Prod/xray \
    -d '{"bucket": "(バケット名)", "key": "(テキストファイル名)"}'

その後、AWS マネジメントコンソールで Amazon CloudWatch のコンソールを開き、左側のナビゲーションメニューから X-Ray トレース の下の サービスマップ を選択します。

次のようなマップが表示されます。赤枠の部分が新機能により表示されるようになったものです。

Amazon SQS の Queue の後にも、そのメッセージを受信している AWS Lambda 関数の情報が表示されていますね。

https://cdn-ak.f.st-hatena.com/images/fotolife/n/neob/20221128/20221128140048.png

次に左側のナビゲーションメニューから X-Ray トレース の下の トレース を選択し、ページ下側にある トレース セクションの中の ID のリンクを選択します。

次のようなトレースマップが表示されます。赤枠の部分が新機能により表示されるようになったものです。

https://cdn-ak.f.st-hatena.com/images/fotolife/n/neob/20221128/20221128140227.png

ページ下側に表示されるセグメントのタイムラインでは、次のような情報が参照できます。赤枠の部分が新機能により表示されるようになったものです。

https://cdn-ak.f.st-hatena.com/images/fotolife/n/neob/20221201/20221201145142.png

このように、Amazon SQS の Queue が介在する場合でも、一気通貫的なトレースを参照できるようになったので、Queue からメッセージを受信している AWS Lambda 関数をすぐに把握できてトレース分析ができるようになりました。個人的には、これはとてもありがたいことだと感動しています!

/* -----codeの行番号----- */