0

我创建了一个 Lambda 函数,每次创建新的 s3 对象时都会调用该函数。我正在尝试检索该对象,然后创建一个更改视频质量的新转码器作业。但是永远不会创建转码器作业。creating job....出现但job created从未出现在我的日志中。

离开教程。

我的 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": "*"
    }
   ]
 }

编辑 更改为本教程。这是新代码

 '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();
     });
 };

在我得到的日志中

加载功能

开始请求 ID:xxx 版本:$LATEST

加载转码器

END RequestId: xxx

报告请求 ID:xxx

3.00 秒后任务超时

永远不会调用创建作业块。

4

1 回答 1

0

在 VPC 下拉菜单下,我必须选择“无 VPC”才能使其工作 - 即让它在“默认系统管理的 VPC”内运行,一旦我改变它们立即工作。

于 2016-10-17T16:25:04.713 回答