Comment résoudre l'erreur ConnectTimeoutError lors de la connexion à un cluster Amazon EMR depuis mon bloc-notes Amazon SageMaker Studio ?

Dernière mise à jour : 14-11-2022

Je souhaite résoudre l'erreur de délai de connexion que je reçois lorsque j'essaie de me connecter à un cluster Amazon EMR depuis mon bloc-notes Amazon SageMaker Studio.

Solution

L'erreur de délai de connexion peut se produire en raison de problèmes de configuration réseau liés aux éléments suivants pour SageMaker Studio ou le cluster Amazon EMR :

  • Amazon Virtual Private Cloud (Amazon VPC)
  • Sous-réseaux
  • Groupes de sécurité

Assurez-vous que les conditions préalables suivantes sont remplies pour la connexion :

  • SageMaker Studio est lancé en mode VPC uniquement.
  • Le cluster Amazon EMR et le bloc-notes SageMaker Studio sont lancés dans le même VPC. S'ils se trouvent dans des VPC différents, ils sont connectés via une connexion d'appairage VPC. Si l’appairage VPC est utilisé pour votre cas d'utilisation interrégional, vous devez configurer le fichier de configuration /etc/sparkmagic/config.json manuellement. Cela est dû au fait que la fonctionnalité de découverte du cluster Amazon EMR ne prend actuellement pas en charge les connexions entre régions. Pour plus d’informations, consultez Créer des blocs-notes Amazon SageMaker reposant sur Spark dans Amazon EMR.
  • Le cluster Amazon EMR est lancé avec les applications Apache Spark et Apache Livy installées.

Pour résoudre les erreurs de délai de connexion, procédez comme suit :

1.    Effectuez les vérifications suivantes :

  • Assurez-vous que les groupes de sécurité ou les listes de contrôle d'accès réseau (ACL) sont correctement configurés pour autoriser le trafic sur le port 8998. Effectuez cette vérification à la fois pour le bloc-notes SageMaker Studio et pour le cluster Amazon EMR.
  • Assurez-vous que le groupe de sécurité pour SageMaker Studio dispose d'une règle entrante autorisant le trafic NFS via le port 2049 entre le domaine et le volume Amazon Elastic File System (Amazon EFS).
  • Assurez-vous que le groupe de sécurité du nœud principal du cluster EMR possède une règle entrante pour le TCP personnalisé sur le port 8998. Cette règle peut spécifier le groupe de sécurité du Studio ou un CIDR incluant le sous-réseau du Studio.
    Remarque : Si vous utilisez l'appairage VPC, consultez Mettre à jour vos groupes de sécurité pour faire référence à des groupes de sécurité homologues. Cette documentation fournit des informations sur la manière de spécifier un groupe de sécurité à partir d'un VPC multi-comptes. Si vous disposez d'une connexion d'appairage de VPC entre les sous-réseaux Amazon EMR et Studio, les tables de routage respectives doivent acheminer le trafic entre elles. S'ils n'acheminent pas correctement le trafic, vous obtenez le ConnectTimeoutError.

2.    Si vous configurez votre sous-réseau privé en mode VPC uniquement sans passerelle NAT, créez les points de terminaison de l'interface AWS PrivateLink suivants pour EMR et Service de jetons de sécurité AWS (AWS STS), respectivement :

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

Ces points de terminaison doivent être créés dans le cadre du VPC utilisé avec le cluster EMR et SageMaker Studio.

AWS STS est un service mondial. Par conséquent, vous pouvez obtenir l'erreur ConnectTimeoutError lorsque vous essayez de vous connecter à un cluster Amazon EMR multi-comptes depuis Studio dans une région autre que us-east-1 :

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

Pour résoudre cette erreur, définissez la variable d'environnement AWS_STS_REGIONAL_ENDPOINTS sur regional dans le bloc-notes Jupyter avant d'exécuter la commande connect :

%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

Pour plus d'informations sur les points de terminaison régionaux, consultez Gestion d'AWS STS dans une région AWS et de points de terminaison régionaux AWS STS.

3.    Vérifiez si la connexion fonctionne en ouvrant votre bloc-notes Studio, en sélectionnant le noyau Sparkmagic, puis en exécutant la commande suivante dans la cellule :

Pour les connexions au sein d'un même compte :

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

Envisagez les connexions entre comptes :

%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>

-ou-

Exécutez la commande suivante depuis le terminal du bloc-notes sur l'adresse IP privée du nœud principal EMR :

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

Procédez aux vérifications suivantes pour vous assurer que les configurations sont exactes :

Connectez-vous en SSH au cluster EMR pour récupérer le PID du service Livy :

ps -ef | grep livy

Vérifiez le port sur lequel le service Livy est exécuté :

sudo netstat -anp | grep <PID>

Assurez-vous que le service fonctionne sur le port par défaut (8998) pour Livy.