LoginSignup
1
0

More than 1 year has passed since last update.

Video on Demand on AWS Foundationにキュー・ホッピングを追加する

Posted at

前提

  • AWS Elemental MediaConvertで動画の変換処理を実装している
  • 以下のような構成

vod-on-aws-foundations-architecture.182b6790d313c884c84ccbe6d9c3a633da37cdd9 (1).png

経緯

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を修正する

job-submit/index.js
/**
 * 追記
 */
const hopDestinationArn = `arn:aws:mediaconvert:ap-northeast-1:${accountId}:queues/hopDestination`

/**
 * 修正
 */
job = await utils.updateJobSettings(job,inputPath,outputPath,metaData,MEDIACONVERT_ROLE,hopDestinationArn);
job-submit/lib/utils.js

        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で出来ているのでカスタマイズがしやすくて便利だと感じました。細かいチューニングにも対応できるのでありがたいです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0