LoginSignup
5
4

More than 3 years have passed since last update.

[AWS] Lambda function で X-Ray を使ってみる。

Posted at

はじめに

やることは、とりあえず AWS lambda で X-Ray を使ってみるところまで。
「こういうときはこうするんだよ」みたいなお役立ち情報はほぼありません。
言語は Python3.6 を使用。

最低限の動作

設定

Lambdaの画面で「アクティブトレースを有効にします」というチェックボックスをON(チェック)にして保存するだけ。
2019-06-19 11_04_42-Window.jpg

実行

Lambdaソースは Python 3.6 のデフォルト。statusCodeとメッセージを返すだけの処理です。
テストを実行し、X-Ray のトレースを表示 ボタンから、X-Ray の画面に遷移。
以下のようなトレース情報が表示されます。
2019-06-19 11_06_00-Window.jpg
2019-06-19 11_06_14-Window.jpg
2019-06-19 11_09_58-Window.jpg

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同梱。

lambda_function.py
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

functionのソースとSDKをまとめてzip化。
2019-06-19 11_51_45-タスク ビュー.jpg

ダウンロードしたSDKは中を見ると色々入ってますが、以下の3種だけでいいようです。
使い方次第では他のライブラリも必要になるかもしれません。

  • awsxray_sdk
  • jsonpickle
  • wrapt

ソースをアップロード

Lambdaの編集画面で、コードエントリタイプを「.zipファイルをアップロード」に変えて、SDK(ライブラリ)と lambda_functionソースファイルをまとめた先ほどのzipを選択。
保存して、こうなっていればOK。
2019-06-19 13_16_23-タスク ビュー.png

実行

SNSのトレース情報も計測されるようになりました。
2019-06-19 11_16_35-Window.jpg
2019-06-19 11_16_56-Window.jpg

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4