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