AWS X-Ray SDK for Python (beta) を使ってみた
こんにちは、菊池です。
AWS X-Rayはアプリケーションに組み込むことで、そのパフォーマンスを簡単にモニタリングすることができるサービスです。
これまでに、Java、Node.js、C#.NetのSDKが提供されていましたが、今回、Python用のSDKがベータリリースされました。
- Release: AWS X-Ray SDK for Python (beta) on 2017-08-08
- AWS X-Ray SDK for Python | AWS X-Ray Developer Guide
まだベータリリースですが、PythonアプリケーションもAWS X-Rayでモニタリングできるようになります。
試してみた
とういわけで、試してみました。Amazon LinuxのEC2上で、Pythonアプリケーションを実行します。
環境準備
まずは、AWS X-Ray デーモンをインストールします。
$ curl https://s3.dualstack.ap-northeast-1.amazonaws.com/aws-xray-assets.ap-northeast-1/xray-daemon/aws-xray-daemon-2.x.rpm -o /home/ec2-user/xray.rpm $ sudo yum install -y /home/ec2-user/xray.rpm
続いて、SDKのインストールです。アプリケーションで利用するboto3もインストールしておきました。
$ pip install aws-xray-sdk $ pip install boto3
また、EC2のIAMロールに、X-RayにデータをPUTするための権限を付与します。AWSマネージドポリシーに、AWSXrayWriteOnlyAccessというポリシーが用意されていますので、実行環境のIAMロール/ユーザにアタッチしましょう。
また、アプリケーションで利用するSNSの権限も割り当てています。
アプリケーションの実行
実行するアプリケーションを用意します。Amazon SNSのトピックに現在時刻を送信するだけのスクリプトです。AWS X-Ray SDKの利用方法は以下のドキュメントを参考にしています。
ハイライトした行が、X-Rayにデータを通知するために追加した部分です。
import boto3 import datetime from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.core import patch_all patch_all() xray_recorder.begin_segment('snsTest') TOPIC_ARN = "arn:aws:sns:ap-northeast-1:xxxxxxxxxxxx:snsTopic" MSG = datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S") SUBJECT = "Message from X-Ray Test" sns = boto3.client('sns') request = { 'TopicArn': TOPIC_ARN, 'Message' : MSG, 'Subject' : SUBJECT } response = sns.publish(**request) xray_recorder.end_segment()
こちらを実行し、マネジメントコンソールからX-RayのService Mapを確認します。
SNSの呼び出しがモニタリングできています!
まとめ
AWS X-Ray SDK for Pythonを使ってみました。サポートしているライブラリであれば、簡単にアプリケーションの動きをトレースしてくれます。
まだベータリリースですが、個人的によく使うPythonに対応してくれたのは非常に嬉しいです。