こんにちは、広野です。
Amazon API Gateway REST API のロギングにはいくつか種類と方法がありますが、Amazon CloudWatch Logs は他の AWS サービスのログを見るときにも日々アクセスするため、なんだかんだ言うものの慣れているというのと、設定が簡単なので使いやすいです。
ですが、Amazon API Gateway に Amazon CloudWatch Logs に書き込みを許可する IAM ロールはその AWS アカウント共通の設定 なので、そのアカウントで最初に設定すると以後気にしなくなりますし、そもそも最初から設定されていたアカウントで作業する場合は何もすることがありません。そのため、私は新しい AWS アカウントで作業するときに必ずこの設定を忘れます。思い出すタイミングは、Amazon API Gateway のログ設定を有効にしようとしてエラーになるときです。
以下、備忘のため設定方法を書き落としておきます。
設定方法
まずは公式ドキュメントから。
IAM ロールを作った後は、AWS マネジメントコンソールの以下の画面で IAM ロールを登録するだけです。IAM ロールはアカウント共通ですが、この設定はリージョンごとに必要です。
一応、AWS CloudFormation テンプレートにも落とし込んでおいたので、これを一発流すだけでも一通り設定できます。ただし、1リージョン限定です。
AWSTemplateFormatVersion: 2010-09-09
Description: The CloudFormation template that creates an IAM Role and an account setting to push CloudWatch Logs from API Gateway. This setting is shared in your AWS account.
Resources:
# ------------------------------------------------------------#
# API Gateway CloudWatchLogs Invocation Role (IAM)
# ------------------------------------------------------------#
ApigCloudWatchLogsInvocationRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ApigCloudWatchLogsInvocationRole-${AWS::AccountId}
Description: This role allows all API Gateways to invoke CloudWatch Logs.
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- apigateway.amazonaws.com
Action:
- sts:AssumeRole
Path: /
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs
ApigAccountSettingCloudWatchLogs:
Type: AWS::ApiGateway::Account
Properties:
CloudWatchRoleArn: !GetAtt ApigCloudWatchLogsInvocationRole.Arn
DependsOn:
- ApigCloudWatchLogsInvocationRole
まとめ
いかがでしたでしょうか?
このように AWS にはアカウント単位の共通設定がたまにあるので、管理方法も含めて気を付けていきましょう。
本記事が皆様のお役に立てれば幸いです。

