Amazon SageMaker Studio ノートブックから Amazon EMR クラスターに接続するときに発生する ConnectTimeoutError エラーを解決するにはどうすればよいですか?

最終更新日: 2022 年 11 月 14 日

Amazon SageMaker Studio ノートブックから Amazon EMR クラスターに接続しようとすると表示される接続タイムアウトエラーをトラブルシューティングしたいと考えています。

解決方法

接続タイムアウトエラーは、SageMaker Studio または Amazon EMR クラスターの次に関連するネットワーク設定の問題が原因で発生する可能性があります。

  • Amazon Virtual Private Cloud (Amazon VPC)
  • サブネット
  • セキュリティグループ

接続に関する次の前提条件が満たされていることを確認してください。

  • SageMaker Studio は [VPC only] (VPC 専用) モードで起動します。
  • Amazon EMR クラスターと SageMaker Studio ノートブックは同じ VPC で起動されます。異なる VPC にある場合は、VPC ピアリング接続を介して接続されます。クロスリージョンのユースケースで VPC ピアリングを使用する場合は、設定ファイル /etc/sparkmagic/config.json を手動で設定する必要があります。これは、Amazon EMR クラスターの検出機能が現在クロスリージョン接続をサポートしていないためです。詳細については、「Build Amazon SageMaker notebooks backed by Spark in Amazon EMR」(Amazon EMR で Spark によってサポートされる Amazon SageMaker ノートブックを作成する) を参照してください。
  • Amazon EMR クラスターは、Apache Spark および Apache Livy アプリケーションがインストールされた状態で起動されます。

接続タイムアウトエラーを解決するには、次の操作を実行します。

1.    次のチェックを実行します。

  • セキュリティグループまたはネットワークアクセスコントロールリスト (ACL) が、ポート 8998 のトラフィックを許可するように正しく設定されていることを確認してください。SageMaker Studio ノートブックと Amazon EMR クラスターの両方についてこのチェックを実行します。
  • SageMaker Studio のセキュリティグループに、ドメインと Amazon Elastic File System (Amazon EFS) ボリューム間におけるポート 2049 経由の NFS トラフィックを許可するインバウンドルールがあることを確認してください。
  • EMR クラスターのマスターノードセキュリティグループに、ポート 8998 経由のカスタム TCP のインバウンドルールがあることを確認してください。このルールは、Studio のセキュリティグループまたは Studio のサブネットを含む CIDR のいずれかを指定できます。
    注: VPC ピアリングを使用している場合は、「セキュリティグループの更新とピアセキュリティグループの参照」を参照してください。このドキュメントは、クロスアカウント VPC からセキュリティグループを指定する方法についての情報を提供するものです。Amazon EMR と Studio サブネットの間に VPC ピアリング接続がある場合、それぞれのルートテーブルは、トラフィックを相互にルーティングする必要があります。トラフィックが適切にルーティングされない場合には ConnectTimeoutError が表示されます。

2.    NAT ゲートウェイを使用せずに [VPC only mode] (VPC 専用モード) でプライベートサブネットを設定する場合は、EMR と AWS Security Token Service (AWS STS) のために、次の AWS PrivateLink インターフェイスエンドポイントをそれぞれ作成します。

  • com.amazonaws. .elasticmapreduce
  • com.amazonaws. .sts

これらのエンドポイントは、EMR クラスターと SageMaker Studio で使用される VPC の下に作成する必要があります。

AWS STS はグローバルサービスです。そのため、us-east-1 以外のリージョンにある Studio からクロスアカウントの Amazon EMR クラスターに接続しようとすると、ConnectTimeoutError が表示されることがあります。

ConnectTimeoutError: Connect timeout on endpoint URL: "https://sts.amazonaws.com/"

このエラーを解決するには、connect コマンドを実行する前に、Jupyter Notebook 内で AWS_STS_REGIONAL_ENDPOINTS 環境変数を regional (リージョンレベル) に設定します。

%env AWS_STS_REGIONAL_ENDPOINTS=regional
%load_ext sagemaker_studio_analytics_extension.magics
%sm_analytics emr connect --cluster-id example-cluster-id --auth-type None  --assumable-role-arn arn:aws:iam::example-cross-account:role/example-role-name

リージョンレベルのエンドポイントの詳細については、「AWS リージョンでの AWS STS の管理」と「AWS STS Regionalized endpoints」(AWS STS のリージョンレベルのエンドポイント) を参照してください。

3.    Studio ノートブックを開き、Sparkmagic カーネルを選択し、セル内で次のコマンドを実行して、接続が正常に機能するかどうかを確認します。

同じアカウント内の接続の場合:

%local
!sm-sparkmagic connect --cluster-id <cluster-id>

クロスアカウント接続の場合:

%local

# If needed, use STS Regional endpoint
%env AWS_STS_REGIONAL_ENDPOINTS=regional 

!sm-sparkmagic connect --cluster-id <cluster-id> --role-arn arn:aws:iam::<cross-account>:role/<role-name>

-または-

EMR マスターノードのプライベート IP 上のノートブックターミナルから次のコマンドを実行します。

curl <EMR-Master-Private-IP>:8998/sessions -v

次のチェックを実行して、設定が正確であることを確認してください。

EMR クラスターに SSH 接続して Livy サービスの PID を取得します。

ps -ef | grep livy

Livy サービスが実行されているポートを確認します:

sudo netstat -anp | grep <PID>

サービスが Livy のデフォルトポート (8998) で実行されていることを確認してください。


Create and manage Amazon EMR Clusters from SageMaker Studio to run interactive Spark and ML workloads – Part 1 (SageMaker Studio から Amazon EMR クラスターを作成および管理して、インタラクティブな Spark および ML ワークロードを実行する – パート 1)

Create and manage Amazon EMR Clusters from SageMaker Studio to run interactive Spark and ML workloads – Part 2 (SageMaker Studio から Amazon EMR クラスターを作成および管理して、インタラクティブな Spark および ML ワークロードを実行する – パート 2)

Build Amazon SageMaker notebooks backed by Spark in Amazon EMR (Amazon EMR で Spark によってサポートされる Amazon SageMaker ノートブックを作成する)

この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?