BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】API Gateway上のAPIからの実行ログをCloudWatchに出力する方法

こんにちは!
BFT名古屋支店の、佐野です。

12月に入り、間もなく第三週に入ろうとしています。
間も無く年末であるはずなのに、心はまだまだそういった用意ができていません。
来年の話をすると鬼が笑うと言いますが、今の所その来年がなかなか遠いものなんじゃないかと感じています。

さて今回はAPI Gatewayで作成したAPIの実行ログを、CloudWatchに出力する方法についてお送りします。
ただし今回は、さして複雑な手順があると言う訳ではなく、ログを出力するために必要な設定を行なう場所についての説明が主となります。


はじめに

今回この記事をお送りするのは、筆者の苦い経験があったからです。
というのも、筆者も業務の上でAPIのログを出力する必要があったのですが、今からお送りする方法にたどり着くまでにそこそこの時間を使ってしまったからになります。
たったほんの少し行えばいい手順でも、分からなったり忘れたりしてしまうと、ハマるポイントになってしまう……
ということで、同じようなことになってしまうケースを少しでも減らしたく、極簡単な内容となってしまいますが、記事として残そうと思った次第です。


APIの実行ログをCloudWatchに出力するためのポイント

APIの実行ログをCloudWatchに出力するためのポイントは以下の通りです。

  • API GatewayがCloudWatchにアクセスするための権限を持つIAMロールを用意する

  • API GatewayにIAMロールを追加する

  • APIのCloudWatch設定で「CloudWatchログを有効化」する

この3点を行なえば、CloudWatchに実行ログが出力される事になります。
他のAWSサービスのログ出力の方法と比べるとかなり簡単ですが、1つでも抜けてしまうとCloudWatchログ出力ができなくなってしまいます。

では実際に設定できる箇所をそれぞれ見ていきましょう。


API GatewayがCloudWatchにアクセスするための権限を持つIAMロールを用意する

他のAWSサービスと同じように、API GatewayにもCloudWatchにログを書き込む権限、IAMロールが必要です。
そのため、API Gateway用のIAMロールが無ければ新しく作成し、既にあるならばそのロールにCloudWatchにログを書き込むためのアクセス権限ポリシーを組み込むことになります。
IAMロールの作成方法については他の記事でも紹介しておりますので、今回は割愛させていただきます。

今回必要なアクセス権限は以下の1つのみです。

  • AmazonAPIGatewayPushToCloudWatchLogs

これを含んだIAMロールをAPI Gatewayに追加することで、API GatewayがCloudWatchへの書き込み権限を持つようになります。
後述しますが、API GatewayにIAMロールを追加するにはロールARNが必要となる為、作成・変更したIAMロールのロールARNを控えておきましょう。
ロールARNは、以下の図のようにIAMロールの設定画面で確認することができます。
(IAMコンソール内のメニューから「ロール」を選択 → ロールARNを確認したいIAMロール名を選択)

f:id:bftnagoya:20201210224812p:plain


API GatewayにIAMロールを追加する

筆者としては、ここが一番引っ掛かるところだと思っています。
API Gatewayには「API Gateway全体の設定」と「APIの設定」という2つの設定項目があるのですが、今回は「API Gateway全体の設定」側を操作します。
ただしこの設定はひとつでもAPIを作成していないと見ることができないため、今回は1つ以上の何らかのAPIが作成されていることを前提とします。

まずAWSマネジメントコンソールから「API Gateway」を選択し、既に作成されているAPI名を選択して設定画面に入ります。
その後メニューの最下部にある「設定」を選択します。(APIの方の設定ではないことに注意)

f:id:bftnagoya:20201210224819p:plain

以下のようにロールARNを入力してIAMロールを追加できる画面となるので、API Gateway用のIAMロールのロールARNを入力します。
その後「保存」を選択すれば、IAMロールの追加は完了となります。

f:id:bftnagoya:20201210224816p:plain

この後にAPIのCloudWatch設定でCloudWatchログを有効化しますが、IAMロールを追加する前にステージをデプロイしているAPIがある場合、そのAPIについては一度再デプロイを行なわないと、IAMロールが適用されていない状態となってしまいます。
(筆者はここで大分引っ掛かりました)


APIのCloudWatch設定で「CloudWatchログを有効化」する

API Gatewayで作成した、実行ログをCloudWatchで出力したいAPIがデプロイされ、ステージエディターで見れるようになっている状態で、そのAPIステージ名を選択してステージエディターに入ります。
さらに「ログ/トレース」を選択し、CloudWatch設定内の「CloudWatchログを有効化」チェックボックスにチェックを入れることで、CloudWatchに実行ログが出力される状態となります。

f:id:bftnagoya:20201210224822p:plain

またアクセスログについても、図の下部分にある「アクセスログの有効化」チェックボックスにチェックを入れることで、CloudWatchにログを出力することができます。

ちなみにCloudWatchに出力される実行ログは「API-Gateway-Execution-Logs_(api-id)/(APIステージ名)」というロググループ名で格納されます。


最後に

今回は簡単でしたが、API Gateway上のAPIの実行ログをCloudWatchを出力するために必要なポイントを解説しました。
3点のポイントを抑えれば、AWSAPIのログは簡単に取得できると言えます。
ただAPI GatewayにIAMロールを追加してから、一度APIをデプロイし直す必要があることなど、ちょっとした引っ掛かりポイントもあるので、注意が必要です。
今回のケースと同じようにAPI GatewayからCloudWatchにログを出力したい時にハマってしまった場合は、この記事を参考にして頂けると嬉しく思います。