Connexion à un cluster Amazon EMR à partir de votre bloc-notes
Si vous vous connectez à un cluster Amazon EMR à partir de votre bloc-notes Jupyter dans Studio, vous devrez peut-être effectuer une configuration supplémentaire. La discussion suivante aborde en particulier deux questions :
-
Transmission de paramètres à votre commande de connexion EMR dans votre bloc-notes. Dans les noyaux SparkMagic, les paramètres que vous transmettez à votre commande de connexion Amazon EMR peuvent ne pas fonctionner comme prévu en raison des différences entre la façon dont Papermill transmet les paramètres et celle dont SparkMagic reçoit les paramètres. La solution de contournement pour remédier à cette limitation consiste à transmettre des paramètres sous forme de variables d'environnement. Pour plus d’informations sur le problème et la solution de contournement, consultez Transmettez des paramètres à votre commande de connexion EMR.
-
Transmission des informations d’identification utilisateur aux clusters Amazon EMR authentifiés par Kerberos, LDAP ou HTTP Basic Auth. En mode interactif, Studio demande des informations d'identification dans un formulaire contextuel dans lequel vous pouvez saisir vos informations d'identification de connexion. Dans votre bloc-notes planifié non interactif, vous devez les transmettre via AWS Secrets Manager. Pour plus de détails sur la façon d’utiliser l’AWS Secrets Manager dans vos tâches de bloc-notes planifiées, consultez Transmettre des informations d'identification utilisateur à votre cluster Amazon EMR authentifié par Kerberos, LDAP ou HTTP Basic Auth.
Transmettez des paramètres à votre commande de connexion EMR
Si vous utilisez des images avec les noyaux SparkMagic PySpark et Spark et que vous souhaitez paramétrer votre commande de connexion EMR, indiquez vos paramètres dans le champ Environment variables (Variables d’environnement) plutôt que dans le champ Parameters (Paramètres) du formulaire Create Job (Créer une tâche) [dans le menu déroulant Additional Options (Options supplémentaires)]. Assurez-vous que votre commande de connexion EMR dans le bloc-notes Jupyter transmet ces paramètres en tant que variables d'environnement. Supposons, par exemple, que vous transmettiez cluster-id en tant que variable d’environnement lorsque vous créez votre tâche. Votre commande de connexion EMR devrait ressembler à l'exemple suivant :
%%local import os
%sm_analytics emr connect —cluster-id {os.getenv('cluster_id')} --auth-type None
Vous avez besoin de cette solution de contournement pour répondre aux exigences de SparkMagic et de Papermill. Pour le contexte, le noyau SparkMagic s'attend à ce que la commande magique %%local accompagne toutes les variables locales que vous définissez. Cependant, Papermill ne transmet pas la commande magique %%local avec vos remplacements. Pour contourner cette limitation de Papermill, vous devez fournir vos paramètres sous forme de variables d'environnement dans le champ Environment variables (Variables d'environnement).
Transmettre des informations d'identification utilisateur à votre cluster Amazon EMR authentifié par Kerberos, LDAP ou HTTP Basic Auth
Pour établir une connexion sécurisée à un cluster Amazon EMR qui utilise l'authentification Kerberos, LDAP ou HTTP Basic Auth, vous devez utiliser l'AWS Secrets Manager pour transmettre les informations d'identification utilisateur à votre commande de connexion. Pour plus d’informations sur la création d’un secret Secrets Manager, consultez Création d’un secret AWS Secrets Manager. Votre secret doit contenir votre nom d’utilisateur et votre mot de passe. Vous transmettez le secret avec l’argument --secrets, comme le montre l’exemple suivant :
%sm_analytics emr connect --cluster-id j_abcde12345 --auth Kerberos --secret aws_secret_id_123
Votre administrateur peut définir une stratégie d'accès flexible à l'aide d'une méthode de contrôle d'accès par attributs (ABAC), qui attribue l'accès en fonction de balises spéciales. Vous pouvez configurer un accès flexible afin de créer un secret unique pour tous les utilisateurs du compte ou un secret pour chaque utilisateur. Les exemples de code suivants illustrent ces scénarios :
Créer un secret unique pour tous les utilisateurs du compte
Créer un secret différent pour chaque utilisateur
Vous pouvez créer un secret différent pour chaque utilisateur à l’aide de la balise PrincipleTag, comme illustré dans l’exemple suivant :