のべラボ.blog

Tech Blog | AWS や サーバーレスやコンテナ などなど

AWS SAM で 初期化時に AWS X-Ray のトレースの有効化を指定できるようになった

AWS SAM の CLI では、sam init というコマンドで SAM で使用するリソースを対話形式で指定して取得できますが、その対話の中に AWS Lambda と Amazon API Gateway に対して AWS X-Ray のトレース取得が指定できるようになったようです。

また sam init 時に --tracing のオプションを指定して AWS X-Ray の有効化を指定することもできます。

今回は、対話形式での指定について、Cloud9 の環境を使って試していきます。

なお、この記事の内容は 2022 年 10 月 10日 時点に確認したものです。

まずは Cloud9 のターミナルから AWS SAM のバージョンを確認してみます。

$ sam --version
SAM CLI, version 1.57.0

1.57.0 というバージョンが表示されました。

私が 少し前に使った Cloud9 の SAM CLI のバージョンは 1.33.0 だったので、なんか一気に新しくなった気がします。

次に 初期化します。なお今回は、Runtime に python3.7 を指定します。

$ sam init --runtime python3.7

この後、対話形式でいろいろと選択していきます。 まず、テンプレートについて選択します。今回は AWS のテンプレートを選択します。

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

次にアプリケーションのテンプレートを選択します。今回は Hello World レベルのシンプルなものを選択します。

Choose an AWS Quick Start application template
        1 - Hello World Example
        2 - Infrastructure event management
        3 - Multi-step workflow
Template: 1

そして次に、AWS X-Ray の有効化をするか、否かを選択します。今回は、有効化するため y を入力します。

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

最後に SAM のプロジェクト名の入力を求められます。今回はデフォルトの sam-app でよいので、そのまま Enter キーを押下します。

Project name [sam-app]: 

これにより、プロジェクト名のフォルダ、つまり今回だと sam-app というフォルダに必要なリソースが保存されます。

このフォルダの直下にある、template.yaml というファイルを開いて内容を確認してみます。

これは、SAM でデプロイを行う時に使用する SAM テンプレートファイルです。

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

sam init 時に X-Ray の有効化を指定したので、SAM テンプレートの Globals セクションをみると、Lambda関数に対する設定である Function のプロパティで Tracing: Active が、Amazon API GatewayAPI に対する設定である Api のプロパティで、TracingEnabled: True が設定されているのがわかります。

では、SAM CLI のコマンドでビルドしてデプロイしてみましょう。

まず、プロジェクト名のフォルダに移動して sam build を実行します。

$ cd sam-app/
$ sam build

そしてデプロイですが、今回は sam deploy --guided でデプロイを行います。

$ sam deploy --guided

sam deploy --guided 実行によりデプロイに関する入力が求められます。

次は、その入力例です。

Setting default arguments for 'sam deploy'
        =========================================
        Stack Name [sam-app]: 
        AWS Region [ap-northeast-1]: 
        #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
        Confirm changes before deploy [y/N]: 
        #SAM needs permission to be able to create roles to connect to the resources in your template
        Allow SAM CLI IAM role creation [Y/n]: 
        #Preserves the state of previously provisioned resources when an operation fails
        Disable rollback [y/N]: 
        HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
        Save arguments to configuration file [Y/n]: 
        SAM configuration file [samconfig.toml]: 
        SAM configuration environment [default]: 

デプロイが終了すると、SAM テンプレートの Outputs セクションで指定した内容が表示されます。

その中の、API GatewayAPI のエンドポイントを見つけます。下記は例です。

Key                 HelloWorldApi                                                                            
Description         API Gateway endpoint URL for Prod stage for Hello World function                         
Value               https://qtm166m8r2.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/                 

この Value で表示されているURLをコピーして Webブラウザでアクセスしてみると、次のようなメッセージが表示されます。

{"message": "hello world"}

これは、作成した Lambda 関数で リターンしているメッセージですので、API GatewayAPI から Lambda 関数を呼び出せたことを確認できます。

また、この呼び出しにより、AWS X-Ray のトレースも出力されているはずです。

AWS マネジメントコンソールで AWS X-Ray のコンソールを開き、左側のメニューから [トレース] を選択します。

次のように、 API Gateway と Lambda 関数のトレースが表示されることを確認します。

https://cdn-ak.f.st-hatena.com/images/fotolife/n/neob/20221010/20221010172317.png

sam init の対話形式やオプションで AWS X-Ray の有効化を指定できるようになったことで、後でプロパティを書き足す必要がなくなりました。

私は、X-Ray をよく使うのでありがたいです。

/* -----codeの行番号----- */