はじめに
やることは、とりあえず AWS lambda で X-Ray を使ってみるところまで。
「こういうときはこうするんだよ」みたいなお役立ち情報はほぼありません。
言語は Python3.6 を使用。
最低限の動作
設定
Lambdaの画面で「アクティブトレースを有効にします」というチェックボックスをON(チェック)にして保存するだけ。
実行
Lambdaソースは Python 3.6
のデフォルト。statusCodeとメッセージを返すだけの処理です。
テストを実行し、X-Ray のトレースを表示
ボタンから、X-Ray の画面に遷移。
以下のようなトレース情報が表示されます。
Lambdaから呼び出すサービスもトレースしたい
これだけだと、ただ開始~終了を計測しているだけですね。
X-Rayの強みはAWSのサービスも計測できること。
というわけでそれもやってみます。
X-Ray SDK をダウンロード。
lambda環境のデフォルトのままでは実現できないようです。
X-Ray SDK をソースと一緒に置く必要があります。
とりあえずローカルにダウンロード。下記コマンドで今いるフォルダにダウンロードされます。
$ pip install aws-xray-sdk -t .
Lambda function ソース
LambdaからSNSをpublishするようにします。
あと sdk の patch を適用する必要があるようです。そのためのSDK同梱。
import json
import boto3
# パッチ適用
from aws_xray_sdk.core import patch
patch(['boto3'])
def lambda_handler(event, context):
# SNS を Publish
client = boto3.client("sns", region_name="ap-northeast-1")
request = {
'TopicArn': "<SNS Topic の ARN>",
'Message': "test message",
'Subject': "test subject"
}
response = client.publish(**request)
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
まとめてzip
ダウンロードしたSDKは中を見ると色々入ってますが、以下の3種だけでいいようです。
使い方次第では他のライブラリも必要になるかもしれません。
- awsxray_sdk
- jsonpickle
- wrapt
ソースをアップロード
Lambdaの編集画面で、コードエントリタイプを「.zipファイルをアップロード」に変えて、SDK(ライブラリ)と lambda_functionソースファイルをまとめた先ほどのzipを選択。
保存して、こうなっていればOK。