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 Gateway のAPI に対する設定である 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 Gateway の API のエンドポイントを見つけます。下記は例です。
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 Gateway の API から Lambda 関数を呼び出せたことを確認できます。
また、この呼び出しにより、AWS X-Ray のトレースも出力されているはずです。
AWS マネジメントコンソールで AWS X-Ray のコンソールを開き、左側のメニューから [トレース] を選択します。
次のように、 API Gateway と Lambda 関数のトレースが表示されることを確認します。
sam init の対話形式やオプションで AWS X-Ray の有効化を指定できるようになったことで、後でプロパティを書き足す必要がなくなりました。
私は、X-Ray をよく使うのでありがたいです。