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