前提
- AWS Elemental MediaConvertで動画の変換処理を実装している
- 以下のような構成
経緯
AWS Elemental MediaConvertで動画の変換処理を実装しましたが、通常1分程度で完了するはずの処理が5分以上かかる時がありました。詳細に見ていくと変換処理は1分程度で終わっているのですが、処理開始までの待機時間が長いことがわかりました。
原因
処理開始までの待機時間が長いことが原因ですが、その理由についてはサポートに問い合わせても回答が得られませんでした。代わりに以下のページにあるようにキューホッピングの設定をすることで状況を改善できるとのことでした。
https://docs.aws.amazon.com/ja_jp/mediaconvert/latest/ug/setting-up-queue-hopping-to-avoid-long-waits.html
キューホッピングを設定する
キューの作成
まずホッピングするためのキューをCloudFormationで作成をします。AWSのページではリザーブドキューを推奨していますが、CloudFormationではON_DEMANDしかサポートしていないようです。利用している状況に合わせて選択してください。
MediaConvertHopDestination:
Type: 'AWS::MediaConvert::Queue'
Properties:
Name: 'hopDestination'
PricingPlan: 'ON_DEMAND'
Status: 'ACTIVE'
MediaConvertの設定ファイルを修正する
Video on Demand on AWS FoundationのCloudFormationを実行するとjob-settings.jsonというファイルが作成されます。こちらにキューホッピングの設定を追加します。
{
"Queue": "Default",
"Role": "",
"Settings": {
"OutputGroups": [
{
--- 省略 ----
"AccelerationSettings": {
"Mode": "PREFERRED"
},
"StatusUpdateInterval": "SECONDS_60",
--- 以下を追記 ----
"Priority": 0,
"HopDestinations": [
{
"WaitMinutes": 1,
"Queue": "arn:aws:mediaconvert:ap-northeast-1:XXXXXXXXXX:queues/QueueHopping"
}
]
}
LambdaFunctionを修正する
/**
* 追記
*/
const hopDestinationArn = `arn:aws:mediaconvert:ap-northeast-1:${accountId}:queues/hopDestination`
/**
* 修正
*/
job = await utils.updateJobSettings(job,inputPath,outputPath,metaData,MEDIACONVERT_ROLE,hopDestinationArn);
for (let group of outputGroups) {
switch (group.OutputGroupSettings.Type) {
case 'FILE_GROUP_SETTINGS':
group.OutputGroupSettings.FileGroupSettings.Destination = getPath(group, fileNum++);
break;
case 'HLS_GROUP_SETTINGS':
group.OutputGroupSettings.HlsGroupSettings.Destination = getPath(group, hlsNum++);
break;
case 'DASH_ISO_GROUP_SETTINGS':
group.OutputGroupSettings.DashIsoGroupSettings.Destination = getPath(group, dashNum++);
break;
case 'MS_SMOOTH_GROUP_SETTINGS':
group.OutputGroupSettings.MsSmoothGroupSettings.Destination = getPath(group, mssNum++);
break;
case 'CMAF_GROUP_SETTINGS':
group.OutputGroupSettings.CmafGroupSettings.Destination = getPath(group, cmafNum++);
break;
default:
throw Error('OutputGroupSettings.Type is not a valid type. Please check your job settings file.');
}
}
/**
* 追記
*/
job.HopDestinations[0].Queue = hopDestinationArn;
まとめ
以上でキュー・ホッピングの設定が追加できます。
Video on Demand on AWS FoundationはほぼNode.jsで出来ているのでカスタマイズがしやすくて便利だと感じました。細かいチューニングにも対応できるのでありがたいです。