AWS Lambda의 오류 처리 및 자동 재시도 - AWS Lambda

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS Lambda의 오류 처리 및 자동 재시도

함수를 호출하면 두 가지 유형의 오류가 발생할 수 있습니다. 호출 오류는 함수가 호출 요청을 수신하기 전에 호출 요청이 거부되는 경우 발생합니다. 함수 오류는 함수의 코드 또는 런타임이 오류를 반환할 때 발생합니다. 오류 유형, 호출 유형, 함수를 호출하는 클라이언트 또는 서비스에 따라 재시도 동작 및 오류 관리 전략은 달라집니다.

요청, 호출자 또는 계정 관련 문제로 인해 호출 오류가 발생할 수 있습니다. 호출 오류에는 오류의 원인을 나타내는 응답에 오류 유형과 상태 코드를 포함합니다.

일반적인 호출 오류
  • 요청 – 요청 이벤트가 너무 대용량이거나 유효한 JSON이 아닌 경우 함수는 존재하지 않습니다. 또는 파라미터 값의 형식이 잘못되었습니다.

  • 호출자 – 사용자 또는 서비스는 함수를 호출할 권한이 없습니다.

  • 계정 – 최대 개수의 함수 인스턴스가 이미 실행 중이거나 요청이 너무 빠르게 수행되고 있습니다.

AWS CLI 및 AWS SDK와 같은 클라이언트는 클라이언트 제한 시간, 조절 오류(429), 잘못된 요청으로 인해 발생하지 않는 기타 오류에 대해 다시 시도합니다. 호출 오류의 전체 목록은 호출 단원을 참조하세요.

함수 오류는 함수가 사용하는 함수 코드 또는 런타임이 오류를 반환할 때 발생합니다.

일반적인 함수 오류
  • 함수 – 함수 코드에 예외가 발생하거나 오류 객체를 반환합니다.

  • 런타임 – 함수가 시간을 초과하였거나 구문 오류를 감지했거나 응답 객체를 JSON으로 마샬링하는 데 실패하여 런타임이 함수를 종료하였습니다. 함수는 오류 코드와 함께 종료되었습니다.

호출 오류와 달리 함수 오류로 인해 Lambda가 400 시리즈 또는 500 시리즈 상태 코드를 반환하는 경우는 없습니다. 함수가 오류를 반환하는 경우 Lambda는 X-Amz-Function-Error라는 헤더와 오류 메시지 및 기타 세부 정보가 들어 있는 JSON 형식 응답을 포함함으로써 이를 알립니다. 각 언어의 함수 오류 예시는 다음 주제를 참조하세요.

함수를 직접 호출하는 경우 함수 코드와 관련된 오류 처리 전략을 결정합니다. Lambda는 사용자를 대신하여 이러한 유형의 오류를 자동으로 재시도하지 않습니다. 재시도할 때에는 함수를 수동으로 다시 호출하고 실패한 이벤트를 대기열로 보내 디버깅하거나 오류를 무시할 수 있습니다. 함수의 코드는 완전히 또는 부분적으로 실행되었거나 전혀 실행되지 않았을 수 있습니다. 재시도하는 경우 함수의 코드가 중복 트랜잭션 또는 기타 원치 않는 부작용을 일으키지 않고도 동일한 이벤트를 여러 번 처리할 수 있게 해야 합니다.

함수를 직접 호출하는 경우 호출자의 재시도 동작과 요청이 수행되는 과정에서 만나게 되는 모든 서비스에 대해 잘 알고 있어야 합니다. 여기에는 다음 시나리오가 포함됩니다.

  • 비동기식 호출 – Lambda는 함수 오류를 두 번 재시도합니다. 함수가 모든 수신 요청을 처리할 만큼 용량이 충분하지 않은 경우 이벤트는 함수로 전송될 때까지 몇 시간 또는 며칠 동안 대기열에서 대기할 수 있습니다. 성공적으로 처리되지 않은 이벤트를 캡처하도록 함수에 대해 배달 못한 편지 대기열을 구성할 수 있습니다. 자세한 내용은 비동기식 호출 섹션을 참조하세요.

  • 이벤트 소스 매핑 – 스트림에서 읽기를 수행하는 이벤트 소스 매핑은 항목의 전체 배치를 재시도합니다. 반복되는 오류는 오류가 해결되거나 항목이 만료될 때까지 영향을 받은 샤드의 처리를 차단합니다. 중단된 샤드를 탐지하려면 반복기 수명 지표를 모니터링하면 됩니다.

    대기열에서 읽는 이벤트 소스 매핑의 경우 소스 대기열에서 가시성 제한 시간 및 리드라이브 정책을 구성하여 실패한 이벤트에 대한 재시도와 대상 간의 시간 길이를 결정합니다. 자세한 내용은 Lambda 이벤트 소스 매핑다른 서비스와 함께 AWS Lambda 사용의 서비스별 주제를 참조하세요.

  • AWS 서비스 – AWS 서비스는 함수를 동기식 또는 비동기식으로 호출할 수 있습니다. 동기식 호출의 경우 서비스는 재시도 여부를 결정합니다. 예를 들어, Lambda 함수가 TemporaryFailure 응답 코드를 반환하면 Amazon S3 배치 작업이 작업을 다시 시도합니다. 업스트림 사용자 또는 클라이언트의 요청을 프록시하는 서비스는 재시도 전략을 갖고 있거나 오류 응답을 요청자에게 다시 릴레이할 수 있습니다. 예를 들어, API Gateway는 오류 응답을 요청자에게 항상 다시 릴레이합니다.

    비동기식 호출의 경우 동작은 함수를 동기식으로 호출할 때와 동일합니다. 자세한 내용은 다른 서비스와 함께 AWS Lambda 사용의 서비스별 주제와 호출하는 서비스에 관한 설명서를 참조하세요.

  • 기타 계정 및 클라이언트 – 다른 계정에 대한 액세스 권한을 부여할 때 리소스 기반 정책을 사용해 함수를 호출하도록 구성할 수 있는 서비스 또는 리소스를 제한할 수 있습니다. 함수가 오버로드되는 것을 방지하기 위해 Amazon API Gateway를 사용하여 함수 앞에 API 계층을 배치할 것을 고려하는 것이 좋습니다.

Lambda는 Lambda 애플리케이션의 오류를 처리할 수 있도록 Amazon 및 같은 서비스와 통합됩니다. CloudWatch AWS X-Ray 로그, 지표, 경보 및 추적의 조합을 사용해 애플리케이션을 지원하는 함수 코드, API 또는 기타 리소스에서 문제를 신속하게 감지하고 식별할 수 있습니다. 자세한 설명은 Lambda 함수 모니터링 및 문제 해결 섹션을 참조하세요.

CloudWatch Logs 구독, X-Ray 추적 및 Lambda 함수를 사용하여 오류를 감지하고 처리하는 샘플 애플리케이션에 대해서는 을 참조하십시오. AWS Lambda용 오류 처리자 샘플 애플리케이션