2017-05-09 1 views
2

우리는 노드에서 API로부터 30 일 분량의 정보를 작성하는 람다 함수를 만들려고 시도하고 있지만, 정보량 때문에 한 번에 1 일만 할 수 있습니다. 현재이 작업을 수행하려는 현재 시도는 람다 자체에서 직접 람다의 새 인스턴스를 반복 실행하고 HOW_MANY_DAYS_AGO> 0이 될 때마다 날짜에서 1 일을 뺀 함수를 포함합니다. 정보를 RDS에 업로드합니다 결과를 계산하는 SQL 문을 실행 한 다음 결과를 웹 페이지에 게시하십시오. 우리가 10 일 또는 그 이하 동안 람다를 돌리면, 그것은 완벽하게 잘 작동합니다. 우리가 30 일 동안 실행을 시도 할 때마다 우리는 11 일 또는 12 일경이 오류가 발생하기 시작합니다. 우리는 일을 너무 빨리 끝내고 있다고 가정했기 때문에 코드 전체에서 다른 지점에서 지연을 설정하려고했습니다.60 초 트리거 대 60 초 지연 aws-lambda/RDS 오류 메시지?

18:27:53 
2017-05-09T18:27:53.505Z e720be2f-34e4-11e7-90ca-3f2ffa915b81 { StatusCode: 
200, FunctionError: 'Unhandled', Payload: '{"errorMessage":"RequestId: 
3243f8d3-34e5-11e7-b0a2-df429a0d6565 Process exited before completing 
request"}' } 
2017-05-09T18:27:53.505Z e720be2f-34e4-11e7-90ca-3f2ffa915b81 { StatusCode: 
200, 
FunctionError: 'Unhandled', 
Payload: '{"errorMessage":"RequestId: 3243f8d3-34e5-11e7-b0a2-df429a0d6565 
Process exited before completing request"}' } 
우리는 데이터 변수는 11 또는 정보 12 일에 도달 할 경우에도 발생하는 정의되지 않은 말한다 API에서 정보를 철수 곳 우리는 또한 때때로 지역에 CloudWatch에서의 람다 오류 메시지가

아직 10 세 미만인 경우에도 작동합니다. 이로 인해 우리가 사용하는 API가 과부하 상태라고 생각하게되었습니다.

위의 오류 페이로드는 event.variable에서 람다에 전달하는 것입니다. 30 일 동안 정보를 실행하려고 할 때마다 약 11-12 일에이 오류가 발생합니다. 이 오류 메시지는 RDS 데이터베이스에 연결되면 바로 발생합니다. 나는 기본적으로이 재료의 대부분을 가진 초보자이므로이 "처리되지 않은 페이로드"가 람다 또는 rds와 관련되어 있는지 확신 할 수 없지만 RDS와 관련되어 있다고 생각하는 경향이 있습니다. 전에이 오류를 본 적이없고 그것을 조사 할 때 꽤 넓은 오류 인 것 같습니다.

RDS 인 경우이 오류의 원인이 될 수 있으며이를 해결하려면 어떻게해야합니까? 데이터베이스가 너무 약해서로드를 처리 할 수 ​​없습니까? 미친 것은, 심지어 다음 람다 호출 사이에 60 초 지연을 설정하더라도 여전히이 오류가 발생합니다. 그러나 콘솔에서 60 초 트리거로 람다를 설정하고 30 분 후에 수동으로 켰다 껐다면 완벽하게 실행됩니다. 나는 내 코드에서 60 초 지연을 설정하여 람다의 새로운 인스턴스를 호출하고 콘솔을 통해 60 초 트리거를 설정한다. 둘 다 60 초마다 람다의 새로운 인스턴스를 실행하면된다. . 왜 하나가 완벽하게 작동하고 다른 하나는 위의 오류 메시지를 표시합니까? 유일한 차이점은 내 코드를 통해 60 초마다 호출되고 다른 하나는 AWS 람다 콘솔을 통해 60 초마다 호출된다는 것입니다.

목표는 폼 중 하나에서 람다로 정보를 전달하는 API 게이트웨이의 http 끝점을 통해 웹 페이지 양식을 제출할 때 람다가 트리거되도록하는 것입니다. api-gateway에서 트리거가 작동하고 람다가 작동하기 때문에 엔드 포인트에서 60 초 트리거를 사용하도록 설정하고 1800 초 또는 30 분 후에 해제하면 100 % 사실을 알 수 있습니다. 완벽하게 작동합니다. 하지만 그것은 내가 람다를 호출하는 방법이 본질적으로 똑같은 일을 할 때 작동하지 않는 이유와 그 오류 메시지의 원인을 찾을 수 없다는 것을 이해할 수 없다는 것을 저를 괴롭혔습니다.

답변

0

필자는 문제의 원인을 발견했으며, AWS-lambda 기능을 재귀 적으로 반복하기 위해 60 초 지연이 작동하지 않을 것이라고 확신합니다. 그것을 설명하기위한 최선의 시도에서, 람다를 프로그램 적으로 호출 할 때, 기본적으로 "동기 모드"로 설정됩니다. AWS-Lambda 함수가 두 개 있다고 가정 해 보겠습니다. 람다 1에서 람다 2를 호출합니다. 람다 1은 람다 2가 끝날 때까지 완료된 것으로 간주하지 않습니다. 그리고 람다 2가 3 번째 람다를 호출하면 실패 할 운명의 체인을 시작할 것입니다. 그 외에, 호출 된 람다가 2 분 표시에서 끝나지 않았다면 다시 실행하려고 시도하고 2 분 후에 세 번째로 실행합니다.

그래서 나는 그것을 실행하는 방식으로, 기본적으로 연쇄 반응을 일으키고있었습니다.선이 더 내려 가면 체인이 길어지면 길어지면 더 많은 람다가 2 분 및 4 분을 기록하게되고 데이터베이스에 같은 요일 항목이 여러 번 업로드되고 RDS 연결이 범람하게됩니다 API가 사용 중이었고 결국 모든 람다가 5 분의 시간 제한에 도달하게되었습니다.

해결책은 AWS API-Gateway를 통해 http 엔드 포인트를 통해 호출하는 것입니다. 그것은 람다를 호출하고 계속합니다. 우리가 이것을 시도 할 때 카운트 다운이 작동하고 30 일 동안의 정보가 수 분 내에 완료되었습니다.

"비동기 모드"에서 프로그래밍 방식으로 호출 된 람다를 설정하는 방법이 있습니다. 나는 그것을 사용한 적이 없다. 그리고 처음에는 원래의 생각이하고 있다고 생각했거나, 동기 모드와 똑같은 것을 기다리는 경우 함수가 계속 호출되고 계속 진행되는지 확신 할 수 없다. 즉, 호출되는 람다가 끝내야한다. 그것이 끝난다고 간주하기 전에.

관련 문제