[AWS Lambda] 処理時間計測方法(AWS X-Rayの使用） 

# AWS Lambdaの処理時間をAWS X-Rayを用い計測する。
　Lambadaでの処理時間を計測するためにAWS X-Rayを使用したときの備忘録です。間違いがありましたら、ご指摘ください。

## (1) Lambda関数作成と事前設定
　今回、処理時間を計測するLambda関数を作成します。
### ①AWS LambdaページにてTestSample関数を作成。(Python使用)
　<img width="940" alt="Lambda作成1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/e08c1011-44c7-7da3-a71f-320c16dd3f59.png">
### ② トレースの有効化する
　　Lambda関数を選択し「AWS X-Ray」のアクティブトレースにチェックを入れる。
<img width="934" alt="Lambda作成3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/6579f111-769b-c583-694a-8b8d5669bab8.png">
### ③Lambda関数のIAMロールに「AWSXrayWriteOnlyAccess」を付与する。
　　処理時間を計測するサービスのAWS-Xrayを使用するためです。
　　上記②の画像にあるLambda関数ページ内の実行ロール箇所にある、
　「IAMコンソールでTestSample***ロール表示します」をクリックする。
　　IAMロールのページに遷移し、下記のように「AWSXrayWriteOnlyAccess」を
　付与します。
　<img width="942" alt="Lambda作成2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/513502/8fcb057c-bc34-02c6-8252-fca56f6fb31a.png">
　
## (2) Lambda関数の作成
### ①処理時間を計測するために必要なSDKを取得
　今回は、AmazonLinux環境(EC2)上でSDKを取得しました。
　※各コマンドの応答結果は省略しました。

```sh

# 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を使用するために組み込んでいます。

```python
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関数の処理時間の計測方法となります。