Lambda의 재시도 동작 이해
함수를 직접 호출하는 경우 함수 코드와 관련된 오류 처리 전략을 결정합니다. Lambda는 사용자를 대신하여 이러한 유형의 오류를 자동으로 재시도하지 않습니다. 재시도할 때에는 함수를 수동으로 다시 호출하고 실패한 이벤트를 대기열로 보내 디버깅하거나 오류를 무시할 수 있습니다. 함수의 코드는 완전히 또는 부분적으로 실행되었거나 전혀 실행되지 않았을 수 있습니다. 재시도하는 경우 함수의 코드가 중복 트랜잭션 또는 기타 원치 않는 부작용을 일으키지 않고도 동일한 이벤트를 여러 번 처리할 수 있게 해야 합니다.
함수를 직접 호출하는 경우 호출자의 재시도 동작과 요청이 수행되는 과정에서 만나게 되는 모든 서비스에 대해 잘 알고 있어야 합니다. 여기에는 다음 시나리오가 포함됩니다.
-
비동기식 호출 – Lambda는 함수 오류를 두 번 재시도합니다. 함수가 모든 수신 요청을 처리할 만큼 용량이 충분하지 않은 경우, 이벤트는 함수로 전송될 때까지 몇 시간 동안 대기열에서 대기할 수 있습니다. 성공적으로 처리되지 않은 이벤트를 캡처하도록 함수에 대해 배달 못한 편지 대기열을 구성할 수 있습니다. 자세한 내용은 Lambda 함수를 비동기 호출합니다. 섹션을 참조하세요.
-
이벤트 소스 매핑 – 스트림에서 읽기를 수행하는 이벤트 소스 매핑은 항목의 전체 배치를 재시도합니다. 반복되는 오류는 오류가 해결되거나 항목이 만료될 때까지 영향을 받은 샤드의 처리를 차단합니다. 중단된 샤드를 탐지하려면 반복기 수명 지표를 모니터링하면 됩니다.
대기열에서 읽는 이벤트 소스 매핑의 경우 소스 대기열에서 가시성 제한 시간 및 리드라이브 정책을 구성하여 실패한 이벤트에 대한 재시도와 대상 간의 시간 길이를 결정합니다. 자세한 내용은 Lambda가 스트림 및 대기열 기반 이벤트 소스의 레코드를 처리하는 방법 및 다른 AWS 서비스의 이벤트로 Lambda 간접 호출의 서비스별 주제를 참조하세요.
-
AWS 서비스 – AWS 서비스는 함수를 동기식 또는 비동기식으로 호출할 수 있습니다. 동기식 호출의 경우 서비스는 재시도 여부를 결정합니다. 예를 들어, Lambda 함수가
TemporaryFailure
응답 코드를 반환하면 Amazon S3 배치 작업이 작업을 다시 시도합니다. 업스트림 사용자 또는 클라이언트의 요청을 프록시하는 서비스는 재시도 전략을 갖고 있거나 오류 응답을 요청자에게 다시 릴레이할 수 있습니다. 예를 들어, API Gateway는 오류 응답을 요청자에게 항상 다시 릴레이합니다.비동기 호출의 경우, 재시도 로직은 간접 호출 소스와 관계없이 동일합니다. 기본적으로 Lambda는 실패한 비동기 호출을 최대 2회까지 재시도합니다. 자세한 내용은 Lambda가 비동기 호출을 통해 오류 및 재시도를 처리하는 방법 단원을 참조하십시오.
-
기타 계정 및 클라이언트 – 다른 계정에 대한 액세스 권한을 부여할 때 리소스 기반 정책을 사용해 함수를 호출하도록 구성할 수 있는 서비스 또는 리소스를 제한할 수 있습니다. 함수가 오버로드되는 것을 방지하기 위해 Amazon API Gateway를 사용하여 함수 앞에 API 계층을 배치할 것을 고려하는 것이 좋습니다.
Lambda 애플리케이션에서 오류를 더 원활히 처리할 수 있도록 Lambda는 Amazon CloudWatch, AWS X-Ray와 같은 서비스와 통합됩니다. 로그, 지표, 경보 및 추적의 조합을 사용해 애플리케이션을 지원하는 함수 코드, API 또는 기타 리소스에서 문제를 신속하게 감지하고 식별할 수 있습니다. 자세한 내용은 Lambda 함수 모니터링 및 문제 해결 단원을 참조하십시오.