0

新しいs3オブジェクトを作成するたびに呼び出されるラムダ関数を作成しました。私はオブジェクトを取得しようとしている、ビデオ品質を変更する新しいトランスコーダジョブを作成します。しかし、トランスコーダジョブは決して作成されません。 creating job....が表示されますが、job createdはログに記録されません。ラムダからAWSトランスコーダジョブを作成

オフオフthisチュートリアル。

マイラムダ関数:

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

私はそれが私のラムダの役割とは何かを持っているかもしれないと思ったが、私はすべてのものが良いですかなり確信しています。クラウドとトランスコーダー:createJobアクセス。 thisチュートリアルに変更

{ 
    "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 。 HERESに新しいコード私は

ロード機能

START RequestId取得ログで

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

:XXXバージョン:$ LATEST

ロードトランスコーダ

ENDをRequestId:XXX

REPORTのRequestId:タスクは3.00秒

後にタイムアウトになりましたxxxの

作成ジョブブロックが呼び出されることはありません。

+0

Lambdaログを機密情報なしで投稿できますか?また、私は[このチュートリアル](http://fartashh.github.io/post/serverless-approach-to-transcode-media/)のコードを使用し、いくつかの調整を行いました。 – manuel

+0

@manuelは自分のコードをそのチュートリアルに変更しました。まだ何も起こらない – Peter

+0

ロールにはElastic Transcoderジョブを作成する権限がありますか?私のチュートリアルのコードを使って、少なくともより明確なエラーログを取得する必要がありました。 – manuel

答えて

0

VPCのドロップダウンでは、これを動作させるために「No VPC」を選択する必要がありました。つまり、一度変更してしまえば即座に「デフォルトのシステム管理VPC」内で実行できます。

+0

「No VPC」は文字通りVPCを意味しません。これは「デフォルトVPC」を意味するものではありません。ラムダ機能は、VPCにNATゲートウェイがないかぎり、VPC外のリソースにアクセスすることはできません。これは、VPC内のラムダ機能がパブリックIPアドレスを取得しないためです。 –

関連する問題