만족
AWS lambda 오배포로 인한 요금 폭탄.... 본문
AWS lambda 오배포로 인한 요금 폭탄....
기타 컴퓨터 지식 Satisfaction 2026. 8. 20. 23:38https://satisfactoryplace.tistory.com/414
AWS Lambda와 Cloudwatch를 이용한 health check
서비스 장애 발생 시 빠른 인지를 위해 일정 시간마다 서버 상태를 체크하기 위한 스크립트를 작성하고이것을 AWS lightsail에서 가장 저렴한 인스턴스에 올려 cron으로 동작시키고 있다. https://satis
satisfactoryplace.tistory.com
이전에 AWS lambda 로 health-check 를 하는 방법을 소개했었다.
현재 헬스체크(3분에 한 번), 크롤링(일주일에 3번) 을 lambda 로 사용하고 있는데, 배포가 빈번하지 않아 별도로 배포 스크립트를 구축하지 않고, 배포가 필요한 경우 직접 코드를 복사&붙여넣기를 하고 있다.
그런데 크롤링 로직이 분명 일주일에 3번 돌아야 하는데 너무 빠른 속도로 반복 호출되고 있었던 것이다.
원인 파악
크롤링 로직이 돌 때 발생되는 DB 변경이 지속적으로 발생하고 있었다.
처음엔 AWS eventBridge 의 오류인줄 알고 무시했으나, 데이터를 바로잡아 두어도 계속 변경이 발생했다.
그래서 lambda 를 누군가 수동으로 호출하고 있나? 다른 트리거 조건이 있나? 를 의심해서 invocation 지표를 보니 전혀 호출된 기록이 없었다.

그렇다면 크롤링 로직이 다른 코드(백엔드 등)에 실수로 포함된건가? 싶어 코드를 확인해 봤지만 당연히... 그럴리 없었다.
우선 어떤 QUERY가 실행되고 있고, 어디에서 실행했는지 확인하기 위해 아래 쿼리를 실행했다.
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
SELECT
event_time,
user_host,
thread_id,
command_type,
argument
FROM mysql.general_log
WHERE event_time >= NOW() - INTERVAL 5 MINUTE
AND command_type IN ('Query', 'Execute')
ORDER BY event_time DESC;
쿼리를 확인해 보니 실제로 크롤러에서 실행하는 쿼리들이 계속해서 실행되고 있었다.
user_host 는 aws ec2 로 찍히고 있는데, 나는 ec2를 사용하고 있지 않다.
aws ec2 describe-instances \
--filters "Name=ip-address,Values=43.201.53.123" \
--query 'Reservations[].Instances[].{
InstanceId:InstanceId,
Name:Tags[?Key==`Name`]|[0].Value,
State:State.Name,
PrivateIp:PrivateIpAddress,
PublicIp:PublicIpAddress
}'
해당 ip로 찍힌 ec2 인스턴스가 있나 싶어 확인해봤지만 당연히 없다....

순간 뇌정지가 왔다... 해킹당한 것 같다고 생각했다....가 4일 전에 헬스체커를 배포한게 기억났다.
설마하고 헬스체커 코드를 확인해보니.... 실제로 크롤러 코드가 배포되어 있었던 것이다.

헬스체커는 3분에 한번씩 계속 실행되도록 구성해두었다....
한 번에 20분이 걸리는 무거운 크롤링 작업이 3분에 한 번씩 실행된 것이다....

다행히 제한 시간 30초에 메모리를 최소로 설정을 걸어두어 크롤러가 끝까지 실행되지 못하고 중간에 다운되는 것을 반복했지만.... 3분마다 실행되다 보니 4일동안 무려 약 1800번이 실행된 것이다......
다행히 lambda 청구서를 확인해보니 프리티어를 넘기진 않아 요금은 발생하지 않았다.
요금 발생

평소엔 약 27달러정도가 발생하는데, 이번달은 20일인데도 벌써 57달러가 청구되었다.
lambda 는 요금이 발생하지 않았는데 왜 lightsail 에서 요금이 저렇게 불어났지? 라고 생각했지만 청구 내역을 보니...

크롤러가 api 서버를 계속 호출하면서 기본 요금에 포함된 네트워크 아웃바운드 용량인 3TB를 모두 잡아먹고 300GB를 더 써버려 과금이 발생했다.
더 무서운 것은 이번달이 10일이 남았는데, 월평균 트래픽 사용량을 보니 약 300GB(39달러)이 더 과금될 예정이라는 것이다.
조치
수동 배포 대신 배포 스크립트를 구성했다...
zip -r function.zip .
aws lambda update-function-code \
--function-name cyphers-supporter-crawler \
--zip-file fileb://function.zip \
--region ap-northeast-2
deploy:crawler 스크립트로 위 스크립트를 실행하여 배포를 자동화했다.
또, 요금이 예상치보다 더 발생하면 알림을 받기 위해 AWS budget을 활성화했다.

월평균 27달러를 사용하는데, 30달러를 초과하는 요금 발생 시 이메일로 알림이 오게 해 두었다.
요금 '폭탄'이라기엔 귀여울 수 있지만, 60달러로 인생교육 받았다고 생각해야겠다...
그런데 만약 더 늦게 발견했다면....?
'기타 컴퓨터 지식' 카테고리의 다른 글
| [codex] 2개 이상의 계정으로 codex 사용하기 (2) | 2026.05.18 |
|---|---|
| axios 1.14.1, 0.30.4 보안 사고 분석 및 해결 (0) | 2026.03.31 |
| Agentic coding 으로의 전환 (0) | 2026.02.14 |
| AWS Lambda와 Cloudwatch를 이용한 health check (0) | 2024.12.01 |
| AWS lightsail 가격 인상과 요금 절약 (0) | 2024.11.04 |