API Gateway で HTTP API のログ記録を設定する - Amazon API Gateway

API Gateway で HTTP API のログ記録を設定する

ログ記録を有効にして CloudWatch Logs にログを記録することができます。ログ変数を使用して、ログの内容をカスタマイズできます。

HTTP API のログ記録を有効にするには、以下を実行する必要があります。

  1. ログ記録を有効にするために必要なアクセス許可がユーザーにあることを確認します。

  2. CloudWatch Logs ロググループを作成します。

  3. API のステージの CloudWatch Logs ロググループの ARN を指定します。

ログ記録を有効にするアクセス許可

API のログ記録を有効にするには、 ユーザーに次のアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:GetLogEvents", "logs:FilterLogEvents" ], "Resource": "arn:aws:logs:us-east-2:123456789012:log-group:*" }, { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:PutResourcePolicy", "logs:UpdateLogDelivery", "logs:DeleteLogDelivery", "logs:CreateLogGroup", "logs:DescribeResourcePolicies", "logs:GetLogDelivery", "logs:ListLogDeliveries" ], "Resource": "*" } ] }

ロググループを作成し、HTTP API のログ記録を有効にする

ロググループを作成し、AWS Management Console または AWS CLI を使用してアクセスログ記録を有効化できます。

AWS Management Console
  1. ロググループを作成します。

    コンソールを使用してロググループを作成する方法については、Amazon CloudWatch Logs ユーザーガイドの「ロググループとログストリームの操作」を参照してください。

  2. https://console.aws.amazon.com/apigateway で API Gateway コンソールにサインインします。

  3. HTTP API を選択します。

  4. プライマリナビゲーションパネルの [Monitor] (モニタリング) タブで、[Logging] (ログ記録) を選択します。

  5. ログ記録を有効にするステージを選択し、[Select] (選択) を選択します。

  6. [Edit] (編集) を選択してアクセスログを有効にします。

  7. [Access logging] (アクセスのログ記録) を有効にし、CloudWatch Logs を入力して、ログ形式を選択します。

  8. [Save] を選択します。

AWS CLI

以下の AWS CLI コマンドはロググループを作成します。

aws logs create-log-group --log-group-name my-log-group

ログ記録を有効にするには、ロググループの Amazon リソースネーム (ARN) が必要です。ARN 形式は、arn:aws:logs:region:account-id:log-group:log-group-name です。

次の AWS CLI コマンドは、HTTP API の $default ステージのログ記録を有効にします。

aws apigatewayv2 update-stage --api-id abcdef \ --stage-name '$default' \ --access-log-settings '{"DestinationArn": "arn:aws:logs:region:account-id:log-group:log-group-name", "Format": "$context.identity.sourceIp - - [$context.requestTime] \"$context.httpMethod $context.routeKey $context.protocol\" $context.status $context.responseLength $context.requestId"}'

ログ形式の例

いくつかの一般的なアクセスログ形式の例は API Gateway コンソールで使用できます。それらの例を以下に示します。

  • CLF (Common Log Format):

    $context.identity.sourceIp - - [$context.requestTime] "$context.httpMethod $context.routeKey $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  • JSON:

    { "requestId":"$context.requestId", "ip": "$context.identity.sourceIp", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod","routeKey":"$context.routeKey", "status":"$context.status","protocol":"$context.protocol", "responseLength":"$context.responseLength", "extendedRequestId": "$context.extendedRequestId" }
  • XML:

    <request id="$context.requestId"> <ip>$context.identity.sourceIp</ip> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <routeKey>$context.routeKey</routeKey> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
  • CSV (カンマ区切り値):

    $context.identity.sourceIp,$context.requestTime,$context.httpMethod,$context.routeKey,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId