AWS Lambda でパフォーマンスチューニングの為に AWS X-Ray を手軽に使ってみよう

はじめに

システムを構築していると、パフォーマンスチューニングの必要な状況に直面することはかなり多いと思います。ただ、パフォーマンスチューニングを行うにはどの処理で何秒かかっているのかを測定して、ボトルネックとなっている箇所を特定しなければなりません。

そんな際に X-Ray をお手軽に使ってみませんか? というご提案です。

お手軽設定

AWS X-Ray には、いろいろと機能がありますが、AWSのベストプラクティスにもあるように まずはスモールスタートで開始することにします。

Lambda 好きの私としては Lamba関数 のパフォーマンスチューニングのネタとして計測に使いたいのでLambda関数内の処理の時間計測で使用したいと思います。

ライブラリのインポート

Python の環境へのインストールは 

pip install aws-xray-sdk

で行います。

AWS Serverless Application Model (AWS SAM) などを利用して構築している場合には、 requirements.txt の中に aws-xray-sdk を追加します。
AWS X-Ray requirement.txt に追記

ソースコード側では、こんな感じで xray_recoreder や patch_all を aws_xray_sdk.core から import します。
X-Ray定義

参考: 
AWS X-Ray – 開発者ガイド – AWS X-Ray SDK for Python

AWS X-Ray SDK for Python - AWS X-Ray
X-Ray SDK for Python を使用して Python アプリケーションを計測します。

aws-xray-sdk-python /README.md

aws-xray-sdk-python/README.md at master · aws/aws-xray-sdk-python
AWS X-Ray SDK for the Python programming language. Contribute to aws/aws-xray-sdk-python development by creating an acco...

サブセグメントの作成

Lambda関数の場合は、セグメントの定義を抜かして、いきなり subsegment から書けます。どうやら親となる segment は Lambda の Trace を ON にしたときからAWS側で作ってくれているようです。
下のように、ソースコードの計測したい箇所の前後を xray_recorder.begin_subsegmentxray_recorder.end_subsegment サブセグメントとして定義することで、そのサブセグメント内にかかる時間を測定します。
Lambda で X-Ray subsegment

ちなみに Lambda 関数内でセグメントの開始を定義( xray_recorder.begin_segment())すると WARNING メッセージが出ますが、WARNINGなので処理は継続します。
Stack overflow – AWS Xray: Cannot create segments inside Lambda function and segment not found
AWS Xray: Cannot create segments inside Lambda function and segment not found
A really strange behaviour I was experiencing, I am following online documentation and while creating a segment to work ...

測定結果確認

Management Console で CloudWatch > 左のメニューの X-Ray トレース > トランザクション検索  から、結果を検索します。
Filter spans by: の下の空欄を選択すると候補がズラッと表示されるので、 attributes.aws.lambda.name を選んで = を選択、右側の空白に自分のLambda関数名を入力してクエリ実行ボタンを押します。スパンの下に traceId の一覧が出るのでそこをクリックします。
(正直ここにたどり着くまで迷いました)

AWS X-Ray Trace の検索

2024/12/18 時点でこのBlogを作成している最中に Management Console のレイアウトが変わっていました…
X-Ray トレースの下から、 Application Signals の下に移ったようです。
(レイアウトが変更されてまた迷いました…)
AWS X-Ray Lambda関数のTraceの探し方

ここから、サービスマップのイケてる図や
AWS X-Ray Trace Service Map

本命のトレース詳細が出ます。こんなわかりやすくてかっこいい図を出してくれるんですよ!
AWS X-Ray Trace 詳細

これを見てみると、先程ソースコードで囲ったサブセグメントに 284ms かかったことがわかります。
AWS X-Ray Trace 詳細サブセグメント

これで、これらの分析を利用してパフォーマンスのボトルネックになっている箇所を特定できるようになりました。
X-Ray なしでボトルネックを分析しようとすると、ひたすら CloudWatch などのログから解析という大変な状況から比べると、とても楽に分析できるようなったと感じます。

おわりに

いかがでしたでしょうか。X-Ray をよくわからないからとか、面倒そうだとかの理由で触らないのはもったいなく感じてきたのではないでしょうか。あなたも是非、今日から X-Ray でパフォーマンス分析を!

著者について

ビデオゲームと昼寝と現実逃避をこよなく愛するシステムエンジニア。 好きなAWSサービスは AWS Lambda 。 マネジメントサービスであることだったり、pay-as-you-go の極致であったり、簡単に使えたり、でも使いこなすには奥が深かったりと、AWSの良さと楽しさを最大限に含まれるサービスだと思っています!

兒玉純をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSアプリケーション開発クラウドソリューション運用・監視
シェアする
タイトルとURLをコピーしました