AWS Glueのジョブ同時実行数制限には気をつけた方がいいという話

2019.10.28

おつかれさまです。

最近業務で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

私の理解

  1. Number of concurrent job runs per accountはおそらくアカウントあたりにジョブ50個まで同時実行できるってことだな。」
  2. Number of concurrent job runs per jobってなんだろ。。。job runs per jobってことは同じジョブを複数同時実行できるってことかな?」
  3. 「ジョブプロパティでMax concurrencyが設定できることを考えると、1つのジョブを同時実行できるのが最大1000個までという理解でよさそう。」
  4. 「つまり、アカウント内で別々のジョブだったら同時起動最大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個目を起動しようとでエラーが返ってきた。。。

実際の仕様

サポートに問い合わせたところ

  1. 正しい
  2. 正しい
  3. 正しい
  4. 間違い

という結果でした。

実際は

「(ジョブ関係なく)アカウント内のジョブの最大同時実行数は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になっているので、注意が必要です。

まとめ

いかがだったでしょうか。

ドキュメントを勝手に解釈してしまって、意外なところでハマりました。

しっかりと裏取りすべきでした。今後気をつけていきたいです。