

# Tutorial: Configuración de PyCharm Professional con un punto de conexión de desarrollo
<a name="dev-endpoint-tutorial-pycharm"></a>

En este tutorial, comprobará cómo conectar el IDE de Python [PyCharm Professional](https://www.jetbrains.com/pycharm/) que se ejecuta en su equipo local a un punto de enlace de desarrollo para que pueda ejecutar, depurar y probar de forma interactiva scripts de ETL (extraer, transferir y cargar) de AWS Glue antes de implementarlos. Las instrucciones y las capturas de pantalla del tutorial se basan en PyCharm Professional versión 2019.3.

Para conectarse a un punto de enlace de desarrollo de forma interactiva, debe haber instalado PyCharm Professional. Esto no podrá efectuarse con la edición gratuita.

**nota**  
El tutorial utiliza Amazon S3 como origen de datos. Si desea utilizar un origen de datos JDBC en su lugar, debe ejecutar el punto de enlace de desarrollo en una nube virtual privada (VPC). Para conectarse con SSH a un punto de enlace de desarrollo en una instancia de VPC, debe crear un túnel SSH. Este tutorial no incluye instrucciones para crear túneles SSH. Para obtener información sobre el uso de SSH para conectarse a un punto de enlace de desarrollo en una VPC, consulte [Securely Connect to Linux Instances Running in a Private Amazon VPC (Conexión segura a instancias de Linux que se ejecutan en una instancia de Amazon VPC privada)](https://aws.amazon.com/blogs/security/securely-connect-to-linux-instances-running-in-a-private-amazon-vpc/) en el blog de seguridad de AWS.

**Topics**
+ [Conexión de PyCharm Professional a un punto de conexión de desarrollo](#dev-endpoint-tutorial-pycharm-connect)
+ [Implementación del script en el punto de conexión de desarrollo](#dev-endpoint-tutorial-pycharm-deploy)
+ [Configuración de un intérprete remoto](#dev-endpoint-tutorial-pycharm-interpreter)
+ [Ejecución del script en el punto de conexión de desarrollo](#dev-endpoint-tutorial-pycharm-debug-run)

## Conexión de PyCharm Professional a un punto de conexión de desarrollo
<a name="dev-endpoint-tutorial-pycharm-connect"></a>

1. Cree un nuevo proyecto de Python puro en PyCharm y llámelo `legislators`.

1. Cree un archivo denominado `get_person_schema.py` en el proyecto con el siguiente contenido:

   ```
   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. Realice una de las siguientes acciones:
   + Para la versión 0.9 de AWS Glue, descargue el archivo de la biblioteca de Python de `PyGlue.zip`, AWS Glue, desde `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip` en la ubicación que prefiera de su equipo local.
   + Para la versión 1.0 y posteriores de AWS Glue, descargue el archivo de la biblioteca de Python de AWS Glue, `PyGlue.zip`, desde `https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip` en la ubicación que prefiera de su equipo local.

1. Añada `PyGlue.zip` como raíz de contenido para el proyecto en PyCharm:
   + En PyCharm, seleccione **File** (Archivo) y **Settings** (Configuración) para abrir el cuadro de diálogo **Settings** (Configuración). (También puede pulsar `Ctrl+Alt+S`.)
   + Amplíe el proyecto `legislators` y seleccione **Project Structure** (Estructura del proyecto). A continuación, en el panel derecho, seleccione **\$1 Add Content Root** (\$1 Añadir raíz de contenido).
   + Vaya a la ubicación donde guardó `PyGlue.zip`, selecciónelo y, a continuación, seleccione **Apply** (Aplicar).

    La pantalla **Settings** (Configuración) debe asemejarse a la siguiente:  
![\[La pantalla de configuración de PyCharm con PyGlue.zip que se añadió como raíz de contenido.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_AddContentRoot.png)

   Deje abierto el cuadro de diálogo **Settings** (Configuración) después de seleccionar **Apply** (Aplicar).

1. Configure las opciones de implementación para cargar el script local en el punto de enlace de desarrollo con SFTP (esta función solo está disponible en PyCharm Professional):
   + En el cuadro de diálogo **Settings** (Configuración), expanda la sección **Build, Execution, Deployment** (Generación, ejecución, implementación). Seleccione la subsección **Deployment** (Implementación).
   + Seleccione el icono **\$1** en la parte superior del panel central para añadir un nuevo servidor. Establezca **Type (Tipo)** en `SFTP` y asígnele un nombre.
   + Establezca el **SFTP host (Host SFTP)** en la opción de **Public address (Dirección pública)** de su punto de enlace de desarrollo, tal y como aparece en la página de detalles. (Elija el nombre del punto de enlace de desarrollo en la consola de AWS Glue para mostrar la página de detalles). Para un punto de enlace de desarrollo que se ejecuta en una instancia de VPC, establezca el valor de **SFTP host (Host SFTP)** en la dirección del host y el puerto local del túnel SSH en el punto de enlace de desarrollo.
   + Establezca **User name** (Nombre de usuario) en `glue`.
   + Establezca **Auth type** (Tipo de autenticación) en **Key pair (OpenSSH or Putty)** (Par de claves (OpenSSH o Putty)). Defina **Private key file** (Archivo de clave privada); para ello, vaya a la ubicación donde se encuentra el archivo de clave privada del punto de enlace de desarrollo. Tenga en cuenta que PyCharm solo es compatible con los tipos de claves DSA, RSA y ECDSA OpenSSH y no acepta claves en formato privado de Putty. Puede utilizar una versión actualizada de `ssh-keygen` para generar un tipo de par de claves que acepte PyCharm, usando una sintaxis como la siguiente:

     ```
     ssh-keygen -t rsa -f <key_file_name> -C "<your_email_address>"
     ```
   + Seleccione **Test connection (Probar conexión)** y pruebe la conexión. Si la conexión se realiza correctamente, seleccione **Apply** (Aplicar).

    La pantalla **Configuración** debe asemejarse ahora a la siguiente:  
![\[La pantalla de configuración de PyCharm con un servidor SFTP definido.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_SFTP.png)

   De nuevo, deje abierto el cuadro de diálogo **Settings** (Configuración) después de seleccionar **Apply** (Aplicar).

1. Asigne el directorio local a un directorio remoto para la implementación:
   + En el panel derecho de la página **Deployment** (Implementación), seleccione la pestaña central en la parte superior denominada **Mappings** (Mapeos).
   + En la columna **Deployment Path** (Ruta de la implementación), escriba una ruta en `/home/glue/scripts/` para la implementación de la ruta de su proyecto. Por ejemplo: `/home/glue/scripts/legislators`.
   + Seleccione **Aplicar**.

    La pantalla **Configuración** debe asemejarse ahora a la siguiente:  
![\[La pantalla de configuración de PyCharm después de mapear una implementación.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_Mapping.png)

   Seleccione **OK (Aceptar)** para cerrar el cuadro de diálogo **Settings (Configuración)**.

## Implementación del script en el punto de conexión de desarrollo
<a name="dev-endpoint-tutorial-pycharm-deploy"></a>

1. Elija **Tools (Herramientas)**, **Deployment (Implementación)** y, a continuación, seleccione el nombre con el que ha configurado el punto de enlace de desarrollo, tal como se muestra en la imagen siguiente:  
![\[El elemento de menú para implementar el script.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_Deploy.png)

   Después de implementar el script, la parte inferior de la pantalla tendrá un aspecto similar al siguiente:  
![\[La parte inferior de la pantalla de PyCharm después realizar correctamente una implementación.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_Deployed.png)

1. En la barra de menús, elija **Tools (Herramientas)**, **Deployment (Implementación)**, **Automatic Upload (always) [Carga automática (siempre)]**. Asegúrese de que aparezca una marca de verificación junto a **Automatic Upload (always) [Carga automática (siempre)]**.

   Cuando esta opción está habilitada, PyCharm carga automáticamente los archivos modificados en el punto de enlace de desarrollo.

## Configuración de un intérprete remoto
<a name="dev-endpoint-tutorial-pycharm-interpreter"></a>

Configure PyCharm para utilizar el intérprete de Python en el punto de enlace de desarrollo.

1. En el menú **File (Archivo)**, elija **Settings (Configuración)**.

1. Expanda los **legisladores** del proyecto y elija **Project Interpreter (Intérprete del proyecto)**.

1. Elija el icono de engranaje situado junto a la lista de **Project Interpreter (Intérprete del proyecto)** y, a continuación, elija **Add (Agregar)**.

1. En el cuadro de diálogo **Add Python Interpreter (Agregar intérprete de Python)**, en el panel izquierdo, elija **SSH Interpreter (Intérprete de SSH)**.

1. Elija **Existing server configuration (Configuración del servidor existente)** y, en la lista **Deployment configuration (Configuración de implementación)**, seleccione la configuración.

   La pantalla tendrá un aspecto similar a la imagen siguiente:  
![\[En el panel izquierdo aparece seleccionado SSH Interpreter (Intérprete de SSH) y, en el derecho, el botón de opción Existing server configuration (Configuración del servidor existente). El campo Deployment configuration (Configuración de implementación) contiene el nombre de la configuración y el mensaje “Remote SDK is saved in IDE settings, so it needs the deployment server to be saved there too. Which do you prefer? (El SDK remoto está guardado en la configuración de IDE, por lo que es necesario que el servidor de implementación se guarde allí también. ¿Cuál prefiere?)" Las opciones siguientes aparecen bajo el mensaje indicado: “Create copy of this deployment server in IDE settings (Crear copia de este servidor de implementación en la configuración de IDE)” y “Move this server to IDE settings (Mover este servidor a la configuración de IDE)”.\]](http://docs.aws.amazon.com/es_es/glue/latest/dg/images/PyCharm_Interpreter1.png)

1. Elija **Move this server to IDE settings (Mover este servidor a la configuración de IDE)**, y, a continuación, elija **Next (Siguiente)**.

1. En el campo **Interpreter (Intérprete)**, cambie la ruta a` /usr/bin/gluepython` si está utilizando Python 2 o a `/usr/bin/gluepython3` si está utilizando Python 3. A continuación, elija **Finalizar**.

## Ejecución del script en el punto de conexión de desarrollo
<a name="dev-endpoint-tutorial-pycharm-debug-run"></a>

Para ejecutar el script:
+ En el panel izquierdo, haga clic con el botón derecho en el nombre del archivo y elija **Run (Ejecutar) “*<nombreArchivo>*”**.

  Después de una serie de mensajes, la salida final debe mostrar el recuento y el esquema.

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

Ya ha terminado la configuración para depurar el script de forma remota en el punto de enlace de desarrollo.