- 公開日
- 最終更新日
【SAM】ログの確認を手早く行う
この記事を共有する

はじめに
パーソル&サーバーワークスの嶋田です。
SAMを使ったアプリケーションのログは、CloudWatch Logsに実行ログが出力されますよね。
デバッグやトラブルシューティングなどでCloudWatch Logsへ確認に行くのは手間がかかり面倒です。
そこで、 sam logs --tail の登場です。
sam logsとは
SAMでデプロイしたアプリケーションのログはCloudWatch Logsに出力されます。
出力されるCloudWatch Logsのログを、CUIのログ上にストリーミングしてくれるコマンドです。
本ブログでは大枠理解までを取り扱いますので、詳細については公式ドキュメントをご確認ください。
使ってみよう
動作確認にあたって、SAMアプリケーションの Hello World Example テンプレートを今回は使います。
公式のチュートリアルを参考に、セットアップ(sam init)します。本ブログではNodejsを使います。
自動作成される、SAMプロジェクトのルート直下にある hello-world/app.mjs を以下のように編集します。
export const lambdaHandler = async (event, context) => { const response = { statusCode: 200, body: JSON.stringify({ message: 'hello world', }) }; console.log(response) return response; };
console.log() をコードに埋め込んで、sam logsで確認したときにわかりやすくします。
編集を終えたら、curlでGETリクエストをAPI Gatewayのエンドポイントに送ってみましょう。
Hello World ExampleテンプレートのAPIを実行する
$ curl https://3yf7n09qxi.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ {"message":"hello world"}
実行ログを確認する
sam logs コマンドを実行すると、API Gatewayの裏で動いているLambdaのログが出力されます。
$ sam logs 2025/02/17/[$LATEST] 2025-02-17T14:16:33.790000 INIT_START Runtime Version: nodejs:20.v51 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:cb6527bfb6726a080a367eca00e49765ca5abd8cd1a17783fbee683313121ece 2025/02/17/[$LATEST] 2025-02-17T14:16:33.910000 START RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c Version: $LATEST 2025/02/17/[$LATEST] 2025-02-17T14:16:33.920000 2025-02-17T14:16:33.920Z 3720ae28-43d0-4781-94dc-2f3434e2bd4c INFO { statusCode: 200, body: '{"message":"hello world"}' } 2025/02/17/[$LATEST] 2025-02-17T14:16:33.982000 END RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c 2025/02/17/[$LATEST] 2025-02-17T14:16:33.982000 REPORT RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c Duration: 71.02 ms Billed Duration: 72 ms Memory Size: 128 MB Max Memory Used: 64 MB Init Duration: 118.15 ms
ここまでの内容でCloudWatch Logsのマネジメントコンソールまで見に行く必要はなくなったでしょう。
しかし毎度コマンドを実行するのは面倒です。
そこで本ブログの主役、 --tail オプションの登場です。
$ sam logs --tail 2025/02/17/[$LATEST] 2025-02-17T14:16:33.790000 INIT_START Runtime Version: nodejs:20.v51 Runtime Version ARN: arn:aws:lambda:ap-northeast-1::runtime:cb6527bfb6726a080a367eca00e49765ca5abd8cd1a17783fbee683313121ece 2025/02/17/[$LATEST] 2025-02-17T14:16:33.910000 START RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c Version: $LATEST 2025/02/17/[$LATEST] 2025-02-17T14:16:33.920000 2025-02-17T14:16:33.920Z 3720ae28-43d0-4781-94dc-2f3434e2bd4c INFO { statusCode: 200, body: '{"message":"hello world"}' } 2025/02/17/[$LATEST] 2025-02-17T14:16:33.982000 END RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c 2025/02/17/[$LATEST] 2025-02-17T14:16:33.982000 REPORT RequestId: 3720ae28-43d0-4781-94dc-2f3434e2bd4c Duration: 71.02 ms Billed Duration: 72 ms Memory Size: 128 MB Max Memory Used: 64 MB Init Duration: 118.15 ms
先ほど見たログが出てきていますね。このままcurlを再度実行してみましょう。
$ curl https://3yf7n09qxi.execute-api.ap-northeast-1.amazonaws.com/Prod/hello/ {"message":"hello world"}
するとどうでしょうか。
sam logs --tailを実行しているログに2回目の実行ログが出ています。
以下のようなログです。
INFO { statusCode: 200, body: '{"message":"hello world"}' }
以上、増分が現在進行形で反映されていることが伺えます。
sam logs --tail を使うことで、タイムリーにSAMアプリケーションのログを表示できます。
最後に sam init で作成したHello World Exampleテンプレートのプロジェクトの削除と、
デプロイしているリソースの削除をお忘れなく!
お疲れさまでした。
この記事は私が書きました
嶋田 龍登
記事一覧インフラからアプリのことまでなんでもやりたい、フルスタックを目指すエンジニア
