Help us understand the problem. What is going on with this article?

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

はじめに

やることは、とりあえず 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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした