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