0

Я создал функцию Lambda, которая вызывается с каждым новым созданием объекта s3. Я пытаюсь восстановить объект, а затем создаю новое задание Transcoder, которое изменяет качество видео. Но работа транскодера никогда не создается. creating job.... показывается, но job created никогда не появляется в моих журналах.Создать работу транскодера AWS от Lambda

Исходя из this учебник.

Моего Lambda Функция:

var aws = require('aws-sdk'); 
var elastictranscoder = new aws.ElasticTranscoder(); 

exports.handler = function(event, context) { 
    console.log('Got Video:', JSON.stringify(event, null, 2)); 

    // Get the object from the event and show its content type 
    var key = event.Records[0].s3.object.key; 
    console.log('Key:', key); 
    var params = { 
     Input: { 
      Key: key 
     }, 
     PipelineId: 'xxx', 
     OutputKeyPrefix: 'output/', 
     Outputs: [ 
     { 
      Key: outputKey(basename(key),'mp4'), 
      PresetId: '1441222625682-nnthmh', // h264 
     }, 
     { 
     Key: outputKey(basename(key),'webm'), 
     PresetId: '1441222599518-vt9jbu', // webm 
     } 
     ] 
    }; 

    console.log('creating job....'); 

    elastictranscoder.createJob(params, function(err, data) { 
     console.log('job created'); 
     if (err){ 
     console.log('ERROR...',err, err.stack); // an error occurred 
     context.fail(); 
     return; 
     }else{ 
     console.log('created job successfully'); 
     } 
     context.succeed(); 
    }); 
}; 

Я думал, что это, возможно, что-то делать с моей ролью Lambda, но я уверен, что каждая вещь хорошая. Облако и транскодер: createJob доступ.

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "logs:CreateLogGroup", 
      "logs:CreateLogStream", 
      "logs:PutLogEvents" 
     ], 
    "Resource": "arn:aws:logs:*:*:*" 
    }, 
    { 
    "Effect": "Allow", 
     "Action": [ 
     "s3:GetObject", 
     "s3:PutObject" 
     ], 
    "Resource": [ 
     "arn:aws:s3:::*" 
    ] 
    }, 
    { 
     "Effect": "Allow", 
     "Action": [ 
      "elastictranscoder:Read*", 
      "elastictranscoder:List*", 
      "elastictranscoder:*Job", 
      "elastictranscoder:CreateJob", 
      "elastictranscoder:*Preset", 
      "s3:List*", 
      "sns:List*" 
     ], 
     "Resource": "*" 
    } 
    ] 
} 

EDIT Изменен this учебник. Heres нового код

'use strict'; 
console.log('Loading function'); 

let aws = require('aws-sdk'); 
let s3 = new aws.S3({ apiVersion: '2006-03-01' }); 
let elastictranscoder = new aws.ElasticTranscoder(); 


function getFileName(path) { 
    return path.split('/').reverse()[0].split('.')[0]; 
} 


exports.handler = (event, context, callback) => { 
    // const bucket = event.Records[0].s3.bucket.name; 
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' ')); 

    var params = { 
      Input: { 
      Key: key 
    }, 
    PipelineId: 'xxx', 
    OutputKeyPrefix: 'files/', 
    Outputs: [ 
     { 
      Key: getFileName(key), 
      PresetId: '1351620000001-200060', // hls 
     } 
     ] 
    }; 
    console.log('loading transcoder'); 
    elastictranscoder.createJob(params, function(err, data) { 
     console.log('made job'); 
     if (err){ 
      console.log(err, err.stack); // an error occurred 
      context.fail(); 
      return; 
     } 
     context.succeed(); 
    }); 
}; 

В журналах я получаю

Загрузки функция

START RequestID: хая Версия: $ Последней

загрузки перекодирование

END RequestID: ххми

ОТЧЕТ RequestID: ххх

Задача истекло после 3.00 секунд

создать блок задания никогда не вызывается.

+0

Можете ли вы разместить журнал Лямбда без особых подробностей? Также я использовал код из этого урока (http://fartashh.github.io/post/serverless-approach-to-transcode-media/) и с некоторыми исправлениями. – manuel

+0

@manuel изменил мой код на этот учебник. Все еще ничего не происходит – Peter

+0

Имеет ли роль разрешения для создания задания эластичного транскодера? С кодом из моего учебника должно было работать или, по крайней мере, дать вам более четкий журнал ошибок. – manuel

ответ

0

Под удалением VPC мне пришлось выбрать «Нет VPC», чтобы это работало - то есть пусть оно запускается внутри «по умолчанию управляемой системой VPC», как только я изменил, что они работали мгновенно.

+0

«Нет VPC» буквально означает отсутствие VPC. Это не означает «по умолчанию VPC». Лямбда-функции не могут получить доступ к ресурсам вне VPC, если VPC не имеет шлюза NAT. Это связано с тем, что функции Lambda внутри VPC не получают общедоступный IP-адрес. –

Смежные вопросы