この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
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に対応してくれたのは非常に嬉しいです。