この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
清水です。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の機能アップデートに注目していきたいと思います。