ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

【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テンプレートのプロジェクトの削除と、
デプロイしているリソースの削除をお忘れなく!

お疲れさまでした。

この記事は私が書きました

嶋田 龍登

記事一覧

インフラからアプリのことまでなんでもやりたい、フルスタックを目指すエンジニア

嶋田 龍登

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。