AWS Elemental MediaConvertでキューあたりの同時ジョブ数の調整ができるようになっていました!
はじめに
清水です。ブロードキャストグレードの機能を備えたファイルベースの動画変換サービスであるAWS Elemental MediaConvertでは、変換をJobという単位で処理します。またQueueというJobを並列処理するためのリソースがあります。Queue内で同時に処理できるJobの数「Concurrent job(同時ジョブ)」については最大値が決められているのですが、2024年11月にこれをユーザ側で設定変更できるようになったというアップデートがありました。What's New at AWSへのポストは確認できておりませんが、AWS CLIのCHANGELOG、 バージョン 1.37.16 の記載でアップデートを確認できます。
- api-change:
mediaconvert
: This release adds the ability to reconfigure concurrent job settings for existing queues and create queues with custom concurrent job settings.
公式サイトではないのですがAPIの更新確認に便利なサイトAWS API Changesを確認すると、本アップデートは2024/11/10付けで行われていたようです。
本エントリではリリースから少し時間が経ってしまっていますが、このアップデートの詳細について確認してみたのでまとめてみたいと思います。
MediaConvertのQueueで同時ジョブが設定できるようになっていた
改めまして本エントリで紹介するアップデート、MediaConvertのConcurrent jobの設定変更について確認してみましょう。以下のMediaConvertマネジメントコンソール、Queuesの画面がわかりやすいかと思います。
画面の上部にConcurrent job allocation(同時ジョブ配分)として、Concurrent jobs in account(アカウント内の同時ジョブ)、Unallocated concurrent jobs(未割り当ての同時ジョブ)の値がそれぞれまとめられいます。またOn-demand queuesの各Queueについて、Concurrent jobs(同時ジョブ)の値が100
と設定されていますね。
なお、言語を日本語に変更したマネジメントコンソール画面では下記の表示となります。
Queue作成時の設定項目についても確認してみましょう。(Create queue)ボタンで進むと、Queue detailsとして以下のようにName、Descriptionに加えてConcurrent jobsの値を指定できるようになっています。
例として、Concurrent jobsの値を150
としてQueueを作成してみました。作成後のQueue一覧画面、該当のQueueのConcurrent jobsの値が150
になっていることが確認できます。またConcurrent jobs allocationのUnallocated concurrent jobsの値も更新されています。(Concurrent jobs in accountの値)
- (各QueueのConcurrent jobsの合計)
= (Unallocated concurrent jobsの値)
となっていますね。
QueueのName列、青色下線部の文字はリンクになっていて、クリックすることでQueueの詳細画面に遷移します。Queue詳細画面には(Edit queue)ボタンがありますね、押下してQueueを編集してみましょう。
従来までのDescriptionとStatusの変更のほか、Concurrent jobsの値についても変更ができるようになっています。試しに150
から50
を加えた200
に変更してみました。(Save queue)ボタンを押下して設定を反映させます。
Queueの詳細画面です、Concurrent jobsの値が変更したとおり200
となっていることが確認できます。
Queueの一覧画面も確認してみましょう。Concurrent jobsのほか、Unallocated concurrent jobsの値も更新されています。
従来までのQueueで設定可能な項目を振り返る
MediaConvertのマネジメントコンソールから本エントリで紹介するアップデート、QueueにおけるConcurrent jobsの設定変更について確認できました。さて、従来はこのConcurrent jobsの指定やQueueでの設定可能な項目はどのようだったでしょうか。Boto3のドキュメントで本アップデート前の過去バージョンと比較しながら、Queueの設定項目などを確認してみましょう。
上記は最新版のドキュメントのリンクですが、URLのlatest
の部分でバージョンを指定すると該当バージョンのドキュメントが参照できます。今回のアップデート、boto3ではバージョン1.35.66でアップデートされていました。CHANGELOGから引用します。
- api-change:
mediaconvert
: [botocore
] This release adds the ability to reconfigure concurrent job settings for existing queues and create queues with custom concurrent job settings.
MediaConvert.Client.list_queues
のResponse Syntaxについて、今回のアップデートの1つ前のバージョン1.35.65と、アップデートのあった1.35.66で比較してみます。まずは1つ前の1.35.65のlist_queuesのResponse Syntaxです。
{
'NextToken': 'string',
'Queues': [
{
'Arn': 'string',
'CreatedAt': datetime(2015, 1, 1),
'Description': 'string',
'LastUpdated': datetime(2015, 1, 1),
'Name': 'string',
'PricingPlan': 'ON_DEMAND'|'RESERVED',
'ProgressingJobsCount': 123,
'ReservationPlan': {
'Commitment': 'ONE_YEAR',
'ExpiresAt': datetime(2015, 1, 1),
'PurchasedAt': datetime(2015, 1, 1),
'RenewalType': 'AUTO_RENEW'|'EXPIRE',
'ReservedSlots': 123,
'Status': 'ACTIVE'|'EXPIRED'
},
'Status': 'ACTIVE'|'PAUSED',
'SubmittedJobsCount': 123,
'Type': 'SYSTEM'|'CUSTOM'
},
]
}
続いて、今回のアップデートが反映された1.35.66のlist_queuesのResponse Syntaxです。
{
'NextToken': 'string',
'Queues': [
{
'Arn': 'string',
'ConcurrentJobs': 123,
'CreatedAt': datetime(2015, 1, 1),
'Description': 'string',
'LastUpdated': datetime(2015, 1, 1),
'Name': 'string',
'PricingPlan': 'ON_DEMAND'|'RESERVED',
'ProgressingJobsCount': 123,
'ReservationPlan': {
'Commitment': 'ONE_YEAR',
'ExpiresAt': datetime(2015, 1, 1),
'PurchasedAt': datetime(2015, 1, 1),
'RenewalType': 'AUTO_RENEW'|'EXPIRE',
'ReservedSlots': 123,
'Status': 'ACTIVE'|'EXPIRED'
},
'ServiceOverrides': [
{
'Message': 'string',
'Name': 'string',
'OverrideValue': 'string',
'Value': 'string'
},
],
'Status': 'ACTIVE'|'PAUSED',
'SubmittedJobsCount': 123,
'Type': 'SYSTEM'|'CUSTOM'
},
],
'TotalConcurrentJobs': 123,
'UnallocatedConcurrentJobs': 123
}
バージョン1.35.66のResponse Syntaxの最後3行に注目しましょう。TotalConcurrentJobs
とUnallocatedConcurrentJobs
というキーが追加されていることが確認できますね。またキーQueues
の値である配列内では、ConcurrentJobs
とServiceOverrides
の2つのキーが追加されています。
追加されたTotalConcurrentJobs
とUnallocatedConcurrentJobs
、そしてConcurrentJobs
については、先ほどMediaConvertのマネジメントコンソールで確認したものと同じ内容ですね。なおServiceOverrides
については、MediaConvertによって設定に適用されるもので、確認した場合はAWSサポートに問い合わせを、とのことです。(本エントリではこのServiceOverrides
についての詳細は扱いません。)
個々のQueueの情報を取得するMediaConvert.Client.get_queue
のResponse Syntaxについても、キーConcurrentJobs
とServiceOverrides
が追加されるという同等の更新が確認できます。(get_queue - Boto3 1.35.66 documentation)
続いてMediaConvert.Client.update_queue
のResponse Syntaxについても確認してみましょう。今回のアップデートの1つ前のバージョン1.35.65と比較して、バージョン1.35.66ではRequest SyntaxでConcurrentJobs
の指定が追加されていることが確認できます。まずは1つ前の1.35.65のupdate_queueのRequest Syntaxを確認してみましょう。
response = client.update_queue(
Description='string',
Name='string',
ReservationPlanSettings={
'Commitment': 'ONE_YEAR',
'RenewalType': 'AUTO_RENEW'|'EXPIRE',
'ReservedSlots': 123
},
Status='ACTIVE'|'PAUSED'
)
続いて今回のアップデートが反映された1.35.66のupdate_queueのRequest Syntaxです。2行目にConcurrentJobs
が追加されていますね。
response = client.update_queue(
ConcurrentJobs=123,
Description='string',
Name='string',
ReservationPlanSettings={
'Commitment': 'ONE_YEAR',
'RenewalType': 'AUTO_RENEW'|'EXPIRE',
'ReservedSlots': 123
},
Status='ACTIVE'|'PAUSED'
)
先ほどMediaConvertのマネジメントコンソールで確認したConcurent jobsの指定と同等の設定項目となります。またQueueの作成用APIのMediaConvert.Client.create_queue
についても、Request SyntaxでConcurrentJobs
の指定が追加されています。([create_queue - Boto3 1.35.66 documentation)
Boto3のドキュメントでの過去バージョンとの比較から、MediaConvertのマネジメントコンソールで確認したConcurrent jobs関連の表示、Queue作成や変更時のConcurrent jobの値の指定が、本エントリで扱うアップデートのタイミングで追加された変更であることが確認できました。
MediaConvert User GuideからConcurent jobsについて再確認
MediaConvertのマネジメントコンソールやBoto3のドキュメントから、Queueに割り当てられたConcurrent jobsの値が確認、変更できるようになったこと、またアカウント内のConcurrent jobsの配分状況が参照できるようになったことが確認できました。
さて、このConcurrent jobsの値が変更可能となったアップデートと同じタイミングでMediaConvert User Guideについても更新が行われています。Document hisotryの2024/12/06付け、On-demand queuesの項目ですね。こちらについても改めて確認してみます。
MediaConvert User GuideのWorking with on-demand queuesのページ、Processing multiple jobs in parallelの項目には、マネジメントコンソールやBoto3のドキュメントなどで確認してきたアカウントごとのConcurrent jobsの値やQueueにおける設定、また関連するサービスクォータなどについて記載されています。同時ジョブ関連についてポイントを抜粋すると次のようになります。MediaConvertのサービスクォータについて記載されているReference guideのAWS Elemental MediaConvert endpoints and quotasとあわせて確認しました。
まず Concurrent jobs in account(アカウント内の同時ジョブ) については、アカウント内のすべてのOn-demand QueueでMediaConvertが同時に処理できるJobの最大値であることが記載されています。この値はリージョン個別のものである点に注意しましょう。Reference guideでService quotasを確認すると、us-east1、us-west-2、そしてeu-west-1は2,000
、その他のリージョンはそれぞれ1,000
であることが記載されています。、MediaConvert User Guideにはクォータの引き上げリクエスト可能と書かれていますが、Reference guideのService quotasの箇所やService quotasのマネジメントコンソールでは引き上げ不可となっています。現段階ではどちらが正しいのかはっきりしないのですが、1,000以上の同時ジョブを検討する場合には注意しておきましょう。
続いて Concurrent jobs per on-demand queue(オンデマンドキューあたりの同時ジョブ) です。こちらはマネジメントコンソールやAPI(Boto3)上では確認できなかった値ですね。MediaConvert User Guideによると、個々のOn-demand Queueでの設定可能なConcurrent jobsの最大値があるとのことです。Reference guideのService quotasを確認すると、us-east-1やus-west-2などでは500
、ap-northeast-1などでは250
、その他のリージョンは100
となっていて、クォータの引き上げが可能とのことです。
実際にこのConcurrent jobs per on-demand queueについて確認してみましょう。本エントリ冒頭、新規にConcurrent jobsの値を150
で作成し、そのあと200
に変更したQueueを使用します。こちらの環境は東京リージョンでクォータの引き上げは実施していません。
Concurrent jobs in accountの値は1000
で、3つのOn-demand queuesで合計400
のConcurrent jobsを設定しているので、Unallocated concurrent jobsの値は600
です。
ここで、Concurrent jobsの値を200
に設定しているOn-demand queueを設定変更、Concurrent jobsの値を300
に変更しようとしてみます。Unallocated concurrent jobsの値としては充足しているので一見変更できそうですが、(Save queue)ボタンを押下したところ、以下のようにエラーとなってしまいました。
Update queue failed
You specified a value for Concurrent jobs: 300 above the Concurrent jobs per on-demand queue '250' for your account in the current AWS Region. To resolve: Specify an integer equal to or less than the maximum, or request an increase to your Concurrent jobs per on-demand queue, by using Service Quotas. Then resubmit your request.
Concurrent jobs per on-demand queueの値が250
であるため、300
には変更できない、ということですね。クォータの引き上げをリクエストするか、別のOn-demand Queueを作成して利用することなどを検討しましょう。
そして Queue configuration for Concurrent jobs(同時ジョブのキュー設定) についてです。Concurrent jobs(同時ジョブ)が一度に処理できるジョブの最大数であること、またConcurrent jobs in account(アカウント内の同時ジョブ)とConcurrent jobs per on-demand queue(オンデマンドキューあたりの同時ジョブ)の2つのサービスクォータの制限を受けることが記載されています。またReference guideのService quotasにはリージョンごとに、このOn-demand QueueにおけるConcurrent jobsのデフォルト値が異なる点が記載されています。us-west-1、us-west-2、そしてeu-west-1が200
、それ以外のリージョンはそれぞれ100
とのことです。
さて、これらから例えば東京リージョン(ap-northeast-1)ではデフォルトで1つのOn-demand Queueあたり最大100
のジョブが並列処理されることになります。ふと、並列処理可能なジョブの数はこんなに大きな値だったっけ、という点が気になりました。(たしか、ここまで大きな値ではなかったのではないかという気がしたのです。)こんなときはWayback Machineを使って過去の該当ページを確認していきます。
Reference guideのAWS Elemental MediaConvert endpoints and quotasのアーカイブページの中で最も古いアーカイブ、2020/04/05の時点でのページを確認してみました。
引用元: 2020/04/05時点のアーカイブ - AWS Elemental MediaConvert Endpoints and Quotas - AWS General Reference
すべてのOn-demand Queueでの合計Concurrent jobsのクォータとして、リージョンごと40
ないし20
の値がベースラインとして設定されています。そしてもう1つ、On-demand QueueごとのConcurrent jobsのクォータとして200
ないし100
がピーク値として設定されています。
すべてのQueueでのベースラインと個々のQueueでのピーク、少し複雑な感じがしますが、まずベースとしてすべてのQueue合計でのConcurrent jobのクォータがあり(すべてのQueueでのベースライン)、個々のQueueの使用状況に応じて複数のJobを処理しているQueueなどはベースラインを超えたJobが処理可能(個々のQueueでのピーク)、という動作だったと記憶しています。
最新のサービスクォータでは個々のQueueのConcurrent jobはデフォルトで200
ないし100
、引き上げリクエストなしで500
ないし250
まで設定可能なリージョンもあります。以前のピークの値と同等もしくはそれ以上が設定可能ということになっています。またアカウント内のすべてのQueueのConcurrent jobsの合計としては2000
ないし1000
ですので、こちらも以前よりも大きな値になっていることが確認できますね。
なお、今回のアップデート(2024/11/20)以前の最新アーカイブである2024/05/21の時点のページを確認すると、すべてのQueueでのベースラインのServcie quotasについては項目がなくなり、個々のQueueでのピーク値のみがConcurent jobsに関わるサービスクォータとして記載されていました。この個々のQueueでのピーク値は2020/04/05時点と同じ値でした。
引用元: 2024/05/21時点のアーカイブ - AWS Elemental MediaConvert Endpoints and Quotas - AWS General Reference
今回のアップデートとあわせて、Concurrent jobsに関連するService Quotasについても更新が入り、またそれらの値がより大きなものに設定されていることが確認できましたね。
ところで、Wayback Machineで過去ページを参照しながら気がついたのですが、MediaConvert User GuideのOn-demand queuesのページも今回の更新で内容が刷新、充実したなと思います。以下は2023/06/05時点のAbout on-demand queuesのページですが、最新のOn-demand queuesのページと比較してみると興味深いですね。
引用元: 2023/06/05時点のアーカイブ - About on-demand queues - MediaConvert
まとめ
AWS Elemental MediaConvertで個々のOn-demand QueueごとConcurrent jobs(同時ジョブ)の値が確認、設定できるようになったアップデートについてお届けしました。またAWSアカウント内で設定可能なConcurrent jobsの合計数(Concurrent jobs in account)や、On-demand Queueに割り当てられていないConcorre jobsの値(Unallocated concurrent jobs)もマネジメントコンソールなどで確認可能になっています。同時に、MediaConvert User Guideの該当箇所の内容や関連するService Quotasについても刷新されました。QueueごとにConcurrent jobsの値が確認、設定できるようになったことで、大量のJobを並列処理する際にはQueueごとの優先度などの制御がしやすくなったのではないでしょうか。またMediaConvertでどのぐらいの数のJobが並列処理可能かがより明確になっているかと思います。
おまけ: Concurrent jobsの値を1にしたQueueの挙動
最後におまけです。Concurrent jobsの値を1に設定したQueueの挙動を確認してみたので、記録としてまとめておきます。
次の仮説を立てました。Concurrent jobsを1にすることで、そのQueueでは並列処理できる最大Jobは1つのみとなる。そしてそのQueueに対し、1つのJobを送信し処理中の状態で2つ目のJobを送信したら、2つ目のJobはQueueの中で処理待ち状態になる。1つ目の処理が終了しだい、2つ目のJobの処理がはじまる。
実際にQueueのConcurent jobsの値を1に設定して、この仮説が正しいか動作を確認しました。今回確認した限りでは仮説のような動作は しませんでした 。Concurrent jobsの値は1なのに、2つのJobが並列処理されProgressing jobs countが2になる、という状況となりました。
QueueのConcurrent Jobsの値は100とか200とか、あくまである程度大きな数の並列処理数の制御を想定したものであり、Queueごとに並列処理は1つまでといった小さな数を設定することは考慮されていないのかもしれません。また、今回の動作検証ではH.264/AVCコーデックで出力動画の長さが3分程度といった、小さめの(処理時間の短い)Jobで行いました。処理時間が長いなどある程度大きめのJobでないと制限対象とならない、といったこともあるかもしれません。機会があれあば条件などを変え、並列処理されるJobが実際にどのように制限されるかも確認してみたいと思います。