Amazon SageMaker Studio 노트북에서 Amazon EMR 클러스터에 연결할 때 발생하는 ConnectTimeoutError 오류를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 11월 14일

Amazon SageMaker Studio 노트북에서 Amazon EMR 클러스터에 연결하려고 할 때 발생하는 연결 시간 초과 오류를 해결하고 싶습니다.

해결 방법

연결 시간 초과 오류는 SageMaker Studio 또는 Amazon EMR 클러스터의 다음과 관련된 네트워크 구성 문제로 인해 발생할 수 있습니다.

  • Amazon Virtual Private Cloud(VPC)
  • 서브넷
  • 보안 그룹

연결에 필요한 다음 사전 조건이 충족되었는지 확인하세요.

  • SageMaker Studio가 VPC 전용 모드에서 시작됩니다.
  • Amazon EMR 클러스터와 SageMaker Studio가 동일한 VPC에서 시작됩니다. 서로 다른 VPC에 있는 경우에는 VPC 피어링 연결을 통해 연결됩니다. 크로스 리전 사용 사례에 대해 VPC 피어링을 사용하는 경우 구성 파일 /etc/sparkmagic/config.json을 수동으로 구성해야 합니다. Amazon EMR 클러스터의 검색 기능이 현재 크로스 리전 연결을 지원하지 않기 때문입니다. 자세한 내용은 Amazon EMR의 Spark 기반 Amazon SageMaker 노트북 작성을 참조하세요.
  • Amazon EMR 클러스터는 Apache Spark 및 Apache Livy 애플리케이션이 설치된 상태로 시작됩니다.

연결 시간 초과 오류를 해결하려면 다음을 수행하세요.

1.    다음 검사를 수행합니다.

  • 보안 그룹 또는 네트워크 ACL(액세스 제어 목록)이 포트 8998에서 트래픽을 허용하도록 올바르게 구성되었는지 확인합니다. SageMaker Studio 노트북과 Amazon EMR 클러스터 모두에 대해 이 검사를 수행합니다.
  • 해당 도메인과 Amazon Elastic File System(Amazon EFS) 볼륨 사이에 포트 2049를 통한 NFS 트래픽을 허용하는 인바운드 규칙이 SageMaker Studio의 보안 그룹에 있는지 확인합니다.
  • 포트 8998을 통한 사용자 지정 TCP에 대한 인바운드 규칙이 EMR 클러스터 프라이머리 노드 보안 그룹에 있는지 확인합니다. 이 규칙은 Studio의 보안 그룹, 또는 Studio의 서브넷이 포함된 CIDR을 지정할 수 있습니다.
    참고: VPC 피어링을 사용하는 경우, 피어 보안 그룹을 참조하도록 보안 그룹 업데이트를 참조하세요. 이 설명서에서는 크로스 계정 VPC에서 보안 그룹을 지정하는 방법에 대한 정보를 제공합니다. Amazon EMR과 Studio 서브넷 사이에 VPC 피어링 연결이 있는 경우 각 라우팅 테이블이 트래픽을 서로 라우팅해야 합니다. 트래픽을 제대로 라우팅하지 않으면 ConnectTimeoutError가 발생합니다.

2.    NAT 게이트웨이가 없는 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_ENDPOINTSregional(리전별)로 설정합니다.

%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 리전화된 엔드포인트를 참조하세요.

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

다음 검사를 수행하여 구성이 정확한지 확인합니다.

SSH를 통해 EMR 클러스터에 연결하여 Livy 서비스의 PID를 가져옵니다.

ps -ef | grep livy

Livy 서비스가 실행 중인 포트를 확인합니다.

sudo netstat -anp | grep <PID>

서비스가 Livy의 기본 포트(8998)에서 실행되고 있는지 확인합니다.