![見出し画像](https://assets.st-note.com/production/uploads/images/84710194/rectangle_large_type_2_19fc4aae71d6e5026f662f1726a3af7e.png?width=1200)
AWS X-rayを使ってみた
業務で利用しているAWS(Amazon Web Service)の資格勉強や業務で話題となったサービスの備忘も兼ねて、まとめていきたいと思います。
今回は、「X-ray」というサービスを利用してみたので、内容を備忘として残しておきたいと思います。※スライドの切り抜き多めです。
X-rayとは
![](https://assets.st-note.com/img/1660470651237-MG6JDFbukV.png?width=1200)
簡単に言えば、デバッグツールのマネージドサービスってとこでしょうか。
X-rayで何ができる?
![](https://assets.st-note.com/img/1660471079546-QyGuGuR3JC.png?width=1200)
![](https://assets.st-note.com/img/1660471125126-PVZrbd7pVm.png?width=1200)
他にもアナリティクス等の機能があり、応答時間の分布や時系列アクティビティも確認することができ、統計的な情報も把握できることができます。
X-rayを使ってやってみたこと
![](https://assets.st-note.com/img/1660472443440-rNxDt4uknN.png?width=1200)
上の図のようにLambdaを用いて、WebAPIを構築し、X-rayでどのように表示されるのか確認してみました。
事前準備
まずはAPI Gatewayの設定から・・・
![](https://assets.st-note.com/img/1660472939296-BvOLJkR2uu.png?width=1200)
今回は、上図のように「KMSTestIn」というAPIで「https://ドメイン/kms/in」というWebAPIを作成したいと思います。
![](https://assets.st-note.com/img/1660473121368-nvigcX5SeL.png?width=1200)
そして、このAPI Gatewayから「KMSTest_in_python」という名前のLambda関数を呼び出し、実際のAPIの処理を行なっていきます。
![](https://assets.st-note.com/img/1660473429514-jZE63XiA23.png?width=1200)
ここで、X-rayでトレースするために、サイドバーのステージからX-Rayトレースの有効化を設定します。これで、API Gatewayの設定はOK!
次にLambdaの設定・・・
![](https://assets.st-note.com/img/1660473998105-jmntZrg1tM.png?width=1200)
KMSTest_in_pythonというLambda関数を作成していきます。
![](https://assets.st-note.com/img/1660474068101-SauhBp0e5V.png?width=1200)
![](https://assets.st-note.com/img/1660474067361-kWeD8CW3co.png?width=1200)
まずは、上の図のように、X-rayの設定から実施します。
設定→モニタリングおよび運用ツール→編集で、X-rayを有効にします。
![](https://assets.st-note.com/img/1660474303393-qengWx2Qtr.png?width=1200)
実際にLambda関数の中身を作成していきます。
今回はDynamoDBの中身を返却する関数を作成します。上図の左側がメインとなる関数で、右側が実際にDynamoDBから中身を取得するものとなっております。詳細は省きますが、右側のLambda関数で「KMSTestTable」という名前のテーブルをフルスキャンし、その情報をメインの関数に渡し、クライアントに返却しています。
※KMSのテストを行ったテーブルを流用しておりますので、テーブル名が「KMSTestTable」となっていますが、気にしないでください、、、笑
![](https://assets.st-note.com/img/1660474601282-iMkrgqxdIx.png?width=1200)
ここで、X-rayでトレースするための追加設定をします。
後続のDynamoDBへのアクセスまでしっかりトレースを行うために、X-rayのSDKを仕込みます。このSDKはローカル環境において、pipコマンドを用いてダウンロードし、レイヤーに追加しました。
※ローカルに環境がなくとも、おそらくCloudShellというAWSのマネージドサービスでダウンロードできると思います。CloudShellの備忘録は後日実施したいと思います。
そして最後に、DynamoDBの設定・・・
![](https://assets.st-note.com/img/1660475109927-v0l34KgEAs.png?width=1200)
DynamoDBには特に設定は不要で、Lambdaから参照される「KMSTestTable」を作成し、データを仕込んでおくのみです!
結果
![](https://assets.st-note.com/img/1660475332094-iZBTjwVX1N.png?width=1200)
今回はPOSTのWebAPIを叩くために、Chromeの拡張機能である「Talend API Tester」(無料版)というツールを用います。
このツールを用いて、作成したWebAPIにアクセスすると、200OKとなり、DynamoDBに仕込んだデータが返却されているのが分かります。WebAPIの作成としては問題なさそうです。
実際に、このアクセスがX-rayでどのように見えるか確認していきます。
![](https://assets.st-note.com/img/1660475671949-EkRHNmYFBy.png?width=1200)
まずは、Service Mapからですが、クライアントからのアクセスが、API Gateway → Lambda → DynamoDBに流れているのが分かります。また、各機能でどのくらいの時間が掛かっているかも一目瞭然です。
![](https://assets.st-note.com/img/1660475872927-f7F1tvlWDA.png?width=1200)
![](https://assets.st-note.com/img/1660475873709-gXQSdnqcmf.png?width=1200)
次にトレースです。実際のアクセスに対し、httpステータスとTATを見て取れます。(上図1枚目)
そして、詳細を確認してみると、各AWSリソースでの詳細を確認することができます。特にLambdaの「KMSTest_in_python」では、Lambda処理の詳細を確認することができます。「Initialization」という項目は、コールドスタート時のみに表示される項目で、このアクセスがコールドスタートだったことが分かります。このAPIの処理にトータルで1.4秒掛かっていましたが、ウォームスタートであれば、もっと短く処理できたと想像できます。
まとめ
今回は、DynamoDBの中身を返却するWebAPIをAPI Gateway+Lambdaというマネージドサービスを用いて、X-rayの中身を見てみました。実際に、デバック時にX-rayを見て、原因を探ったり、処理の傾向を確認しています。
非常に便利な機能ですので、この記事が誰かのお役に立てれば、幸いです。
認識誤りや指摘などあれば、コメントお願いします。
参考
この記事が気に入ったらサポートをしてみませんか?