AWS Glue の「The specified subnet does not have enough free addresses to satisfy the request」エラーを解決するにはどうすればよいですか?

最終更新日: 2021 年 7 月 26 日

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 while calling o70.getDynamicFrame. (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 の数を確認します。

  1. AWS Glue コンソールを開きます。
  2. ナビゲーション ペインで [ジョブ] を選択します。
  3. ジョブを選択し、[履歴] ビューを選択します。
    [最大容量] 列には、ジョブに使用した DPU の数が表示されます。

次の手順に従って、ジョブの DPU 数を減らします。

  1. ジョブから削除する 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 が追加で 2 つ必要
    G2.X ワーカータイプ (2 DPU): Elastic Network Interface が追加で 2 つ必要

    以下はその例です。
    20 個の DPU でジョブを実行している場合は、次のようにして IP アドレスの数を計算できます。
    AWS Glue 0.9/1.0: 20 DPU = 19 ワーカー (エグゼキューター) + 1 マスター (ドライバー) + 1 タスクランナー = 21 IP アドレス
    AWS Glue 2.0 の場合: 20 DPU = 19 ワーカー (エグゼキューター) + 1 マスター (ドライバー) = 20 IP アドレス (AWS Glue 2.0 ではタスクランナーなし)

  2. ナビゲーション ペインで [ジョブ] を選択します。
  3. [アクション] ドロップダウンリストを選択し、[ジョブの編集] をクリックします。
  4. [セキュリティ設定、スクリプトライブラリおよびジョブパラメータ (オプション)] リストを展開します。
  5. [最大容量 ] フィールドに、小さい値を入力します。このフィールドは、ジョブが使用できる DPU の最大数を設定します。
  6. 変更を保存してから、ジョブを再度実行します。

使用していない Elastic Network Interface を削除する

以下の手順に従って、サブネットで使用できる IP アドレスの数を確認してください。

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

使用できる IP アドレスの数が、AWS Glue ジョブに必要な IP アドレスの数を上回ることを確認してください。

使用できる IP アドレスの数が AWS Glue ジョブの実行に必要な数を下回る場合は、未使用の Elastic Network Interface を削除します

使用できる IP アドレスからなるサブネットを作成して使用する

次の手順を実行して、新しいサブネットを作成します。

  1. VPC に新しいサブネットを作成します
    注: VPC の元の CIDR ブロックを使って新しいサブネットを作成するか、VPC に CIDR ブロックを追加して、新しいサブネットで使用することができます。
  2. 古いサブネットに関連付けられているルートテーブルアクセスコントロールリスト (ACL) ルールを調べ、新しいサブネットが同じ方法でトラフィックをルーティングすることを確認します。たとえば、以前のサブネットにインターネットゲートウェイへのデフォルトルートが設定されていた場合は、新しいサブネットに同様のデフォルトルートが設定されていることを確認してください。

次の手順に従って、新しいサブネットを使用するように AWS Glue 接続を変更します。

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