WAF 설정 Lambda 재귀 호출 문제 ‐ WAF 설정, Lambda 재귀 호출 문제 - lets-go-trip/treaXure-backend GitHub Wiki
- WAF 웹 ACL "treaxure-image-protection"이 CloudFront 배포와 연결되어 있지 않음에도 비용 발생
- AWS WAF는 생성만 해도 기본 비용 부과됨
- 비용 내역에서 WAF 관련 항목 확인 (~0.16 USD)
- CloudFront 배포 확인 (
WebACLId
없음) - WAF 웹 ACL 목록 확인
- 미사용 WAF 웹 ACL이 존재함 (실제 트래픽과 연결 없음)
- WAF 웹 ACL 삭제:
aws wafv2 delete-web-acl \
--name treaxure-image-protection \
--scope CLOUDFRONT \
--id <ACL_ID> \
--lock-token <LOCK_TOKEN> \
--region us-east-1
- 삭제 확인:
aws wafv2 list-web-acls --scope CLOUDFRONT --region us-east-1
- WAF 제거로 추가 요금 방지
- 해당 ACL은 핫링크 및 남용 방지를 위해 만들었으나 실제 적용되지 않았음
- Lambda 함수(
treaThumbFn
)가 무한 루프에 빠짐 - AWS에서 재귀 호출 알림 메일 수신
- Lambda 트리거 구성 확인
- SQS → Lambda 연결 구조 확인
- CloudWatch 로그와 지표 분석 (RecursiveInvocationsDropped)
- 업로드된 이미지에 대해 Lambda가 썸네일 생성 후 다시 S3에 저장
- 썸네일 저장도 이벤트로 인식되어 다시 Lambda 호출 → 재귀 루프 발생
- S3 이벤트 설정에서 Prefix 필터로 제한:
aws s3api put-bucket-notification-configuration \
--bucket treaxure-images \
--notification-configuration '{
"QueueConfigurations": [
{
"Id": "to-sqs",
"QueueArn": "arn:aws:sqs:ap-northeast-2:[ACCOUNT_ID]:treaxure-image-queue",
"Events": ["s3:ObjectCreated:*"],
"Filter": {
"Key": {
"FilterRules": [
{"Name": "Prefix", "Value": "images/soso/"},
{"Name": "Suffix", "Value": ".webp"}
]
}
}
}
]
}'
- 오직
images/soso/
경로에만 이벤트 발생 -
images/thumb/
경로는 Lambda 트리거 제외 - 무한 루프 방지, 비용 최적화
- 테스트 업로드 시 썸네일 생성 정상 작동, 재귀 호출 없음
- 불필요한 WAF 웹 ACL 삭제로 기본 요금 방지
- Lambda의 무한 루프 방지로 예기치 않은 실행 비용 절감
- 이미지 업로드 → SQS → Lambda → 썸네일 생성 흐름 정상화
- CloudFront를 통해 원본 이미지 및 썸네일 접근 가능
AWS 리소스는 단순히 생성만 해도 과금되거나 트리거가 잘못 설정되면 불필요한 호출로 이어질 수 있음. 설정 이후 반드시 CloudWatch 및 비용 보고서를 주기적으로 점검해야 함.