API GatewayのCloudWatchログ配信設定の確認

API Gatewayで使うログの種類に合わせて、CloudWatchへの配信と保持期間を確認してください。

説明

REST APIの実行ログを有効にすると、API GatewayはAPI-Gateway-Execution-Logs_{rest-api-id}/{stage_name}という名前のロググループを使います。Terraformで管理する場合は、API IDとステージ名を一致させてください。アクセスログは別の設定で、access_log_settings.destination_arnで指定するロググループを使います。

CloudWatchへの配信に問題があると、リクエスト、障害、不審な動作を追跡する情報が不足します。

想定される影響

  • リクエスト履歴を再構成しにくくなります。
  • 異常なリクエストやエラーの傾向の調査に時間がかかるおそれがあります。
  • 利用状況や障害の傾向を分析しにくくなります。

対処方法

  • 必要な実行ログを有効にし、CloudWatchへの配信権限を構成してください。既存の実行ロググループをTerraformで管理する場合はインポートしてください。
  • 実行ロググループ名を実際のAPIとステージに合わせてください。アクセスログには有効なdestination_arnと形式を別途設定します。実行ログの命名規則に従う必要はありません。
  • 保持期間と読み取り権限を制限し、実際のリクエストのログが届くことを確認してください。

例

実行ロググループ名を比較する抜粋です。APIとステージの他の必須設定、実行ログの有効化、配信権限は省略しています。グループを作成したり名前を一致させたりするだけでは、ログは有効になりません。

変更前

hcl
variable "stage_name" {
  default = "example"
  type    = string
}

variable "stage_names" {
  default = "examples"
  type    = string
}

resource "aws_api_gateway_rest_api" "example" {
  # ... その他の設定は省略 ...
}

resource "aws_api_gateway_stage" "example" {
  depends_on = [aws_cloudwatch_log_group.example]

  stage_name = var.stage_name
  # ... その他の設定は省略 ...
}

resource "aws_cloudwatch_log_group" "example" {
  name              = "API-Gateway-Execution-Logs_${aws_api_gateway_rest_api.example.id}/${var.stage_names}"
  retention_in_days = 7
}

変更後

hcl
variable "stage_name" {
  default = "example"
  type    = string
}

resource "aws_api_gateway_rest_api" "example" {
  # ... その他の設定は省略 ...
}

resource "aws_api_gateway_stage" "example" {
  depends_on = [aws_cloudwatch_log_group.example]

  stage_name = var.stage_name
  # ... その他の設定は省略 ...
}

resource "aws_cloudwatch_log_group" "example" {
  name              = "API-Gateway-Execution-Logs_${aws_api_gateway_rest_api.example.id}/${var.stage_name}"
  retention_in_days = 7
}

説明:

  • 変更前: ステージと実行ロググループが異なるステージ名を使っています。
  • 変更後: 同じ変数を両方の名前に使っています。ログの有効化と配信権限は別途必要です。

参考資料