API Gateway のログを Cloudwatch ログで確認する方法

はじめに

本記事ではAWS API Gatewayのログを有効化する方法について説明します。基本的なことですが、2021/07/24時点でAWSのサイトの説明を見ても正しい設定方法に中々いきつけなかったアナタと私のようなAWS初心向けの記事となります。

なぜログを有効にしようとしたか

私の場合は結果的に、このAPI Gatewayのログを確認する必要がなかったのだけど、Lamdaと連携させたときにLamda上のテストでは問題なく200のレスポンスコードが返されているのに、REST APIのリクエストを実際に投げてみたときに200のレスポンスコードが正しく返されなかった。うーん、API Gatewayで何かエラーが見えていれば解決できるかな?と思ったのがログを有効化しようと思った背景です。

API GatewayのログはCloudwatchのロググループにて確認が可能になるようなのだけど、設定がうまくいかない…。というところがスタート地点です。

前提として、API Gatewayは作成済みの状態とします。作成方法は以下の記事の通り。

実施方法

Cloudwatch ログを有効化(失敗する)

API Gatewayのログの有効化はAPIのステージ毎に設定が可能です。とりあえずやってみようの精神で以下のようにステージのログ/トレースタブにあるCloudwatch ログを有効化のチェックボックスにチェックを入れ、保存をしてみる。

すると以下のようなエラー(CloudWatch Logs role ARN must be set in account settings to enable logging)が出るはず。(困った人の検索にも引っかかってくれるよう文字にしておいた)

ロールと言っているけど、roleのARNってどういう意味なんだ?ということで続く。

Cloudwatch ログのロールARNを設定する(出来ない)

色々と調べると設定のメニューからCloudwatch ログにアクセスするためのIAMロールが設定出来るとわかります。ここでAWS初心者の私は困りました。IAMロールって今までそのサービスを利用したら勝手に作ってくれてたんですよね。どうやらAPI Gatewayでは自動でIAMロールを作ってくれたりはしない模様。なのでここに書いてある意味がよく分からず、???で止まっていました。はい、次に行きましょう。

IAMロールを作成する

IAMページを開いてロールのメニューから新しいロールを作成します。

API Gatewayを選択して、次のステップをクリック。

アタッチするポリシーには AmazonAPIGatewayPushToCloudWatchLogs が最初から選択されていますのでこれでOKです。次のステップに。

タグの設定は私の環境で使っていないのでスキップします。必要であれば設定して下さい。

最後のロールの名前と説明を入れて完了となります。

これでIAMロールが作成されました。必要なのはロールのARNなので、作成したIAMロールをクリックして概要に記載されている内容を確認しましょう。概要のページにロールのARNが記載されているので、以下のように書類のアイコンをクリックしてARNをコピーして下さい。

Cloudwatch ログのロールARNを設定する(再)

再びAPI Gatewayの設定ページに移動します。先ほど、コピーしたIAMロールのARNをこちらにコピーして保存をクリックします。

Cloudwatch ログを有効化(再)

今度はステージのページに移動し、ログ/トレースのタブメニューを選択し、改めてCloudWatchのログを有効化してみます。今回はエラーなく設定が出来ているはずです。

これで設定は完了です。

CloudWatch ログの確認

CloudWatchのサービスのページに移動し、ロググループのページに移動して下さい。そこに API-Gateway-Execution-Logs_XXXXXX のロググループが作成されているかと思います。

REST APIを発行した後にロググループの中身を見ていくと、抜粋ですが以下のようなログを確認することが可能です。

これでAPI Gatewayのログを無事に確認することが出来ました。

さいごに

本記事ではAWSのAPI Gatewayのログを有効化する手順について説明致しました。こちらの記事が皆さんのご参考になれば幸いです。またね。