从Lambda创建AWS Transcoder作业 [英] Create AWS Transcoder job from Lambda
问题描述
我创建了一个Lambda函数,每次创建新的s3对象时都会调用该函数。我正在尝试检索对象,然后创建一个新的Transcoder作业来更改视频质量。但是永远不会创建代码转换器作业。 正在创建工作。...
出现,但创建的工作
从未出现在我的日志中。
I've created a Lambda function that is called with every new s3 object creation. I'm trying to retrieve the object, then create a new Transcoder job that alters the video quality. But the transcoder job is never created. creating job....
shows up but job created
never appears in my logs.
此教程。
我的Lambda函数:
My Lambda Function:
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": "*"
}
]
}
编辑
更改为此教程。这是新代码
'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();
});
};
在日志中,我得到
加载功能
Loading function
START RequestId:xxx版本:$ LATEST
START RequestId: xxx Version: $LATEST
加载代码转换器
END RequestId:xxx
END RequestId: xxx
REPORT RequestId:xxx
REPORT RequestId: xxx
任务在3.00秒后超时
Task timed out after 3.00 seconds
从不调用创建作业块。
推荐答案
在VPC下拉菜单下,我必须选择无VPC才能正常工作-即一旦我更改了它们,就让它在默认系统管理的VPC中运行立即工作。
Under the VPC drop down i had to choose "No VPC" for this to work - i.e. let it run inside the "default system-managed VPC", once I changed that they worked instantly.
这篇关于从Lambda创建AWS Transcoder作业的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!