요청을 완료하기 전에 AWS Lambda 함수가 종료 됨

마이크

여기에서 S3 및 Lambda에 대한 AWS 가이드를 따르려고합니다.

http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html

수동 테스트 단계에 있지만 테스트를 실행하려고하면 "errorMessage": "Process exited before complete request"라는 메시지가 표시됩니다.

로그에서 실패 지점은 async.waterfall 코드와 관련이 있습니다.

Lambda 함수를 실행하면 예제 이미지를 가져 와서 크기를 조정 한 다음 새 S3 버킷에 넣습니다. 그러면 비동기가 실행할 정의되지 않은 "nextTask"를 찾으려고하는 것 같습니다. 전에 비동기를 사용한 적이 없어서이 문제를 해결하는 방법을 잘 모르겠습니다.

cloudwatch 로그 파일은 나에게 이것을 제공합니다

2016-09-16T18:36:44.011Z    836d0280-7c3c-11e6-933a-9b5b3a5e8dd8    TypeError: undefined is not a function
at /var/task/ResizeImages.js:98:13
at /var/task/node_modules/async/dist/async.js:486:20
at nextTask (/var/task/node_modules/async/dist/async.js:5008:33)
at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:5015:17)
at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:339:31)
at Response.<anonymous> (/var/task/node_modules/async/dist/async.js:847:20)
at Request.<anonymous> (/var/runtime/node_modules/aws-sdk/lib/request.js:355:18)
at Request.callListeners (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/var/runtime/node_modules/aws-sdk/lib/request.js:615:14)

비동기 (및 imageMagik)를 설치하기 위해 방금 다음 명령을 사용했습니다.

npm install async gm

내 node_modules 폴더 안에.

내가 사용한 예제 노드 스크립트가 여기에 있고 98 행에 주석이 있습니다.

// dependencies
var async = require('async');
var AWS = require('aws-sdk');
var gm = require('gm')
            .subClass({ imageMagick: true }); // Enable ImageMagick integration.
var util = require('util');

// constants
var MAX_WIDTH  = 100;
var MAX_HEIGHT = 100;

// get reference to S3 client 
var s3 = new AWS.S3();

exports.handler = function(event, context, callback) {
    // Read options from the event.
    console.log("Reading options from event:\n", util.inspect(event, {depth: 5}));
    var srcBucket = event.Records[0].s3.bucket.name;
    // Object key may have spaces or unicode non-ASCII characters.
    var srcKey    = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));  
    var dstBucket = srcBucket + "-resized";
    var dstKey    = "thumb-" + srcKey;

    // Sanity check: validate that source and destination are different buckets.
    if (srcBucket == dstBucket) {
        callback("Source and destination buckets are the same.");
        return;
    }

    // Infer the image type.
    var typeMatch = srcKey.match(/\.([^.]*)$/);
    if (!typeMatch) {
        callback("Could not determine the image type.");
        return;
    }
    var imageType = typeMatch[1];
    if (imageType != "jpg" && imageType != "png") {
        callback('Unsupported image type: ${imageType}');
        return;
    }

    // Download the image from S3, transform, and upload to a different S3 bucket.
    async.waterfall([
        function download(next) {
            // Download the image from S3 into a buffer.
            s3.getObject({
                    Bucket: srcBucket,
                    Key: srcKey
                },
                next);
            },
        function transform(response, next) {
            gm(response.Body).size(function(err, size) {
                // Infer the scaling factor to avoid stretching the image unnaturally.
                var scalingFactor = Math.min(
                    MAX_WIDTH / size.width,
                    MAX_HEIGHT / size.height
                );
                var width  = scalingFactor * size.width;
                var height = scalingFactor * size.height;

                // Transform the image buffer in memory.
                this.resize(width, height)
                    .toBuffer(imageType, function(err, buffer) {
                        if (err) {
                            next(err);
                        } else {
                            next(null, response.ContentType, buffer);
                        }
                    });
            });
        },
        function upload(contentType, data, next) {
            // Stream the transformed image to a different S3 bucket.
            s3.putObject({
                    Bucket: dstBucket,
                    Key: dstKey,
                    Body: data,
                    ContentType: contentType
                },
                next);
            }
        ], function (err) {
            if (err) {
                console.error(
                    'Unable to resize ' + srcBucket + '/' + srcKey +
                    ' and upload to ' + dstBucket + '/' + dstKey +
                    ' due to an error: ' + err
                );
            } else {
                console.log(
                    'Successfully resized ' + srcBucket + '/' + srcKey +
                    ' and uploaded to ' + dstBucket + '/' + dstKey
                );
            }

            callback(null, "message");
        } // ------- LINE 98 -----------
    );
};
마이크

가시성을 위해 답변을 게시합니다.

런타임이 node4.3이 아닌 nodejs로 설정되었습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

요청을 완료하기 전에 Lambda 함수가 종료되는 이유는 무엇입니까?

분류에서Dev

Pyppeteer : 브라우저가 AWS Lambda에서 예기치 않게 종료 됨

분류에서Dev

파일 업로드를 완료하기 전에 스크립트가 종료 됨

분류에서Dev

AWS Lambda가 수명주기 작업 완료시 중단됨

분류에서Dev

Fish Shell – 함수를 완료하기 전에 함수가 입력을 요청하도록하는 방법

분류에서Dev

DELETE 요청이 완료되기 전에 페이지가 렌더링 됨

분류에서Dev

AWS Lambda에서 작업이 완료되기 전에 요청에 대한 200 ok 응답

분류에서Dev

Linux PPPD 연결이 종료 됨-> LCP가 피어에 의해 종료 됨 (사용자 요청)

분류에서Dev

Spring-batch가 종료 상태로 종료 됨 : 실제 작업이 완료되기 전에 완료 되었습니까?

분류에서Dev

jQuery가 양식의 값 수정을 완료하기 전에 양식이 제출 됨

분류에서Dev

소멸자가 C #에서 작업을 완료하기 전에 종료됩니까?

분류에서Dev

Azure VM을 종료 할 수 없음-제어 할 수 없으며 여전히 요금이 청구 됨

분류에서Dev

QML : 신청을 종료하기 전에 확인 요청

분류에서Dev

while 루프가 조기에 종료 됨

분류에서Dev

SQL Server, nodejs 및 bycrypt를 사용하여 함수가 수신되기 전에 요청이 종료됩니다.

분류에서Dev

Axios 비동기는 axios가 사후 요청을 완료하기 전에 Cloud 함수 반환을 기다립니다.

분류에서Dev

Jquery 지연됨-이전 함수가 완료되기 전에 함수 호출 연기

분류에서Dev

작업이 완료되기 전에 NodeJS 비동기가 완료 됨

분류에서Dev

Firebasequery가 완료되기 전에 Android 비동기 작업이 완료 됨

분류에서Dev

종료되기 전에 루프가 중단됨

분류에서Dev

상태를 확인하기 전에 썽크가 HTTP 요청을 완료 할 때까지 기다립니다.

분류에서Dev

우분투 18.04로 종료하기 전에 프로세스가 중단됨

분류에서Dev

프로그램이 종료되기 전에 신호 CGI 출력이 완료 됨

분류에서Dev

Applescript가 1 분 후에 종료 됨

분류에서Dev

요청이 완료되기 전에 Ruby의 HTTPClient gem을 사용하여 요청의 헤더를 가져올 수 있습니까?

분류에서Dev

AWS Lambda Node.js는 비동기 HTTP 요청이 완료된 후 this.emit을 실행합니다.

분류에서Dev

CloudFormation이 전체 스택 생성을 완료했음을 알려주는 AWS Lambda 함수를 실행하려면 어떻게해야합니까?

분류에서Dev

HTTP 모듈을 사용하는 AWS Lambda 함수가 요청을하지 않음

분류에서Dev

다른 요청을 보내기 전에 초기 네트워크 요청이 완료되었는지 확인하는 가장 좋은 방법 (iOS 앱)

Related 관련 기사

  1. 1

    요청을 완료하기 전에 Lambda 함수가 종료되는 이유는 무엇입니까?

  2. 2

    Pyppeteer : 브라우저가 AWS Lambda에서 예기치 않게 종료 됨

  3. 3

    파일 업로드를 완료하기 전에 스크립트가 종료 됨

  4. 4

    AWS Lambda가 수명주기 작업 완료시 중단됨

  5. 5

    Fish Shell – 함수를 완료하기 전에 함수가 입력을 요청하도록하는 방법

  6. 6

    DELETE 요청이 완료되기 전에 페이지가 렌더링 됨

  7. 7

    AWS Lambda에서 작업이 완료되기 전에 요청에 대한 200 ok 응답

  8. 8

    Linux PPPD 연결이 종료 됨-> LCP가 피어에 의해 종료 됨 (사용자 요청)

  9. 9

    Spring-batch가 종료 상태로 종료 됨 : 실제 작업이 완료되기 전에 완료 되었습니까?

  10. 10

    jQuery가 양식의 값 수정을 완료하기 전에 양식이 제출 됨

  11. 11

    소멸자가 C #에서 작업을 완료하기 전에 종료됩니까?

  12. 12

    Azure VM을 종료 할 수 없음-제어 할 수 없으며 여전히 요금이 청구 됨

  13. 13

    QML : 신청을 종료하기 전에 확인 요청

  14. 14

    while 루프가 조기에 종료 됨

  15. 15

    SQL Server, nodejs 및 bycrypt를 사용하여 함수가 수신되기 전에 요청이 종료됩니다.

  16. 16

    Axios 비동기는 axios가 사후 요청을 완료하기 전에 Cloud 함수 반환을 기다립니다.

  17. 17

    Jquery 지연됨-이전 함수가 완료되기 전에 함수 호출 연기

  18. 18

    작업이 완료되기 전에 NodeJS 비동기가 완료 됨

  19. 19

    Firebasequery가 완료되기 전에 Android 비동기 작업이 완료 됨

  20. 20

    종료되기 전에 루프가 중단됨

  21. 21

    상태를 확인하기 전에 썽크가 HTTP 요청을 완료 할 때까지 기다립니다.

  22. 22

    우분투 18.04로 종료하기 전에 프로세스가 중단됨

  23. 23

    프로그램이 종료되기 전에 신호 CGI 출력이 완료 됨

  24. 24

    Applescript가 1 분 후에 종료 됨

  25. 25

    요청이 완료되기 전에 Ruby의 HTTPClient gem을 사용하여 요청의 헤더를 가져올 수 있습니까?

  26. 26

    AWS Lambda Node.js는 비동기 HTTP 요청이 완료된 후 this.emit을 실행합니다.

  27. 27

    CloudFormation이 전체 스택 생성을 완료했음을 알려주는 AWS Lambda 함수를 실행하려면 어떻게해야합니까?

  28. 28

    HTTP 모듈을 사용하는 AWS Lambda 함수가 요청을하지 않음

  29. 29

    다른 요청을 보내기 전에 초기 네트워크 요청이 완료되었는지 확인하는 가장 좋은 방법 (iOS 앱)

뜨겁다태그

보관