[アップデート] AWS Elemental MediaConvertで詳細なジョブの進行状況が確認できるようになりました!
はじめに
清水です。AWS Media Servicesの細かなアップデートを追っていくコーナーです。本エントリで紹介するのはこちら、ファイルベースの動画変換サービスであるAWS Elemental MediaConvertで詳細なジョブの進行状況が確認できるようになりました。
- Detailed Job Progress Status and Server-Side S3 Encryption Now Available with AWS Elemental MediaConvert
- AWS Elemental MediaConvert、ジョブの詳細な進行状況ステータスとサーバー側の S3 暗号化のサポートを開始
- AWS Developer Forums: Detailed Job Progress Status and Server-Side S3 Encryption Now Available with 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 Events - MediaConvert
- aws-elemental-mediaconvert-user-guide/mediaconvert_cwe_events.md at master · awsdocs/aws-elemental-mediaconvert-user-guide · GitHub
- Add documentation about client-side and server-side encryption. · awsdocs/aws-elemental-mediaconvert-user-guide@369d266 · GitHub
- AWS Elemental MediaConvert イベント - MediaConvert
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行目のTRANSCODING
がPROGRESSING
の状態で進行状況が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の機能アップデートに注目していきたいと思います。