#S3のバケットの作成
マネジメントコンソールからS3を選択して、未加工状態と変換後の動画を格納するバケットを作成する。
##未加工状態の動画用のバケットの作成
1.バケットを作成を選択し、表示されたポップアップで以下のように入力する
バケット名: transcoder-raw-data
リージョン: Oregon
2.作成されたバケットを右クリックからプロパティを選択し、アクセス許可からバケットポリシーの編集を選択する。
3.表示されるポップアップからAWS Policy Generatorを選択し、以下のように入力する。
Step 1: Select Policy Type
Select Type of Policy: S3 Bucket Policy
Step 2: Add Statement(s)
Effect: Allow
Principal: *
AWS Servuce: Amazon S3
Actions: PutObject
Amazon Resource Name(ARN): arn:aws:s3:::transcoder-raw-data/*
Add Statementを選択
Step 3: Generate Policy
Generate Policyを選択して、表示されるJSONデータをコピペする。
元のバケットポリシーエディターのページに貼り付けて保存する。
##加工後の動画用のバケットの作成
1.バケットを作成を選択し、表示されたポップアップで以下のように入力する
バケット名: transcoder-processed-data
リージョン: Oregon
#Elastic Transcoderの設定
マネジメントコンソールからElastic Transcoderを選択する。
基本的な流れとしては以下の通りとなる。
Pipelines: ElasticTranscoderTestを作成
Jobs: LambdaでLambda関数からcreateJob()を実行する(マネジメントコンソールからは設定をしない)
Presets:予め用意されているものを使用(マネジメントコンソールからは設定をしない)
##Pipelineの作成
Create New Pipelineを選択して、以下のように入力する。
Pipeline Name: ElasticTranscoderTest
Input Bucket: transcoder-raw-data
IAM Role: Elastic_Transcoder_Default_Role
変換されたファイルやプレイリスト用のS3バケット
Bucket: transcoder-processed-data
Storage Class: Standard
サムネイル用のS3バケット
Bucket: transcoder-processed-data
Storage Class: Standard
Create Pipelineを選択
#Lambdaの操作
Lambdaの設定をするにあたって、予めLambda関数を作成しておく。
##Lambda関数の作成
以下、ローカルで作業する。
mkdir transcoderLambda
cd transcoderLambda
curl -sS https://getcomposer.org/installer | sudo php
php composer.phar require aws/aws-sdk-php
vim index.js
例えば、以下のようにindex.jsを作成する。
PipelineIdは、マネジメントコンソール中のElastic TranscoderからPipelinesで作成したPipelineを選択して確認。
Preset IDであるgeneric720pPresentIdとhls2MPresetIdはPresetsで予め用意されているもののPresetのIDに相当するもので、ソースコード中のものと一致するものとなる。
'use strict';
var AWS = require('aws-sdk');
var s3 = new AWS.S3({
apiVersion: '2012-09-25'
});
var transcoder = new AWS.ElasticTranscoder({
apiVersion: '2012-09-25',
region: 'us-west-2'
});
exports.handler = function(event, context) {
var bucket = event.Records[0].s3.bucket.name;
var key = event.Records[0].s3.object.key;
var pipelineId = '<Pipeline ID>';
var generic720pPresetId = '1351620000001-000010';//System preset: Generic 720p
var hls2MPresetId = '1351620000001-200010';//System preset: HLS 2M
var srcKey = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
var newKey = key.split('.')[0];
var params = {
PipelineId: pipelineId,
OutputKeyPrefix: newKey + '/',
Input: {
Key: srcKey,
FrameRate: 'auto',
Resolution: 'auto',
AspectRatio: 'auto',
Interlaced: 'auto',
Container: 'auto'
},
Outputs: [{
Key: newKey + '.mp4',
ThumbnailPattern: 'generic-' + newKey + '-{count}',
PresetId: generic720pPresetId,
},{
Key: newKey + '.ts',
ThumbnailPattern: 'hls-' + newKey + '-{count}'
PresetId: hls2MPresetId,
}]
};
transcoder.createJob(params, function(err, data){
if (err){
console.log('Error');
} else {
console.log('Success');
}
});
};
作成したファイルを以下のコマンドでZIPで圧縮する。
zip -r transcoderLambda.zip *
##Lambdaの設定
マネジメントコンソールからLambaを選択して、Create a Lambda functionを選択して、以下のように入力する。
###Select blueprint
blueprintは何も選ばずにNextを選択する。
###Configure triggers
点線上の囲い -> Lambda のように表示されている図の点線で囲われた部分をクリックしてS3を選択する。現れた入力欄に以下のように入力を行う。
Bucket: transcoder-raw-data
Event type: Object Created(All)
Prefix: 空欄
Suffix: 空欄
Enable trigger: チェックを入れる
Nextを選択
###Configure function
Name: myTranscoderFunction
Description: Function for forwarding file uploaded to S3 to Elastic Transcoder.
Runtime: Node.js 4.3
Code entry type: Upload a .ZIP file
Function package: Uploadを選択して、作成したZIPファイルをアップロードする
Lambda function handler and role
Handler: index.handler
Role: Create a custom role
IAMロール: 新しいIAMロールの作成
ロール名: lambda_transcoder_execution
ポリシードキュメント:
transcoderのアクションに対するアクセス許可の定義を追加する。例えば、以下のようになる。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"elastictranscoder:Read*",
"elastictranscoder:List*",
"elastictranscoder:*Job",
"elastictranscoder:*Preset"
],
"Resource": [
"arn:aws:elastictranscoder:*:*:*"
]
}
]
}
Nextを選択する。
###Review
設定内容を確認してLamba関数の作成が完了する。
以上でS3のtranscoder-raw-dataバケットに動画をアップロードすると、transcoder-processed-dataバケットに変換された動画が保存されるようになる。
#参考
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ElasticTranscoder.html
http://dev.classmethod.jp/cloud/aws/easy-video-transcoding-in-aws/
https://remotestance.com/blog/3044/
http://qiita.com/tjun/items/5ddb8ab7c95be398cfb8