3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Lambda Layer と CloudFormation / sam-cli で楽ちん X-Ray

Posted at

はじめに

こちらの Lambda Layer と X-Ray - Qiita という記事で、X-Ray を Lambda Layer で組み込む方法が紹介されています。複数の lambda をデプロイする場合に、個別に X-Ray を組み込まなくても一発で付け外しができるので、けっこういい感じです。

けっこういい感じなんですが、すこしコマンドを叩くのが手間なので、CloudFormation 化できないかな、と思っていたところ AWS SAM CLI で Lambda Layers が ビルドできるようになったよ - Qiita という記事を見つけました。

というわけで、2つの記事の内容をガッチャンコしたら、こんなかんじで

  X-Ray の LambdaLayer を CloudFormation で作れて楽チン!

という記事です。

なお、 X-Ray は、AWS Lambda で使えるトレーシングツールです。X-Ray を使うことで、「Lambda のどの部分で時間がかかっているか?」「どこのリソース (DynamoDB, S3, etc) 呼び出しで時間をくっているか?」を下の図のような感じで確認できるようになります。

sample1

sample2

(図の参照元: AWS X-Ray コンソール: - AWS X-Ray

X-Ray な Lambda Layer のテンプレート定義

用意するのは、template.yaml の他には xray-layer-src/requirements.txt だけ で OK です。

template.yaml

template.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: CloufFormation Template X-Ray lambda layer sample

Resources:
  # X-Ray の Lambda Layer 定義
  XRayLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      Description: Lambda Layer for XRay
      ContentUri: xray-layer-src
      CompatibleRuntimes:
        - python3.8  # ここは利用している Python のランタイムを指定
    Metadata:
      BuildMethod: python3.8  # sam-cli でビルド時に指定が必要

  # XRayLayer を利用するラムダ定義の例
  SomeFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: lambda/src/
      Handler: lambda_handler.lambda_handler
      Runtime: python3.8
      Tracing: Active
      Layers:
        - !Ref XRayLayer  # 作成した Layer の参照

xray-layer-src/requirements.txt

xray-layer-src/requirements.txt
aws-xray-sdk

Lambda Layer に入れるライブラリの指定で、ここでは aws-xray-sdk のみを指定すれば OK です。

これで、X-Ray Lambda Layer のリソースが作成できます。デプロイは通常の sam を使うときと同じです。

sam build
sam deploy

X-Ray を利用する Lambda の例

X-Ray を利用するソースコードは、例えば次のようになります。

lambda-src/lamda_handler.py
import ...

# XRay SDK をインポート。公式ドキュメントにあるように最後にインポートする必要あり
from aws_xray_sdk.core import patch_all

# boto3 などの関連ライブラリにまとめて X-Ray のパッチをあてる
patch_all()

def lambda_handler(event, context):
    ...

参考リンク

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?