AWS Lambdaの処理時間をAWS X-Rayを用い計測する。
Lambadaでの処理時間を計測するためにAWS X-Rayを使用したときの備忘録です。間違いがありましたら、ご指摘ください。
(1) Lambda関数作成と事前設定
今回、処理時間を計測するLambda関数を作成します。
①AWS LambdaページにてTestSample関数を作成。(Python使用)
② トレースの有効化する
Lambda関数を選択し「AWS X-Ray」のアクティブトレースにチェックを入れる。
③Lambda関数のIAMロールに「AWSXrayWriteOnlyAccess」を付与する。
処理時間を計測するサービスのAWS-Xrayを使用するためです。
上記②の画像にあるLambda関数ページ内の実行ロール箇所にある、
「IAMコンソールでTestSample***ロール表示します」をクリックする。
IAMロールのページに遷移し、下記のように「AWSXrayWriteOnlyAccess」を
付与します。
(2) Lambda関数の作成
①処理時間を計測するために必要なSDKを取得
今回は、AmazonLinux環境(EC2)上でSDKを取得しました。
※各コマンドの応答結果は省略しました。
# pipのインストール
[ec2-user@ip-10-0-0-155 ~]$ sudo easy_install pip
# pipのupgrade
[ec2-user@ip-10-0-0-155 ~]$ sudo easy_install --upgrade pip
# pipコマンドのパスを移動
[ec2-user@ip-10-0-0-155 ~]$ sudo cp /usr/bin/pip /usr/sbin/
# X-Ray SDK をダウンロードする
# SDKがコマンド実行ディレクトリ配下に取得できるため
# 適当にディレクリを作成してから実行します。
[ec2-user@ip-10-0-0-155 tmp]$ pip install aws-xray-sdk -t .
⇒上記にてsdkを取得した中で、下記の3ディレクトリを使用します。
•awsxray_sdk
•jsonpickle
•wrapt
これらのフォルダ一式をLambda関数を作成するディレクトリに移動します。
※WindowsやMacといったローカル環境のPC上で実施してもよいですし、
このままEC2インスタンス上で実施しても構いません。
②Lambda実行関数を作成
今回、処理時間を作成する実行関数(lambda_function.py)は下記とします。
(Lambdaでデフォルト生成されるpython関数です)
デフォルト生成される関数に対し、X-Rayを使用するために組み込んでいます。
import json
import boto3
from aws_xray_sdk.core import patch
patch(['boto3'])
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
③SDKを組み込んだソースコード一式を作成
①で取得したSDKと②で作成した関数をまとめます。
以下のようなフォルダ一式を作成、zip化します。
TestSample.zip内に以下のフォルダ/ファイルを格納
・awsxray_sdk/
・jsonpickle/
・wrapt/
・lambda_function.py
※フォルダ生成時、上記の4つのフォルダ/ファイル群に対してzip化します。
この4つが格納された上位のフォルダに対し、zip化しないようにしてください。
## (3) Lambda関数にzip圧縮したソースコードを登録
関数コードのコードエントリタイプを「.zipファイルをアップロード」を選択、
(2)で作成したzipファイルをuploadします。
<img width="939" alt="Lambda作成4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/c0916136-7afc-f153-82ff-ab9c582b8c01.png">
upload後、Lambda関数のコードが反映されます。
<img width="935" alt="Lambda作成5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/e20dd878-178e-14b7-150a-ee20436d0ea8.png">
## (4)Lambda関数の処理時間計測をテスト
Lambda関数の右上にある"テスト"をクリックし、デフォルトままで、適当にイベント名を付けます。その後、テストを実行します。
<img width="940" alt="Lambda作成6.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/f727a89c-28e3-fadf-72a1-c45e248c4622.png">
しばらくすると、テストが完了します。以下のようなログが出力されます。
<img width="935" alt="Lambda作成7.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/472e3c16-3226-af03-4419-ffd0cdaae2aa.png">
ここで、ログ出力の中にXRAYのTraceIdが表示されていることがわかります。このIDを(5)で使用します。
## (5)Lambda関数の処理時間を確認
AWSのサービス一覧より、AWS X-Rayのページに遷移します。そして、(4)で確認したXRAYのTraceIdに該当するTraceを選択します。
<img width="942" alt="Lambda作成8.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/39db354a-e8c8-07a8-5275-ce16ac39be76.png">
⇒Lambda関数での処理時間の結果がTraceされていることがわかります。
Lambda関数は、初回実行時には時間を要します。
そのことが処理時間の結果からも見て取れます。
以上で、Lambda関数の処理時間の計測方法となります。