AWS Glue で発生する、「The specified subnet does not have enough free addresses to satisfy the request」というエラーを解決する方法を教えてください。

所要時間2分
0

AWS Glue の抽出、変換、ロード (ETL) ジョブを実行したところ、実行に失敗し、サブネットでは空き IP アドレス数が不足していることを示すエラーメッセージが表示されました。

簡単な説明

AWS Glue ETL ジョブを実行する際、次のいずれかのエラーが発生する場合があります。

  • 「The specified subnet does not have enough free addresses to satisfy the request.(Service: AmazonEC2; Status Code: 400; Error Code: InsufficientFreeAddressesInSubnet; Request ID: my_request_id)」 (指定したサブネットでは、リクエストを完了するための空きアドレス数が不足しています)
  • 「An error occurred calling o70.getDynamicFrame.Job 0 cancelled because SparkContext was shut down caused by threshold for executors failed after launch reached」 (起動後のエグゼキュータでのエラー数がしきい値に達したため、SparkContext がシャットダウンされ、Job 0 はキャンセルされました)

上記のエラーは、次の理由で発生します。

  • AWS Glue ジョブが、使用可能な IP アドレスよりも多くのデータ処理ユニット (DPU) を使用している。
  • 他の AWS サービスが同じサブネットの IP アドレスを使用している。
  • ジョブの完了後、Elastic ネットワークインターフェイスがデタッチされなかった。

解決策

ジョブが使用する DPU の数を確認し、DPU 数を削減する

ジョブが完了済みである必要があります。ジョブが使用した DPU の数を確認し、削除できる DPU の数を判断します。

ジョブが使用した DPU の数を確認するには、次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインで [ジョブ] を選択します。
  3. 該当するジョブを選択し、[履歴] タブを選択します。
  4. [最大キャパシティ] 列で DPU の数を確認します。

次に、ジョブから削除する DPU の数を決定します。

DPU の数は、ネットワークインターフェースの数とは異なります。

各ワーカーには 1 つのネットワークインターフェイスが必要です。ただし、次のワーカータイプにはそれぞれ追加のネットワークインターフェイスが必要です。

  • Standard ワーカータイプ (ワーカーあたり 1 DPU)
  • G1.X ワーカータイプ (ワーカーあたり 1 DPU)
  • G2.X ワーカータイプ (2 DPU)

たとえば、G.2x で 20 ワーカーを含むジョブを実行する場合、次の計算を行い IP アドレスの数を計算します。

AWS Glue 2.0/3.0/4.0 40 DPU = 19 ワーカー (エグゼキューター) + 1 ドライバー = 20 IP アドレス (AWS Glue 2.0/3.0/4.0 にはタスクランナーなし)

DPU の数を減らすには、次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインで [ジョブ] を選択し、該当するジョブを選択します。
  3. [アクション] ドロップダウンリストを選択し、[ジョブの編集] を選択します。
  4. [セキュリティ設定、スクリプトライブラリ、ジョブパラメータ (オプション)] リストを展開します。
  5. [最大キャパシティ] フィールドでジョブが使用できる DPU の最大数を減らします。
  6. 変更を保存し、ジョブを再実行します。

使用可能な IP アドレスの数を確認し、使用していないネットワークインターフェイスを削除する

まず、サブネット内の使用可能な IP アドレスの数を確認します。

次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインで [接続] を選択します。
  3. ジョブが使用している接続を選択します。
  4. [アクション] ドロップダウンリストを選択し、[詳細を表示] を選択します。
  5. サブネットを書き留めておきます。
  6. Amazon VPC コンソールを開きます。
  7. ナビゲーションペインで [サブネット] を選択します。
  8. [サブネット] ドロップダウンリストで AWS Glue 接続が使用するサブネットを選択します。
  9. [説明] タブの [使用可能な IPv4 アドレス] フィールドを参照し、サブネットで使用可能な IP アドレスの数を確認します。
  10. サブネットに AWS Glue ジョブが必要とするよりも多くの使用可能な IP アドレスがあることを確認します。

サブネットに使用可能な IP アドレスが不足している場合は、使用していないネットワークインターフェイスをすべて削除します。

使用可能な IP アドレスが多いサブネットを作成し、使用する

既存のサブネットでは IP アドレス数が不足している場合は、Amazon VPC に新しいサブネットを作成します。元の CIDR ブロックを使用することも、ブロックを新しく追加して範囲を拡張することもできます。次に、新しいサブネットが元のサブネットと同じルートテーブルネットワークアクセスコントロールリスト (ネットワーク ACL) のルールを使用していることを確認します。たとえば、以前のサブネットにインターネットゲートウェイへのデフォルトルートがあった場合、新しいサブネットもインターネットゲートウェイにルーティングする必要があります。

AWS Glue 接続を更新し、新しいサブネットを使用するようにする

次の手順を実行します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーションペインで [接続] を選択します。
  3. AWS Glue ジョブが使用する接続を選択します。
  4. [アクション] ドロップダウンリストで [接続の編集] を選択します。
  5. [接続のプロパティを設定] ページで [次へ] を選択します。
  6. [データストアへのアクセスを設定] ページの [サブネット] ドロップダウンリストで新しいサブネットを選択します。
  7. [次へ] を選択してから、[完了] を選択します。
  8. ジョブを再実行します。

関連情報

Spark ジョブでジョブプロパティを定義する

AWS Glue から Amazon RDS データストアへの JDBC 接続用に Amazon VPC を設定する

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ