Lambda의 재시도 동작 이해하기

Lambda의 재시도 동작 이해하기

함수를 직접 호출할 때는 함수 코드와 관련된 오류를 처리하는 전략을 여러분이 정해요. Lambda는 이런 유형의 오류를 대신 자동으로 재시도하지 않습니다. 재시도하려면 함수를 수동으로 다시 호출하거나, 실패한 이벤트를 디버깅용 큐로 보내거나, 오류를 무시하면 됩니다. 함수의 코드는 완전히 실행되었을 수도, 부분적으로 실행되었을 수도, 전혀 실행되지 않았을 수도 있어요. 재시도하는 경우 함수 코드가 동일한 이벤트를 여러 번 처리해도 중복 트랜잭션이나 다른 원치 않는 부작용이 발생하지 않도록 확인하세요.

출처: AWS Lambda 개발자 안내서

본문

함수를 간접적으로 호출할 때는 호출자와 요청이 거치는 모든 서비스의 재시도 동작을 알아야 합니다. 여기에는 다음 시나리오가 포함됩니다.

  • 비동기 호출 – Lambda는 함수 오류를 두 번 재시도해요. 함수가 들어오는 모든 요청을 처리할 충분한 용량이 없다면 이벤트는 함수에 보내지기 전에 몇 시간 동안 큐에서 대기할 수 있습니다. 성공적으로 처리되지 않은 이벤트를 캡처하도록 함수에 데드 레터 큐를 구성할 수 있어요. 자세한 내용은 데드 레터 큐 추가하기를 참고하세요.
  • 이벤트 소스 매핑 – 스트림을 읽는 이벤트 소스 매핑은 배치(batch) 항목 전체를 재시도해요. 반복되는 오류는 오류가 해결되거나 항목이 만료될 때까지 해당 샤드의 처리를 차단합니다. 정체된 샤드를 감지하려면 Iterator Age 지표를 모니터링할 수 있어요. 큐를 읽는 이벤트 소스 매핑의 경우, 소스 큐에서 가시성 타임아웃(visibility timeout)과 redrive 정책을 구성해 재시도 사이의 시간과 실패한 이벤트의 대상(destination)을 정합니다. 자세한 내용은 Lambda가 스트림 및 큐 기반 이벤트 소스의 레코드를 처리하는 방법과 다른 AWS 서비스의 이벤트로 Lambda 호출하기의 서비스별 주제를 참고하세요.
  • AWS 서비스 – AWS 서비스는 함수를 동기적으로 또는 비동기적으로 호출할 수 있어요. 동기 호출의 경우 서비스가 재시도 여부를 결정합니다. 예를 들어 Amazon S3 배치 작업은 Lambda 함수가 TemporaryFailure 응답 코드를 반환하면 작업을 재시도해요. 업스트림 사용자 또는 클라이언트의 요청을 프록시하는 서비스는 재시도 전략을 갖거나 오류 응답을 요청자에게 다시 전달할 수 있습니다. 예를 들어 API Gateway는 항상 오류 응답을 요청자에게 다시 전달합니다. 비동기 호출의 경우 재시도 로직은 호출 소스와 관계없이 동일해요. 기본적으로 Lambda는 실패한 비동기 호출을 최대 두 번 재시도합니다. 자세한 내용은 비동기 호출에서 Lambda가 오류와 재시도를 처리하는 방법을 참고하세요.
  • 다른 계정과 클라이언트 – 다른 계정에 접근 권한을 부여할 때 리소스 기반 정책을 사용해 함수를 호출하도록 구성할 수 있는 서비스나 리소스를 제한할 수 있어요. 함수가 과부하되지 않도록 보호하려면 Amazon API Gateway로 함수 앞에 API 계층을 두는 것을 고려해 보세요. API Gateway 오류 처리에 대한 정보는 API Gateway API로 Lambda 오류 처리하기를 참고하세요.

Lambda 애플리케이션의 오류를 처리하는 데 도움이 되도록 Lambda는 Amazon CloudWatch와 AWS X-Ray 같은 서비스와 통합됩니다. 로그, 지표, 알람, 트레이싱을 조합해 함수 코드, API, 또는 애플리케이션을 지원하는 다른 리소스의 문제를 빠르게 감지하고 식별할 수 있어요. 자세한 내용은 Lambda 함수 모니터링, 디버깅, 문제 해결을 참고하세요.

더 알아보기 (Learn more)