0

新しい 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 ブロックが呼び出されることはありません。

4

1 に答える 1

0

VPC ドロップダウンで、これを機能させるには「VPC なし」を選択する必要がありました。つまり、「デフォルトのシステム管理 VPC」内で実行できるようにしました。

于 2016-10-17T16:25:04.713 に答える