AWS Glue の抽出、変換、ロード (ETL) ジョブで、次のいずれかのエラーが返されます。「指定されたサブネットには、リクエストを満たすのに十分な空きアドレスがありません。(サービス: AmazonEC2; ステータスコード: 400; エラーコード:InsufficientFreeAddressesInSubnet; リクエスト ID: my_request_id)」または「o70.getDynamicFrame の呼び出し中にエラーが発生しました。Job 0 cancelled because SparkContext was shut down caused by threshold for executors failed after launch reached (起動後に失敗したエグゼキュータのしきい値に達したことが原因で SparkContext がシャットダウンされたため、ジョブ 0 はキャンセルされました)」
簡単な説明
これらのエラーは、AWS Glue ジョブで使用できる IP アドレスが足りない場合に発生します。これらのエラーが発生する際によくある原因は 2 つあります。
- Virtual Private Cloud (VPC) サブネットでジョブを実行すると、AWS Glue は Elastic Network Interface をセットアップします。これにより、ジョブが VPC 内の他のリソースに安全に接続できるようになります。各 Elastic Network Interface はプライベート IP アドレスを取得します。Elastic Network Interface が期待通りに解放されない場合、ジョブで使用できる IP アドレスが不足している可能性があります。エラーを解決するには、ジョブが使用した DPU の数を確認します。次に、DPU の数を減らし、ジョブを再度実行します。または、使用していない Elastic Network Interface を削除します。
- 複数の AWS のサービスが同じサブネットを使用しています。これらのサービスは、サブネットで使用できる IP アドレスの多くを使用している可能性があります。エラーを解決するには、AWS Glue ジョブで使用できる IP アドレスをより多く持っている別のサブネットを使用します。
解決方法
これらのエラーを解決するには、次のいずれかを試してください。
ジョブのデータ処理ユニット (DPU) の数を減らす
ジョブの実行が完了したら、ジョブで使用された DPU の数を確認します。
- AWS Glue コンソールを開きます。
- ナビゲーション ペインで [ジョブ] を選択します。
- ジョブを選択し、[履歴] タブを選択します。[最大容量] 列には、ジョブに使用した DPU の数が表示されます。
次の手順に従って、ジョブの DPU 数を減らします。
- ジョブから削除する DPU の数を決定します。DPU の数は、Elastic Network Interface の数と等しくないことに注意してください。各ワーカーには、常に Elastic Network Interface が 1 つアタッチされています。ただし、次のように、各ジョブには追加の Elastic Network Interface も必要です。
標準ワーカータイプ (ワーカーあたり 1 DPU): Elastic Network Interface が追加で 1 つ必要
G1.X ワーカータイプ (ワーカーあたり 1 DPU): Elastic Network Interface が追加で 1 つ必要
G2.X ワーカータイプ (2 DPU): Elastic Network Interface が追加で 1 つ必要 例:
G.2x で 20 ワーカーの ジョブを実行している場合は、次のようにして IP アドレスの数を計算できます。
AWS Glue 0.9/1.0: 41 DPU = 20 ワーカー (エグゼキュター) + 1 マスター (ドライバー) + 1 タスクランナー = 22 IP アドレス
AWS Glue 2.0/3.0 の場合: 40 DPU = 19 ワーカー (エグゼキュター) + 1 マスター (ドライバー) = 20 IP アドレス (AWS Glue 2.0/3.0 ではタスクランナーなし)
- ナビゲーション ペインで [ジョブ] を選択します。
- [アクション] ドロップダウンリストを選択し、[ジョブの編集] をクリックします。
- [セキュリティ設定、スクリプトライブラリおよびジョブパラメータ (オプション)] リストを展開します。
- [最大容量 ] フィールドに、小さい値を入力します。このフィールドは、ジョブが使用できる DPU の最大数を設定します。
- 変更を保存してから、ジョブを再度実行します。
使用していない Elastic Network Interface を削除する
次の手順に従って、サブネットで使用できる IP アドレスの数を確認してください。
- AWS Glue コンソール を開きます。
- ナビゲーションペインで [接続] を選択します。
- 確認したい接続を選択します。
- [アクション] ドロップダウンリストで、[詳細を表示] を選択します。サブネットを書き留めます。
- Amazon VPC コンソールを開きます。
- ナビゲーションペインで、[サブネット] を選択します。
- [サブネット] ドロップダウンリストで、AWS Glue 接続が使用しているサブネットを選択します。
- [説明] タブで、[使用可能な IPv4 アドレス] フィールドを確認します。このフィールドには、サブネットで使用できる IP アドレスの数が表示されます。
使用できる IP アドレスの数が、AWS Glue ジョブに必要な IP アドレスの数を上回ることを確認してください。
使用できる IP アドレスの数が AWS Glue ジョブの実行に必要な数を下回る場合は、未使用の Elastic Network Interface を削除します。
使用できる IP アドレスからなるサブネットを作成して使用する
次の手順を実行して、新しいサブネットを作成します。
- VPC に新しいサブネットを作成します。
注: VPC の元の CIDR ブロックを使って新しいサブネットを作成するか、VPC に CIDR ブロックを追加して、新しいサブネットで使用することができます。
- 古いサブネットに関連付けられているルートテーブルとアクセスコントロールリスト (ACL) ルールを調べ、新しいサブネットが同じ方法でトラフィックをルーティングすることを確認します。たとえば、以前のサブネットにインターネットゲートウェイへのデフォルトルートが設定されていた場合は、新しいサブネットに同様のデフォルトルートが設定されていることを確認してください。
次の手順に従って、新しいサブネットを使用するように AWS Glue 接続を変更します。
- AWS Glue コンソール を開きます。
- ナビゲーションペインで [接続] を選択します。
- AWS Glue ジョブで使用している接続を選択します。
- [アクション] ドロップダウンリストで、[接続の編集] を選択します。
- [接続のプロパティを設定します] ページで、[次へ] をクリックします。
- [データストアへのアクセスを設定します] ページの [サブネット] ドロップダウンリストで、新しいサブネットを選択します。
- [次へ] を選択してから [完了] をクリックします。
- ジョブを再度実行します。
関連情報
Spark ジョブのジョブプロパティの定義
JDBC データストアに接続するための VPC のセットアップ