2016-09-16 4 views
1

Ich versuche, die AWS Führer für S3 und Lambda hierAWS Lambda-Funktion verlassen, bevor Anfrage Abschluss

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

ich bei der manuellen Testphase bin zu folgen, aber ich erhalte „errormessage“: " Prozess beendet, bevor Anfrage abgeschlossen wird, "wenn ich versuche, den Test auszuführen.

Im Protokoll der Punkt scheitern ist etwas mit dem async.waterfall Code zu tun.

Wenn ich die Lambda-Funktion ausführen, wird es mein Beispiel Bild erhalten, ändern Sie die Größe und legt sie in den neuen S3 Eimer. Dann sieht es so aus, als ob async versucht, eine undefinierte "nextTask" zu finden. Ich habe noch nie Async verwendet, daher bin ich mir nicht sicher, wie ich das beheben soll.

Die Cloudwatch-Protokolldatei gibt mir diese

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) 

Um async (und ImageMagik) zu installieren, habe ich nur den Befehl

npm install async gm 

in meinem node_modules Ordner.

Das Beispiel Knoten Skript, das ich verwendet habe, ist hier, Zeile 98 wird kommentiert.

// 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 ----------- 
    ); 
}; 
+0

Stellen Sie sicher, dass „Runtime“ eingestellt wurde auf „node4.3“ und nicht „NodeJS“ – idbehold

+0

, die das Problem war, dank – mike

Antwort

2

Veröffentlichen der Antwort für die Sichtbarkeit.

Die Laufzeit NodeJS statt node4.3 ist

Verwandte Themen