설명
aws_api_gateway_deployment는 REST API 구성의 스냅샷이며, 실제 요청의 접근 로그는 배포를 참조하는 aws_api_gateway_stage에서 설정합니다. 배포 설명을 작성하는 것만으로 접근 로그가 활성화되지는 않습니다.
Deployment만 있고 로그 설정이 빠지면 API를 배포해도 요청 기록이 남지 않을 수 있습니다. 이 상태에서는 운영 중 발생한 호출 문제를 배포 시점과 함께 추적하기 어렵습니다.
잠재적 영향
- 요청 기록 부족: 실제 배포된 API 호출 내역을 확인하기 어렵습니다.
- 변경 추적 어려움: 어떤 배포와 어떤 Stage 설정이 연결됐는지 파악이 늦어질 수 있습니다.
- 사고 분석 지연: 장애나 오남용 발생 시 원인 분석 시간이 길어집니다.
해결 방법
aws_api_gateway_stage에access_log_settings를 설정해 배포된 Stage의 요청 로그를 남기십시오.- Stage의 배포 참조와 로그 대상·포맷을 확인하고, 로그 전달 권한과 보존 기간을 구성하세요.
- API 배포 템플릿에 로그 설정을 기본 포함해 누락이 생기지 않도록 하세요.
예시
현재 제공자에서 별도 Stage를 사용하는 구성 발췌입니다. 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" })
}
}
설명:
- 변경 전: Deployment와 Stage는 연결되어 있지만 이 Stage의 접근 로그 전달 설정은 없습니다. 다른 로그 수집 여부도 확인하세요.
- 변경 후: Stage의 접근 로그를 설정합니다. 배포 후 실제 요청 기록이 로그 그룹에 전달되는지 확인해야 합니다.