

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Tutoriel : Configuration d'un PyCharm environnement professionnel avec un terminal de développement
<a name="dev-endpoint-tutorial-pycharm"></a>

Ce didacticiel explique comment connecter l'IDE Python [PyCharm professionnel](https://www.jetbrains.com/pycharm/) exécuté sur votre machine locale à un point de terminaison de développement afin de pouvoir exécuter, déboguer et tester des scripts AWS Glue ETL (extraction, transfert et chargement) de manière interactive avant de les déployer. Les instructions et les captures d'écran du didacticiel sont basées sur la version PyCharm professionnelle 2019.3.

Pour vous connecter à un point de développement de manière interactive, PyCharm Professional doit être installé sur votre ordinateur. Vous ne pouvez pas le faire avec la version gratuite.

**Note**  
Le didacticiel utilise Amazon S3 comme source de données. Si vous souhaitez utiliser une source de données JDBC à la place, vous devez exécuter votre point de terminaison de développement dans un cloud privé virtuel (VPC). Pour vous connecter avec SSH à un point de terminaison de développement dans un VPC, vous devez créer un tunnel SSH. Ce didacticiel ne contient pas d'instructions pour la création d'un tunnel SSH. Pour plus d'informations sur l'utilisation de SSH pour se connecter à un point de terminaison de développement dans un VPC, consultez la [section Connexion sécurisée aux instances Linux exécutées dans un Amazon VPC privé](https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/) sur le blog de sécurité. AWS 

**Topics**
+ [Connecter un PyCharm professionnel à un terminal de développement](#dev-endpoint-tutorial-pycharm-connect)
+ [Déploiement du script sur votre point de terminaison de développement](#dev-endpoint-tutorial-pycharm-deploy)
+ [Configuration d'un interpréteur distant](#dev-endpoint-tutorial-pycharm-interpreter)
+ [Exécution de votre script sur le point de terminaison de développement](#dev-endpoint-tutorial-pycharm-debug-run)

## Connecter un PyCharm professionnel à un terminal de développement
<a name="dev-endpoint-tutorial-pycharm-connect"></a>

1. Créez un nouveau projet en Python pur dans named. PyCharm `legislators`

1. Créez un fichier nommé `get_person_schema.py` dans le projet avec le contenu suivant :

   ```
   from pyspark.context import SparkContext
   from awsglue.context import GlueContext
   
   
   def main():
       # Create a Glue context
       glueContext = GlueContext(SparkContext.getOrCreate())
   
       # Create a DynamicFrame using the 'persons_json' table
       persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json")
   
       # Print out information about this data
       print("Count:  ", persons_DyF.count())
       persons_DyF.printSchema()
   
   
   if __name__ == "__main__":
       main()
   ```

1. Effectuez l’une des actions suivantes :
   + Pour la version 0.9 de AWS Glue, téléchargez le fichier de bibliothèque Python AWS Glue, `PyGlue.zip` à l'adresse `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip`, vers un emplacement approprié sur votre ordinateur local.
   + Pour les versions 1.0 et ultérieures de AWS Glue, téléchargez le fichier de bibliothèque Python AWS Glue, `PyGlue.zip` à l'adresse `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip`, vers un emplacement approprié sur votre ordinateur local.

1. Ajoutez `PyGlue.zip` en tant que racine de contenu pour votre projet dans PyCharm :
   + Dans PyCharm, choisissez **Fichier**, **Paramètres** pour ouvrir la boîte de dialogue **Paramètres**. (Vous pouvez également appuyer sur `Ctrl+Alt+S`.)
   + Développez le projet `legislators` et choisissez **Project Structure** (Structure du projet). Ensuite, dans le panneau droit, sélectionnez **\$1 Add Content Root** (\$1 Ajouter le contenu racine).
   + Accédez à l'emplacement où vous avez enregistré `PyGlue.zip`, sélectionnez-le, puis choisissez **Apply** (Appliquer).

    L'écran **Settings** (Paramètres) doit ressembler à ceci :  
![\[L'écran des PyCharm paramètres avec PyGlue .zip ajouté en tant que racine de contenu.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_AddContentRoot.png)

   Laissez la boîte de dialogue **Settings** (Paramètres) ouverte après avoir choisi **Apply** (Appliquer).

1. Configurez les options de déploiement pour télécharger le script local sur votre terminal de développement à l'aide du protocole SFTP (cette fonctionnalité n'est disponible que dans PyCharm Professional) :
   + Dans la boîte de dialogue **Settings** (Paramètres), développez la section **Build, Execution, Deployment** (Création, exécution, déploiement). Choisissez la sous-section **Deployment** (Déploiement).
   + Sélectionnez l'icône **\$1** en haut du panneau central pour ajouter un nouveau serveur. Définissez **Type** sur `SFTP` et donnez-lui un nom.
   + Définissez **SFTP host (Hôte SFTP)** sur l'**adresse publique** de votre point de terminaison de développement, comme indiqué sur sa page de détails. (Choisissez le nom de votre point de terminaison de développement dans la console AWS Glue pour afficher la page de détails). Pour un point de terminaison de développement s'exécutant dans un VPC, définissez **SFTP host (Hôte SFTP)** sur l'adresse hôte et le port local de votre tunnel SSH sur le point de terminaison de développement.
   + Définissez le champ **User name** (Nom d'utilisateur) sur `glue`.
   + Définissez le champ **Auth type** (Type d'autorisation) sur **Key pair (OpenSSH or Putty)** (Paire de clés (OpenSSH ou Putty)). Définissez le champ **Private key file** (Fichier de clé privée) en accédant à l'emplacement du fichier de clé privée de votre point de terminaison de développement. Notez que PyCharm seuls les types de clés DSA, RSA et ECDSA OpenSSH sont pris en charge et que les clés au format privé de Putty ne sont pas acceptées. Vous pouvez utiliser une up-to-date version de `ssh-keygen` pour générer un type de paire de clés qui PyCharm accepte, en utilisant une syntaxe similaire à la suivante :

     ```
     ssh-keygen -t rsa -f <key_file_name> -C "<your_email_address>"
     ```
   + Choisissez **Test connection (Tester la connexion)** et autorisez le test de la connexion. Si la connexion est établie, choisissez **Apply** (Appliquer).

    L'écran **Settings** (Paramètres) doit désormais ressembler à ceci :  
![\[L'écran des PyCharm paramètres avec un serveur SFTP défini.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_SFTP.png)

   Laissez à nouveau la boîte de dialogue **Settings** (Paramètres) ouverte après avoir choisi **Apply** (Appliquer).

1. Mappez le répertoire local à un répertoire distant pour le déploiement :
   + Dans le panneau de droite de la page **Deployment** (Déploiement), sélectionnez l'onglet central en haut, intitulé **Mappings** (Mappages).
   + Dans la colonne **Deployment Path** (Chemin d'accès du déploiement), saisissez un chemin sous `/home/glue/scripts/` pour le déploiement du chemin de votre projet. Par exemple : `/home/glue/scripts/legislators`.
   + Cliquez sur **Appliquer**.

    L'écran **Settings** (Paramètres) doit désormais ressembler à ceci :  
![\[L'écran PyCharm des paramètres après un mappage de déploiement.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_Mapping.png)

   Choisissez **OK** pour fermer la boîte de dialogue ** Settings (Paramètres)**.

## Déploiement du script sur votre point de terminaison de développement
<a name="dev-endpoint-tutorial-pycharm-deploy"></a>

1. Choisissez **Tools (Outils)**, **Deployment (Déploiement)**, puis choisissez le nom sous lequel vous configurez votre point de terminaison de développement, comme illustré dans l'image suivante :  
![\[Élément de menu pour le déploiement de votre script.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_Deploy.png)

   Une fois que votre script a été déployé, le bas de l'écran doit ressembler à ce qui suit :  
![\[En bas de l' PyCharm écran après un déploiement réussi.\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_Deployed.png)

1. Dans la barre de menus, choisissez **Tools (Outils)**, **Deployment (Déploiement)**, **Automatic Upload (always) [Téléchargement automatique (toujours)]**. Assurez-vous qu'une coche s'affiche en regard de **Automatic Upload (always) [Téléchargement automatique (toujours)]**.

   Lorsque cette option est activée, les fichiers modifiés PyCharm sont automatiquement téléchargés sur le terminal de développement.

## Configuration d'un interpréteur distant
<a name="dev-endpoint-tutorial-pycharm-interpreter"></a>

Configurez PyCharm pour utiliser l'interpréteur Python sur le point de terminaison de développement.

1. Dans le menu **File (Fichier)**, choisissez **Settings (Paramètres)**.

1. Développez les **législateurs** du projet et choisissez **Project Interpreter (Interpréteur de projet)**.

1. Choisissez l'icône représentant un engrenage en regard de la liste **Project Interpreter (Interpréteur de projet)**, puis choisissez **Add (Ajouter)**.

1. Dans la boîte de dialogue **Add Python Interpreter (Ajouter un interpréteur Python)** dans le panneau gauche, sélectionnez **SSH Interpreter (Interpréteur SSH)**.

1. Choisissez **Existing server configuration (Configuration du serveur existant)**, et, dans la liste **Deployment configuration (Configuration du déploiement)**, choisissez votre configuration.

   Votre écran doit ressembler à l’image suivante.  
![\[Dans le panneau gauche, l'interpréteur SSH est sélectionné et, dans le panneau droit, la case d’option Existing server configuration (Configuration du serveur existant) est sélectionnée. Le champ Deployment configuration (Configuration du déploiement) contient le nom de la configuration et le message « Remote SDK is saved in IDE settings, so it needs the deployment server to be saved there too. Which do you prefer? » À la suite de ce message, les choix suivants sont disponsibles : « Create copy of this deployment server in IDE settings » (Créer une copie de ce serveur de déploiement dans les paramètres IDE) et « Move this server to IDE settings. » (Déplacer ce serveur dans les paramètres IDE)\]](http://docs.aws.amazon.com/fr_fr/glue/latest/dg/images/PyCharm_Interpreter1.png)

1. Choisissez **Move this server to IDE settings (Déplacer ce serveur dans les paramètres IDE**, puis choisissez **Next (Suivant)**.

1. Dans le champ **Interpreter (Interpréteur)** modifiez le chemin d'accès en ` /usr/bin/gluepython` si vous utilisez Python 2, ou en `/usr/bin/gluepython3` si vous utilisez Python 3. Choisissez ensuite **Finish (Terminer)**.

## Exécution de votre script sur le point de terminaison de développement
<a name="dev-endpoint-tutorial-pycharm-debug-run"></a>

Pour exécuter le script :
+ Dans le volet de gauche, cliquez avec le bouton droit sur le nom du fichier et choisissez **Exécuter *<filename>* « »**.

  Après une série de messages, la sortie finale doit afficher le nombre et le schéma.

  ```
  Count:   1961
  root
  |-- family_name: string
  |-- name: string
  |-- links: array
  |    |-- element: struct
  |    |    |-- note: string
  |    |    |-- url: string
  |-- gender: string
  |-- image: string
  |-- identifiers: array
  |    |-- element: struct
  |    |    |-- scheme: string
  |    |    |-- identifier: string
  |-- other_names: array
  |    |-- element: struct
  |    |    |-- lang: string
  |    |    |-- note: string
  |    |    |-- name: string
  |-- sort_name: string
  |-- images: array
  |    |-- element: struct
  |    |    |-- url: string
  |-- given_name: string
  |-- birth_date: string
  |-- id: string
  |-- contact_details: array
  |    |-- element: struct
  |    |    |-- type: string
  |    |    |-- value: string
  |-- death_date: string
  
  
  Process finished with exit code 0
  ```

Vous êtes maintenant en mesure de déboguer votre script à distance sur votre point de terminaison de développement.