AWS X-Ray SDK for Python (beta) を使ってみた

2017.08.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。

AWS X-Rayはアプリケーションに組み込むことで、そのパフォーマンスを簡単にモニタリングすることができるサービスです。

これまでに、Java、Node.js、C#.NetのSDKが提供されていましたが、今回、Python用のSDKがベータリリースされました。

まだベータリリースですが、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ロール/ユーザにアタッチしましょう。

x-ray-python-001

また、アプリケーションで利用する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を確認します。

x-ray-python-002

SNSの呼び出しがモニタリングできています!

まとめ

AWS X-Ray SDK for Pythonを使ってみました。サポートしているライブラリであれば、簡単にアプリケーションの動きをトレースしてくれます。

まだベータリリースですが、個人的によく使うPythonに対応してくれたのは非常に嬉しいです。