[アップデート] AWS Elemental MediaConvertで詳細なジョブの進行状況が確認できるようになりました!

ファイルベースの動画変換サービスであるAWS Elemental MediaConvertで、ジョブの進捗状況が最短10秒間隔で通知できるようになりました。通知内容には進行状況のパーセンテージ情報も含まれています。ジョブの状況がわかりやすくなる嬉しいアップデートですね。
2019.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、ファイルベースの動画変換サービスであるAWS Elemental MediaConvertで詳細なジョブの進行状況が確認できるようになりました。

先日、2019/03/13にポストされた内容です。上記ポストでは2つの項目を紹介していますが、本エントリではジョブの詳細進行状況確認機能(Detailed Job Progress Stauts)のみを扱います。

AWS Elemental MediaConvertではAmazon CloudWatch Eventsと連携してジョブのステータスに関する変更イベントを通知させることができます。このジョブステータスの変更イベントのひとつ、STATSU_UPDATEではこれまで、ジョブ開始後約1分間ごとの進行状況を通知することができました。今回のアップデートではこの機能が強化され、通知間隔をより細かに10秒、12秒、15秒、20秒、30秒から選択できるようになりました。またより大まかな間隔として2分から10分の1分刻みでも選択できるようになっています。さらに、より詳細な進行状況として進捗率もパーセンテージで通知されるようになったとのことです。

詳細については、AWS Documentsの「AWS Elemental MediaConvert Events」のページに記載があります。(なお機能アップデート情報の確認として、GitHubの差分ページも参照しています。)日本語ドキュメントについては2019/03/31現在、アップデートが反映さていないようなのでご注意ください。

AWS Elemental MediaConvertでジョブの進行状況を10秒おきに通知させてみた

では今回アップデートされたジョブの詳細進行状況の通知機能を使って、10秒おきにジョブの進行状況を通知させてみます。通知にはAmazon SNSのメール送信機能とAmazon CloudWatch Eventsを連携させて行います。まずはAmazon SNSでトピックならびにサブスクリプションを行い、メール通知ができるようにしておきます。(メールを受信後、Confirm subscriptionの処理も忘れずに行いましょう。)

続いてCloudWatch Events側で設定を行います。CloudWatch EventsのRules作成画面に進み、Custom event patternとして以下を入力します。MediaConvertのSTATUS_UPDATEイベントのみを処理するパターンとなります。(参考: チュートリアル: 失敗したジョブに関する E メール通知の設定 - MediaConvert

{
  "source": [
    "aws.mediaconvert"
  ],
  "detail": {
    "status": [
      "STATUS_UPDATE"
    ]
  }
}

続いてTargetとして先ほど作成したSNS Topicを選択し、Ruleを作成します。

CloudWatch EventsのRule作成まで完了したら、続いてMediaConvertでジョブを作成します。Job settingsの項目を確認するとStatus update interval (sec)の項目があります。ここで進行状況の通知間隔が設定できるようですね。デフォルトでは空欄ですが、10(秒)を選択してジョブを作成しましょう。

ジョブ作成後、すぐにAmazon SNSからの通知がメール受信できました。設定したとおりこれは10秒間隔で受信されます。下記のように少々受信Boxが騒がしくなりました…。

受信できた通知内容を確認してみましょう。今回は合計13通の通知を受けましたが、その一部をみてみます。まずは1通目、jqで整形したものが下記となります。26行目から29行目のTRANSCODINGPROGRESSINGの状態で進行状況が4%ということ、また35行目のjobPercentCompleteで全体としての進行状況が8%であることがわかります。

{
  "version": "0",
  "id": "55d97cc7-4e98-453f-0d4c-32e616f20cf5",
  "detail-type": "MediaConvert Job State Change",
  "source": "aws.mediaconvert",
  "account": "123456789012",
  "time": "2019-03-30T15:54:11Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/1553961236908-xxxxxx"
  ],
  "detail": {
    "timestamp": 1553961251538,
    "accountId": "123456789012",
    "queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
    "jobId": "1553961236908-xxxxxx",
    "status": "STATUS_UPDATE",
    "userMetadata": {},
    "framesDecoded": 601,
    "jobProgress": {
      "phaseProgress": {
        "PROBING": {
          "status": "COMPLETE",
          "percentComplete": 100
        },
        "TRANSCODING": {
          "status": "PROGRESSING",
          "percentComplete": 4
        },
        "UPLOADING": {
          "status": "PENDING",
          "percentComplete": 0
        }
      },
      "jobPercentComplete": 8,
      "currentPhase": "TRANSCODING",
      "retryCount": 0
    }
  }
}

続いて、1通目から10秒後に通知された2通目です。7行目のtimeの部分もちょうど1通目から10秒後であることがわかります。TRANSCODINGの進行状況が10%になっていること、また全体としては14%の進行状況であることがわかりますね。

{
  "version": "0",
  "id": "16390e0f-4456-6ba6-5c64-f7dc18c488fc",
  "detail-type": "MediaConvert Job State Change",
  "source": "aws.mediaconvert",
  "account": "123456789012",
  "time": "2019-03-30T15:54:21Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/1553961236908-xxxxxx"
  ],
  "detail": {
    "timestamp": 1553961261491,
    "accountId": "123456789012",
    "queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
    "jobId": "1553961236908-xxxxxx",
    "status": "STATUS_UPDATE",
    "userMetadata": {},
    "framesDecoded": 1660,
    "jobProgress": {
      "phaseProgress": {
        "PROBING": {
          "status": "COMPLETE",
          "percentComplete": 100
        },
        "TRANSCODING": {
          "status": "PROGRESSING",
          "percentComplete": 10
        },
        "UPLOADING": {
          "status": "PENDING",
          "percentComplete": 0
        }
      },
      "jobPercentComplete": 14,
      "currentPhase": "TRANSCODING",
      "retryCount": 0
    }
  }
}

続いて中盤の7通目です。

{
  "version": "0",
  "id": "0c1ee5ea-cf66-d735-2590-aae5c088b7a1",
  "detail-type": "MediaConvert Job State Change",
  "source": "aws.mediaconvert",
  "account": "123456789012",
  "time": "2019-03-30T15:55:11Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/1553961236908-xxxxxx"
  ],
  "detail": {
    "timestamp": 1553961311754,
    "accountId": "123456789012",
    "queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
    "jobId": "1553961236908-xxxxxx",
    "status": "STATUS_UPDATE",
    "userMetadata": {},
    "framesDecoded": 5939,
    "jobProgress": {
      "phaseProgress": {
        "PROBING": {
          "status": "COMPLETE",
          "percentComplete": 100
        },
        "TRANSCODING": {
          "status": "PROGRESSING",
          "percentComplete": 43
        },
        "UPLOADING": {
          "status": "PENDING",
          "percentComplete": 0
        }
      },
      "jobPercentComplete": 42,
      "currentPhase": "TRANSCODING",
      "retryCount": 0
    }
  }
}

そして最後の13通目です。TRANSCODINGはまだ96%ですが、この後の10秒後にSTATUS_UPDATEのイベント通知を受け取ることはなく、COMPLETEイベントを拾う別のCloudWatch Eventsのルールが動作しました。変換完了は別のイベントで処理される(STATUS_UPDATEで100%の完了を通知するわけではない)という点に注意しましょう。

{
  "version": "0",
  "id": "00b73365-f34a-4abf-6b5a-9c7181d4e68c",
  "detail-type": "MediaConvert Job State Change",
  "source": "aws.mediaconvert",
  "account": "123456789012",
  "time": "2019-03-30T15:56:11Z",
  "region": "ap-northeast-1",
  "resources": [
    "arn:aws:mediaconvert:ap-northeast-1:123456789012:jobs/1553961236908-xxxxxx"
  ],
  "detail": {
    "timestamp": 1553961371537,
    "accountId": "123456789012",
    "queue": "arn:aws:mediaconvert:ap-northeast-1:123456789012:queues/Default",
    "jobId": "1553961236908-xxxxxx",
    "status": "STATUS_UPDATE",
    "userMetadata": {},
    "framesDecoded": 6407,
    "jobProgress": {
      "phaseProgress": {
        "PROBING": {
          "status": "COMPLETE",
          "percentComplete": 100
        },
        "TRANSCODING": {
          "status": "PROGRESSING",
          "percentComplete": 96
        },
        "UPLOADING": {
          "status": "PENDING",
          "percentComplete": 0
        }
      },
      "jobPercentComplete": 87,
      "currentPhase": "TRANSCODING",
      "retryCount": 0
    }
  }
}

まとめ

ファイルベースの動画変換サービスであるAWS Elemental MediaConvertでアップデートされた、ジョブの詳細な進行状況の通知機能について確認してみました。最短で10秒間隔で進行状況の通知が受け取れること、また進行状況がパーセンテージで取得できることから、例えば動画の変換状況の進行具合を表すプログレスバーの作成に利用できるのではないかなと思いました。また通知間隔を短くしなくても、進行具合がパーセンテージで確認できるのは嬉しいですね。引き続き、AWS Elemental MediaConvert含めたAWS Media Servicesの機能アップデートに注目していきたいと思います。