0

Ich habe eine node.jslambda, ausgelöst am S3 Ereignis. Ein Elastic Transcoder Job ist wie so eingeleitet:Amazon ElasticTranscoder, Wie warten Sie auf den Abschluss des Auftrags?

let AWS = require('aws-sdk'); 
let s3 = new AWS.S3({apiVersion: '2012–09–25'}); 
let eltr = new AWS.ElasticTranscoder({apiVersion: '2012–09–25', region: 'us-west-2'}); 

exports.handler = (event, context, callback) => { 
    let pipelineId = 'keystone'; 
    let bucket = event.Records[0].s3.bucket.name; 
    let key = event.Records[0].s3.object.key; 

    let etParams = { 
     PipelineId: pipelineId, 
     Input: { 
      Key: key, 
      FrameRate: 'auto', 
      Resolution: 'auto', 
      AspectRatio: 'auto', 
      Interlaced: 'auto', 
      Container: 'auto' 
     }, 
     Outputs: [{ 
      Key: key, 
      PresetId: '1351620000001-000010' 
     }] 
    }; 

    eltr.createJob(etParams, function(err, data) { 
     if (err) { 
      console.log("ET error", err, err.stack); 
     } else { 
      console.log("Calling waitFor for Job Id:", data.Job.Id); 
      eltr.waitFor("jobComplete", {Id: data.Job.Id}, function(err, data) { 
       if (err) { 
        console.log("ET waitFor Error", err, err.stack); 
       } else { 
        console.log("ET Job finished", data, data.Job.Output.Key); 
       } 
      }); 
     } 
    }); 
}; 

Die transcoding Prozess times out:

START RequestId: 82c0a1ce-5cf3-11e7-81aa-a3362402de83 Version: $LATEST 

2017-06-29T17:51:03.509Z 82c0a1ce-5cf3-11e7-81aa-a3362402de83 Creating Job { PipelineId: 'keystone', 
Input: 
{ Key: 'f04d62af47.mp4', 
FrameRate: 'auto', 
Resolution: 'auto', 
AspectRatio: 'auto', 
Interlaced: 'auto', 
Container: 'auto' }, 
Outputs: 
[ { Key: 'f04d62af47.mp4', 
PresetId: '1351620000001-000010' } ] } 

2017-06-29T17:51:04.829Z 82c0a1ce-5cf3-11e7-81aa-a3362402de83 Calling waitFor for Job Id: 1498758664450-jxhdlx 

END RequestId: 82c0a1ce-5cf3-11e7-81aa-a3362402de83 

REPORT RequestId: 82c0a1ce-5cf3-11e7-81aa-a3362402de83 Duration: 3001.65 ms Billed Duration: 3000 ms Memory Size: 128 MB Max Memory Used: 37 MB 

2017-06-29T17:51:06.260Z 82c0a1ce-5cf3-11e7-81aa-a3362402de83 Task timed out after 3.00 seconds 

Die obige Logausgabe 3-mal wiederholt wird (Lambda drei Versuche?)

Ich bin sicher, dass ich Ich vermisse etwas, kann jemand bitte den Fehler zeigen?

Antwort

0

Alle Anrufe an AWS Lambda müssen innerhalb von 300 Sekunden ausgeführt werden. Das Standard-Timeout beträgt 3 Sekunden. Sie können das Timeout jedoch auf einen Wert zwischen 1 und 300 Sekunden festlegen.

Und auf Ihrer zwei Wiederholungen Vermutung, sind Sie richtig. Wenn AWS Lambda ein asynchrones Ereignis nicht vollständig verarbeiten kann, versucht es den Aufruf zweimal automatisch mit Verzögerungen zwischen den Wiederholungen.

+0

Dies schlägt alle 'Duh' Momente. Je! – kmansoor

+0

Beachten Sie, dass Sie hier unnötigerweise für Lambda zahlen, indem Sie darauf warten, dass der Transkodierungsjob abgeschlossen wird. Sie laufen auch das Risiko von unnötigen Wiederholungen (die auch Geld kosten), wenn Sie das Lambda-Timeout überschreiten. Anstatt darauf zu warten, dass der Transcodierungsjob abgeschlossen wird, können Sie den Vorgang einfach beenden (wenn Sie das Transcodierungsresultat nicht interessieren) oder Elastic Transcoder zum Senden einer SNS-Benachrichtigung senden, wenn sie abgeschlossen ist (und diese Benachrichtigung könnte ein zweites Lambda aufrufen) Funktion, um zu tun, was benötigt wird, wenn der Job abgeschlossen ist. – jarmod

Verwandte Themen