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 の数を確認するには、次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [ジョブ] を選択します。
- 該当するジョブを選択し、[履歴] タブを選択します。
- [最大キャパシティ] 列で 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 の数を減らすには、次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [ジョブ] を選択し、該当するジョブを選択します。
- [アクション] ドロップダウンリストを選択し、[ジョブの編集] を選択します。
- [セキュリティ設定、スクリプトライブラリ、ジョブパラメータ (オプション)] リストを展開します。
- [最大キャパシティ] フィールドでジョブが使用できる DPU の最大数を減らします。
- 変更を保存し、ジョブを再実行します。
使用可能な IP アドレスの数を確認し、使用していないネットワークインターフェイスを削除する
まず、サブネット内の使用可能な IP アドレスの数を確認します。
次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [接続] を選択します。
- ジョブが使用している接続を選択します。
- [アクション] ドロップダウンリストを選択し、[詳細を表示] を選択します。
- サブネットを書き留めておきます。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで [サブネット] を選択します。
- [サブネット] ドロップダウンリストで AWS Glue 接続が使用するサブネットを選択します。
- [説明] タブの [使用可能な IPv4 アドレス] フィールドを参照し、サブネットで使用可能な IP アドレスの数を確認します。
- サブネットに AWS Glue ジョブが必要とするよりも多くの使用可能な IP アドレスがあることを確認します。
サブネットに使用可能な IP アドレスが不足している場合は、使用していないネットワークインターフェイスをすべて削除します。
使用可能な IP アドレスが多いサブネットを作成し、使用する
既存のサブネットでは IP アドレス数が不足している場合は、Amazon VPC に新しいサブネットを作成します。元の CIDR ブロックを使用することも、ブロックを新しく追加して範囲を拡張することもできます。次に、新しいサブネットが元のサブネットと同じルートテーブルとネットワークアクセスコントロールリスト (ネットワーク ACL) のルールを使用していることを確認します。たとえば、以前のサブネットにインターネットゲートウェイへのデフォルトルートがあった場合、新しいサブネットもインターネットゲートウェイにルーティングする必要があります。
AWS Glue 接続を更新し、新しいサブネットを使用するようにする
次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで [接続] を選択します。
- AWS Glue ジョブが使用する接続を選択します。
- [アクション] ドロップダウンリストで [接続の編集] を選択します。
- [接続のプロパティを設定] ページで [次へ] を選択します。
- [データストアへのアクセスを設定] ページの [サブネット] ドロップダウンリストで新しいサブネットを選択します。
- [次へ] を選択してから、[完了] を選択します。
- ジョブを再実行します。
関連情報
Spark ジョブでジョブプロパティを定義する
AWS Glue から Amazon RDS データストアへの JDBC 接続用に Amazon VPC を設定する