AWS Glueのジョブ同時実行数制限には気をつけた方がいいという話
おつかれさまです。
最近業務でAWS Glueを使ってます。 マネージド型サービスで使い勝手は良いのですが、ハマりどころも多いです。
今回はそんなAWS Glueの「ジョブの同時実行数」を勘違いして、ハマったので共有したいと思います。
なぜハマったのか?
ドキュメントの解釈を誤っていた
- AWS Glueの制限事項より引用
Resource | Default |
---|---|
Number of concurrent job runs per account | 50 |
Number of concurrent job runs per job | 1,000 |
Maximum DPUs used by a role at one time | 300 |
- ジョブプロパティの定義より引用
ジョブプロパティ | 説明 | 設定範囲 | Default |
---|---|---|---|
Max concurrency | Sets the maximum number of concurrent runs that are allowed for this job. | 1-1000 | 1 |
Maximum capacity | The maximum number of AWS Glue data processing units (DPUs) that can be allocated when this job runs. | 2-100 | 10 |
私の理解
- 「
Number of concurrent job runs per account
はおそらくアカウントあたりにジョブ50個まで同時実行できるってことだな。」 - 「
Number of concurrent job runs per job
ってなんだろ。。。job runs per job
ってことは同じジョブを複数同時実行できるってことかな?」 - 「ジョブプロパティで
Max concurrency
が設定できることを考えると、1つのジョブを同時実行できるのが最大1000個までという理解でよさそう。」 - 「つまり、アカウント内で別々のジョブだったら同時起動最大50個までだが、同じジョブなら最大1000個まで同時起動できるってことか!」
実際の挙動
1つのジョブを以下のパラメータで作成
- Maximum capacity:
2
- Max concurrency:
1,000
複数並列実行を開始
Num: 1 { "JobRunId": "jr_xxxxxxxxxx" } ...省略 Num: 50 { "JobRunId": "jr_xxxxxxxxxx" } Num: 51 An error occurred (ResourceNumberLimitExceededException) when calling the StartJobRun operation: Failed to meet resource limits for operation
51個目を起動しようとでエラーが返ってきた。。。
実際の仕様
サポートに問い合わせたところ
- 正しい
- 正しい
- 正しい
- 間違い
という結果でした。
実際は
「(ジョブ関係なく)アカウント内のジョブの最大同時実行数は50」かつ「1つのジョブの最大同時実行数は1000」
が正解です。
つまり、現在の制限のままだNumber of concurrent job runs per account
が支配的になって、1つのジョブを同時に動かせるのも50個だけとのことです。
そもそも別の観点で設定された制限事項なんでしょう。ちなみに、Number of concurrent job runs per account
は上限緩和申請ができるみたいです。
また、Maximum DPUs used by a role at one time
も同時実行数に関わる制限です。
たとえば、1つのロールをジョブ(10DUP)アタッチすると、このジョブは30までしか同時起動できません。
ジョブ作成時のデフォルトDUPが10になっているので、注意が必要です。
まとめ
いかがだったでしょうか。
ドキュメントを勝手に解釈してしまって、意外なところでハマりました。
しっかりと裏取りすべきでした。今後気をつけていきたいです。