Tutorial: Configuración de PyCharm Professional con un punto de enlace de desarrollo - AWS Glue

Tutorial: Configuración de PyCharm Professional con un punto de enlace de desarrollo

En este tutorial, comprobará cómo conectar el IDE de Python PyCharm Professional 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.

En este tutorial se supone que ha seguido los pasos que se indican en Requisitos previos del tutorial.

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) en el blog de seguridad de AWS.

Conexión de PyCharm Professional a un punto de enlace de desarrollo

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

  2. 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()
  3. Aplique alguna 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.

  4. 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 + Add Content Root (+ 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.

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

  5. 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 + 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 Settings (Configuración) debe asemejarse ahora a la siguiente:

    
            La pantalla de configuración de PyCharm con un servidor SFTP definido.

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

  6. 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 Apply.

    La pantalla Settings (Configuración) debe asemejarse ahora a la siguiente:

    
            La pantalla de configuración de PyCharm después de mapear una implementación.

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

Implementación del script en el punto de enlace de desarrollo

  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.

    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.
  2. 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

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).

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

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

  4. 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).

  5. 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)”.
  6. Elija Move this server to IDE settings (Mover este servidor a la configuración de IDE), y, a continuación, elija Next (Siguiente).

  7. 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 Finish (Finalizar).

Ejecución del script en el punto de enlace de desarrollo

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.