SAM CLIのInit時にLambda関数のX-Rayトレースを有効化出来るようになりました

2022.05.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

本日のアップデートでSAM CLIでのX-Ray有効化がサポートされました。

X-Rayの有効化自体はSAMではこれまでも対応されていましたが、今回のアップデートで何が変わったのでしょうか。
本日は使い方などを確認してみましたので紹介します。

SAM CLI v1.48以降で使える

sam init--tracing--no-tracingオプションが追加されました。
SAM CLIのv1.48から利用出来るようになっています。

$ sam --version
SAM CLI, version 1.48.0
$ sam init -h
Usage: sam init [OPTIONS]

:

  --tracing / --no-tracing        Enable AWS X-Ray tracing for your lambda
                                  functions

:

こちらを使うと何が起こるのかを確認してみましょう。

使ってみる

--tracingオプションを指定

$ sam init --tracing

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

:

デプロイされたテンプレートを確認してみましょう。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  hoge

  Sample SAM Template for hoge2

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3
    Tracing: Active

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello-world/
      Handler: app.lambdaHandler
      Runtime: nodejs14.x
      Architectures:
        - x86_64

:

グローバルパラメータのTracingActiveになっていますね。
Tracingパラメータ自体は以前から利用出来ていました。
今回のアップデートでは、sam initで、このTracingパラメータを初期設定する機能を指しているようです。
グローバルパラメータによってこのテンプレート内のFunctionリソースのTracingがActiveとなります。

--no-tracingオプションを指定

次は、--no-tracingオプションを指定してみましょう。

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  hoge

  Sample SAM Template for hoge2

# More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst
Globals:
  Function:
    Timeout: 3


Resources:

--no-tracing指定時はTracingが未設定となります。

ちなみに両方指定出来るのですが、どちらも指定した場合は後勝ちでした。(sam init --tracing --no-tracingであれば設定されない)

指定しない

sam-initの必須パラメータではないので省略が出来ます。
省略時の動作は以下のようになります。

$ sam init

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

:

Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: y
X-Ray will incur an additional cost. View https://aws.amazon.com/xray/pricing/ for more details

Project name [sam-app]:

有効化するか、無効化するかを聞かれますね。
X-Rayを利用することによる追加コストについても注意書きされています。

デプロイする

今回のアップデートとしてここまでで、あとは今までどおりTracingオプションによってデプロイされたリソースのX-Rayが有効化されます。
デプロイしてみましょう。

Lambda関数のX-Rayアクティブトレースが有効化されていますね。

さいごに

なお、API Gatewayについては有効化されていません

API GatewayのX-Rayトレースを有効化したい場合はApi->TracingEnabledもTrueにする必要があります。
CLIのオプションの説明文には以下のようにあるので、Lambda関数に絞った有効化機能のようですね。

Enable AWS X-Ray tracing for your lambda functions

API Gatewayも有効化したい場合

API Gatewayのトレースも有効化したい場合は、上記ブログを参考に以下のようにApi->TracingEnabledを手動で追加すると有効化されます。

:
Globals:
  Function:
    Timeout: 3
    Tracing: Active
  Api:
    TracingEnabled: True
: