API Gateway のログを CloudWatch ログで確認する方法
目次
はじめに
AWS API Gateway を Lambda と組み合わせて REST API を構築する際、Lambda 単体のテストでは正常に 200 レスポンスが返るのに、実際の API リクエストでは期待通りのレスポンスが返らないケースがあります。こういった問題を切り分けるには、API Gateway 側のログを CloudWatch に出力して確認するのが有効です。
本記事では API Gateway の CloudWatch ログを有効化する手順を解説します。設定には IAM ロールの作成が必要で、手順を知らないと途中でエラーが発生して詰まりがちです。同じところで躓いた方の参考になれば幸いです。
前提として、API Gateway は作成済みの状態とします。作成方法は以下の記事をご参照ください。
CloudWatch ログ有効化の手順
ステップ1:CloudWatch ログを有効化する(エラーが発生)
API Gateway のログはステージごとに設定します。ステージの「ログ / トレース」タブを開き、「CloudWatch ログを有効化」のチェックボックスをオンにして保存してみましょう。

すると、以下のエラーメッセージが表示されます。
CloudWatch Logs role ARN must be set in account settings to enable logging

このエラーは、CloudWatch に書き込む権限を持つ IAM ロールが API Gateway に紐付けられていないことが原因です。
ステップ2:IAM ロールが必要な理由
API Gateway の「設定」メニューを開くと、「CloudWatch ログのロール ARN」を入力するフィールドがあります。他のサービスでは IAM ロールが自動作成されることもありますが、API Gateway の CloudWatch 連携では手動でロールを作成し、ARN を設定する必要があります。

ステップ3:IAM ロールを作成する
IAM のコンソールを開き、「ロール」メニューから新しいロールを作成します。

信頼されたエンティティとして 「API Gateway」 を選択し、次のステップへ進みます。

アタッチするポリシーには AmazonAPIGatewayPushToCloudWatchLogs が最初から選択されています。このポリシーで API Gateway から CloudWatch への書き込み権限が付与されるため、変更せずにそのまま次のステップへ進みます。

ロール名と説明を入力してロールの作成を完了します。

ロールが作成されたら、作成したロールをクリックして詳細画面を開きます。概要欄に表示されている ロールの ARN をコピーしておきます。

ステップ4:API Gateway にロール ARN を設定する
API Gateway のコンソールに戻り、「設定」メニューの「CloudWatch ログのロール ARN」フィールドにコピーした ARN を貼り付けて保存します。

ステップ5:CloudWatch ログを再度有効化する
ステージの「ログ / トレース」タブに戻り、改めて CloudWatch ログを有効化して保存します。今回はエラーが発生せず、正常に設定が完了します。

CloudWatch でログを確認する
CloudWatch のコンソールを開き、「ロググループ」に移動します。API-Gateway-Execution-Logs_XXXXXX という名前のロググループが作成されていれば設定は完了です。

API リクエストを送信した後にロググループを確認すると、リクエストの詳細や処理の流れを示すログが記録されています。

まとめ:API Gateway の CloudWatch ログ有効化で得た知見
本記事では API Gateway のログを CloudWatch で確認できるようにする手順を解説しました。
- API Gateway の CloudWatch ログ有効化には、事前に専用の IAM ロール(AmazonAPIGatewayPushToCloudWatchLogs ポリシー付き)の作成が必要
- IAM ロール作成後、API Gateway の「設定」画面でロール ARN を登録してから、ステージ側の CloudWatch ログを有効化する順序が重要
- 設定完了後は CloudWatch の「ロググループ」に API-Gateway-Execution-Logs_XXXXXX が自動作成され、リクエストの実行ログを確認できる
- Lambda と API Gateway を組み合わせたデバッグの際に、ログを見ることでエラー箇所の切り分けが容易になる





ディスカッション
コメント一覧
まだ、コメントがありません