新しい s3 オブジェクトが作成されるたびに呼び出される Lambda 関数を作成しました。オブジェクトを取得してから、ビデオ品質を変更する新しいトランスコーダー ジョブを作成しようとしています。ただし、トランスコーダ ジョブは作成されません。creating job....
表示されjob created
ますが、ログには表示されません。
このチュートリアルを終了します。
私のラムダ関数:
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このチュートリアル に変更しました。新しいコードはこちら
'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: xxx バージョン: $LATEST
トランスコーダのロード
END RequestId: xxx
REPORT RequestId: xxx
タスクは 3.00 秒後にタイムアウトしました
create job ブロックが呼び出されることはありません。