중복 람다 함수 호출을 처리하는 방법

2161 단어
AWS Lambda는 이벤트 중심의 서버리스 컴퓨팅 플랫폼입니다. 서버를 제어하거나 관리하지 않고 코드를 실행하는 데 도움이 됩니다. 코드에만 집중할 수 있습니다. Lambda는 함수를 실행하기 위해 일부 트리거가 필요한 이벤트 기반 서비스입니다. 람다 함수에 오류가 있으면 람다는 다시 시도하고 코드를 실행합니다. 하지만 코드 오류를 찾기가 쉽지 않을 때가 있습니다. 예를 들어 AWS Lambda 함수에서 nodejs를 사용하고 각 트리거에서 nodejs 함수가 실행되고 성공적으로 실행됩니다. 메트릭을 보면 오류로 표시됩니다. 오류가 있으면 계속 재시도하는 것이 AWS 람다 속성입니다. 따라서 함수가 성공적으로 실행되더라도 오류 lambda keep retry로 표시됩니다.



이를 처리하는 방법에는 여러 가지가 있습니다. 나는 우리를 위해 노력하고 일한 두 가지 방법을 추가하고 있습니다.
  • AWS Lambda에는 재시도를 설정하는 옵션이 있습니다. 람다가 오류 발생 시 코드 실행을 재시도하는 횟수를 결정하는 데 사용됩니다. Lambda, Functions로 이동한 다음 재시도 횟수를 설정하려는 Lambda 함수를 클릭합니다. 구성에서 비동기 호출을 열고 편집을 클릭하여 재시도 횟수를 설정하십시오. 람다 함수를 여러 번 실행하지 않도록 재시도 횟수를 0으로 설정합니다. 이 접근 방식의 단점은 오류가 있는 경우 람다도 재시도하지 않는다는 것입니다.


  • AWS Lambda가 함수를 실행할 때 컨텍스트 객체를 핸들러에 전달합니다.module.exports.handler = (event, context, callback) .
    context 객체의 속성 중 하나는 awsRequestId입니다. awsRequestId는 호출 요청을 식별하는 데 사용되며 호출마다 고유합니다. 함수 실행이 완료되기 전에 requestId를 데이터베이스에 저장할 수 있습니다. 다음 호출에서 requestId가 동일한지 여부를 확인하고 확인할 수 있습니다. requestId가 같으면 건너뛸 수 있습니다. 예를 들어 자동 증가 ID가 있는 SQL 테이블에 requestId를 저장합니다. 다음 호출에서는 ID가 가장 높은 테이블에서 requestId를 가져오고 현재 호출의 requestId와 동일한지 확인합니다.

  • 그것을 처리하는 더 좋은 방법이 하나 더 있습니다. 그것도 다음에 추가하겠습니다. 나는 여전히 그것을 시도하고 테스트하고 있습니다.
    업데이트: 핸들러 함수에 return을 추가하면 프로세스가 종료되고 람다 함수도 중지됩니다. 우리는 람다에서 비동기 작업을 수행하고 이를 처리하기 위해 약속을 사용합니다.

    module.exports.handler = async (event) => {
      const promise = new Promise((resolve, reject) => {
    /*
    do the async task here. if error use reject and if success then use the resolve
    */
    });
    return promise;
    


    약속이 해결되거나 거부되면 노드 프로세스는 성공 또는 실패로 종료됩니다. 성공하면 중복 호출이 없습니다.

    좋은 웹페이지 즐겨찾기