Ich habe eine node.js
lambda
, 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?
Dies schlägt alle 'Duh' Momente. Je! – kmansoor
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