배포된 애플리케이션 문제 해결

AWS에서 애플리케이션 배포하기

Dunieski Otano

Amazon Web Services Solutions Architect

작업 시간 초과

  • 함수가 실패하지만 가끔씩만 발생합니다
  • 로그에 "Task timed out"이라고 표시됩니다
  • 이 신호가 실제 원인을 알려줍니다

시간이 초과된 Lambda 작업을 보여주는 오류 로그 줄 옆에 있는 스톱워치

AWS에서 애플리케이션 배포하기

흔한 Lambda 실패 신호

Lambda 실패 신호를 보여주는 2x2 그리드: task-timed-out 로그가 있는 Timeout, TooManyRequestsException이 있는 Throttled, AccessDeniedException이 있는 Access Denied, signal-killed 오류가 있는 Out of Memory

  • 시간 초과(Timeout): "Task timed out after N seconds"
  • 스로틀링(Throttle): TooManyRequestsException
  • IAM 거부: AccessDenied, not authorized
  • 메모리 부족: 실행 중 런타임 강제 종료
AWS에서 애플리케이션 배포하기

실패한 함수에 대한 첫 대응

  • 무언가를 변경하기 전에 오류 메시지를 먼저 확인하세요
  • 알려진 신호와 일치하는지 확인하세요
  • 시간 초과 여부를 확인하려면 다운스트림 호출 지연 시간을 확인하세요
  • 한 가지만 변경한 후 다시 테스트하세요

문제 해결 의사 결정 루프: 오류 메시지 확인, 알려진 신호와 일치 확인, 다운스트림 지연 시간 확인, 한 가지 변경 후 재테스트

AWS에서 애플리케이션 배포하기

CloudWatch Logs Insights

Logs Insights 쿼리는 범위를 좁히기 위해 filter를, 집계하기 위해 stats를 사용합니다. 다음 예시는 분당 오류 수를 계산합니다:

fields @timestamp, @message
| filter level = "ERROR"
| stats count() as errors by bin(1m)
| sort errors desc
AWS에서 애플리케이션 배포하기

양쪽에서 통합 실패 디버깅하기

  • 실패는 종종 서비스 사이에서 발생합니다
  • 호출자의 로그와 수신자의 로그를 모두 확인하세요
  • 요청 ID 또는 추적 ID로 매칭하세요
  • 둘 사이의 간극이 문제 지점을 드러냅니다

요청 ID로 나란히 정렬된 호출자와 수신자 로그, 그 사이 간극은 요청이 멈추는 통합 실패 지점으로 표시됨

AWS에서 애플리케이션 배포하기

상태 확인과 준비 상태 프로브

녹색 체크 표시가 있는 정상 대상으로 트래픽을 라우팅하는 로드 밸런서, 연속된 상태 확인 실패 후 순환에서 제외된 실패 대상

  • 상태 확인(Health check): 인스턴스가 살아있고 서비스 중인가요?
  • 로드 밸런서는 정상 대상으로만 라우팅합니다
  • 준비 상태(Readiness): 트래픽을 받을 준비가 되었나요?
  • 확인에 실패하면 대상이 순환에서 제외됩니다
AWS에서 애플리케이션 배포하기

문제 해결 플레이북

  • 오류를 확인하고 신호와 매칭하세요
  • Logs Insights로 로그를 쿼리하여 범위를 좁히세요
  • 요청 ID 또는 추적 ID로 양쪽을 연관시키세요
  • 한 가지만 변경하고 확인하세요

4단계 문제 해결 플레이북: 오류 확인 및 신호 매칭, Insights로 로그 쿼리하여 범위 좁히기, 추적 ID로 양쪽 연관시키기, 한 가지 변경 후 확인

AWS에서 애플리케이션 배포하기

연습해 봅시다!

AWS에서 애플리케이션 배포하기

Preparing Video For Download...