API Gatewayデプロイステージのアクセスログ設定の確認

API Gatewayのデプロイを公開するステージに、アクセスログを設定してください。

説明

aws_api_gateway_deploymentはREST API構成のスナップショットです。実際のリクエストのアクセスログは、そのデプロイを参照するaws_api_gateway_stageで設定します。デプロイの説明を記入するだけでは、アクセスログは有効になりません。

必要なアクセスログがないままAPIを公開すると、リクエストの記録が残らず、運用上の問題をデプロイと関連付けて調べにくくなります。

想定される影響

  • 公開中のAPIへの呼び出し記録が得られないおそれがあります。
  • デプロイの変更とステージの動作を関連付けるのに時間がかかる場合があります。
  • 障害や不正利用の調査が難しくなります。

対処方法

  • リクエストを処理するaws_api_gateway_stageにaccess_log_settingsを設定してください。
  • ステージのデプロイ参照、ログの保存先と形式を確認し、配信権限と保持期間を構成してください。
  • デプロイ用テンプレートにログ設定を含め、公開後の配信を確認してください。

例

現在のプロバイダーでステージを別途管理する構成の抜粋です。REST API、メソッド、統合、デプロイの依存関係、ロググループと配信権限は省略しています。

変更前

hcl
resource "aws_api_gateway_deployment" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
}

resource "aws_api_gateway_stage" "example" {
  deployment_id = aws_api_gateway_deployment.example.id
  rest_api_id   = aws_api_gateway_rest_api.example.id
  stage_name    = "example"
}

変更後

hcl
resource "aws_api_gateway_deployment" "example" {
  rest_api_id = aws_api_gateway_rest_api.example.id
}

resource "aws_api_gateway_stage" "example" {
  deployment_id = aws_api_gateway_deployment.example.id
  rest_api_id   = aws_api_gateway_rest_api.example.id
  stage_name    = "example"

  access_log_settings {
    destination_arn = aws_cloudwatch_log_group.example.arn
    format = jsonencode({ requestId = "$context.requestId", status = "$context.status" })
  }
}

説明:

  • 変更前: デプロイとステージは関連付けられていますが、このステージのアクセスログ配信設定がありません。他のログ収集も別途確認してください。
  • 変更後: ステージにアクセスログを設定しています。デプロイ後に実際のリクエスト記録がロググループへ届くことを確認してください。

参考資料