はじめに
前回の記事では、API Gateway から直接 SQS に連携する方法を確認しました。Lambda を挟んでいない分シンプルになったメリットがありますが、Lambda 側でアクセスログを出すことが出来ません。そこで、API Gateway 側でアクセスログを出力することが出来ます。リクエストの Body などを含めた出力もできますので確認していきましょう。
API Gateway の IAM Role 設定
AWS アカウントの中で、リージョン単位で共有される CloudWatch Logs の出力に使う IAM Role の設定が必要です。
API Gateway 用の IAM Role を作成し、ARN を設定しておきます。
API Gateway でログ設定
API Gateway の Stage 上の設定で、[Logs/Tracing] のタブがあります。これで設定を有効にすることで、CloudWatch Logs にアクセスログを出力できます。
また、Method 単位でも有効化が可能です。
CloudWatch Logs の確認
上記の設定で CloudWatch Logs に出力する準備ができました。簡単ですね。実際に API Gateway にアクセスしてログを確認してみましょう。curl で API Gateway にアクセスします。
> curl -s -H 'Content-Type:application/json' \
-X POST \
https://uuy6eahto0.execute-api.ap-northeast-1.amazonaws.com/prod/sqs-queue \
-d '{"test1":"data1", "test2":"data2"}' | jq .
{
"SendMessageResponse": {
"ResponseMetadata": {
"RequestId": "73de415b-ace3-5f5d-9b2d-1b0eadf1aa21"
},
"SendMessageResult": {
"MD5OfMessageAttributes": null,
"MD5OfMessageBody": "58fdfbfc48f868b6b9c50b3e8aa09894",
"MD5OfMessageSystemAttributes": null,
"MessageId": "8f194668-ad74-4207-b4c7-8b6bebdbf35b",
"SequenceNumber": null
}
}
}
API Gateway の ID を調べます。
uuy6eahto0
CloudWatch Logs 上で ID を使って検索してみると、Log Group が引っかかるのでこれをクリックします。
適当に Log Stream を選択します。
API Gateway 上のアクセスログが出力されます。リソースのパスや、Request Body なども確認できます。
この検証を通じてわかったこと
- API Gateway の CloudWatch Logs 用の Role は、リージョンで共有される Role となる。東京リージョンにある複数の API Gateway のうち、1個の API Gateway で設定すれば、他の API Gateway にも設定が反映される。
- API Gateway の Request Body は、標準のアクセスログ出力機能で出力される。出力の仕方をカスタマイズしたい場合は、カスタムアクセスログの設定も可能