Uso de bibliotecas de Python con AWS Glue - AWS Glue

Uso de bibliotecas de Python con AWS Glue

Puede instalar módulos y bibliotecas adicionales de Python para su uso con ETL de AWS Glue. Para AWS Glue 2.0 y versiones posteriores, AWS Glue utiliza el instalador de paquetes de Python (pip3) para instalar los módulos adicionales que utilizará ETL de AWS Glue. AWS Glue ofrece varias opciones para incorporar los módulos de Python adicionales a su entorno de trabajo de AWS Glue. Puede usar el parámetro --additional-python-modules para introducir módulos nuevos mediante archivos zip que contengan wheels de Python agrupados (también conocidos como “zip de wheels”, disponibles para AWS Glue 5.0 y versiones posteriores), archivos wheel de Python individuales, archivos de requisitos (requirements.txt, disponibles para AWS Glue 5.0 y versiones posteriores) o una lista de módulos de Python separados por comas. También se puede usar para cambiar la versión de los módulos de Python proporcionados en el entorno de AWS Glue (consulte Módulos de Python que ya se proporcionaron en AWS para obtener más detalles).

Instalación de módulos adicionales de Python en AWS Glue 2.0 (o posterior) con pip

AWS Glue utiliza el instalador de paquetes de Python (pip3) para instalar los módulos adicionales que serán utilizados por AWS Glue ETL. Puede utilizar el parámetro --additional-python-modules con una lista de módulos de Python separados por comas para agregar un nuevo módulo o cambiar la versión de un módulo existente. Puede instalar artefactos wheel generados mediante un zip de wheels o un artefacto wheel independiente; para ello, debe cargar el archivo en Amazon S3 y, a continuación, incluir la ruta al objeto de Amazon S3 en la lista de módulos. Para obtener más información sobre la configuración de parámetros de trabajo, consulte Uso de parámetros de trabajo en los trabajos de AWS Glue.

Puede pasar opciones adicionales a pip3 con el parámetro --python-modules-installer-option. Por ejemplo, podría transferir --only-binary para forzar a pip a instalar únicamente artefactos prediseñados para los paquetes especificados por --additional-python-modules. Para ver más ejemplos, consulte Creación de módulos Python a partir de un archivo Wheel para cargas de trabajo de ETL de Spark mediante AWS Glue 2.0.

Prácticas recomendadas para la administración de dependencias de Python

Para las cargas de trabajo de producción, AWS Glue recomienda empaquetar todas las dependencias de Python como archivos wheel en un único artefacto zip. Este enfoque proporciona lo siguiente:

  • Ejecución determinista: control exacto de las versiones de los paquetes que se instalan.

  • Fiabilidad: sin dependencia de repositorios de paquetes externos durante la ejecución del trabajo.

  • Rendimiento: operación de descarga única en lugar de múltiples llamadas a la red.

  • Instalación sin conexión: funciona en entornos de VPC privados sin acceso a Internet.

Consideraciones importantes

Según el modelo de responsabilidad compartida de AWS, usted es responsable de la administración de los módulos y las bibliotecas de Python adicionales y sus dependencias. Esto incluye:

  • Actualizaciones de seguridad: los paquetes se actualizan periódicamente para abordar las vulnerabilidades de seguridad.

  • Compatibilidad de versiones: se garantiza que los paquetes sean compatibles con su versión de AWS Glue.

  • Pruebas: se valida que las dependencias empaquetadas funcionan correctamente en el entorno de Glue.

Si tiene dependencias mínimas, en cambio, puede considerar usar archivos wheel individuales.

AWS Glue 5.0 y versiones posteriores son compatibles con el empaquetado de varios archivos wheel en un único artefacto zip que contiene los archivos wheels de Python agrupados para una administración de dependencias más fiable y determinista. Para utilizar este enfoque, cree un archivo zip que contenga todas las dependencias de wheels y sus dependencias transitivas con el sufijo .gluewheels.zip, cárguelo en Amazon S3 y haga referencia a este mediante el parámetro --additional-python-modules. Asegúrese de añadir --no-index al parámetro de trabajo --python-modules-installer-option. Con esta configuración, el archivo zip de wheels actúa básicamente como un índice local para que pip resuelva las dependencias en tiempo de ejecución. Esto elimina las dependencias de repositorios de paquetes externos, como PyPI, durante la ejecución de los trabajos, lo que proporciona una mayor estabilidad y coherencia para las cargas de trabajo de producción. Por ejemplo:

--additional-python-modules s3://amzn-s3-demo-bucket/path/to/zip-of-wheels-1.0.0.gluewheels.zip --python-modules-installer-option --no-index

Para obtener las instrucciones acerca de cómo crear un archivo zip de wheels, consulte Apéndice A: Creación de un artefacto zip de wheels.

AWS Glue admite la instalación de paquetes de Python personalizados mediante archivos Wheel (.whl) almacenados en Amazon S3. Para incluir los archivos Wheel en sus trabajos de AWS Glue, añada al parámetro del trabajo de --additional-python-modules una lista separada por comas de los archivos Wheel almacenados en S3. Por ejemplo:

--additional-python-modules s3://amzn-s3-demo-bucket/path/to/package-1.0.0-py3-none-any.whl,s3://your-bucket/path/to/another-package-2.1.0-cp311-cp311-linux_x86_64.whl

Este enfoque también es válido cuando se necesitan distribuciones personalizadas o paquetes con dependencias nativas compilados previamente para el sistema operativo correcto. Para ver más ejemplos, consulte Creación de módulos Python a partir de un archivo Wheel para cargas de trabajo de ETL de Spark mediante AWS Glue 2.0.

En AWS Glue 5.0 y versiones posteriores, puede proporcionar el requirements.txt estándar de facto para gestionar las dependencias de las bibliotecas de Python. Para ello, proporcione los dos parámetros de trabajo siguientes:

  • Clave: --python-modules-installer-option

    Valor:: -r

  • Clave: --additional-python-modules

    Valor:: s3://path_to_requirements.txt

Los nodos de AWS Glue 5.0 cargan inicialmente las bibliotecas de Python especificadas en requirements.txt.

A continuación, verá un ejemplo de requirements.txt:

awswrangler==3.9.1 elasticsearch==8.15.1 PyAthena==3.9.0 PyMySQL==1.1.1 PyYAML==6.0.2 pyodbc==5.2.0 pyorc==0.9.0 redshift-connector==2.1.3 scipy==1.14.1 scikit-learn==1.5.2 SQLAlchemy==2.0.36
importante

Utilice esta opción con precaución, especialmente en las cargas de trabajo de producción. La extracción de dependencias de PyPI en tiempo de ejecución es muy riesgoso porque no puede garantizar en qué artefacto se resuelve pip. El uso de versiones de biblioteca no fijadas es especialmente arriesgado, ya que extrae la última versión de los módulos de Python, lo que puede introducir cambios importantes o un módulo de Python incompatible. Esto podría provocar un error en el trabajo debido a un error de instalación de Python en el entorno de trabajo de AWS Glue. Si bien fijar la versión de la biblioteca aumenta la estabilidad, la resolución de pip aún no es totalmente determinista, por lo que pueden surgir problemas similares. Como práctica recomendada, AWS Glue recomienda utilizar artefactos congelados, como zip de wheels o archivos wheel individuales (consulte (Se recomienda) Instalación de bibliotecas de Python adicionales en AWS Glue 5.0 o versiones posteriores mediante un zip de wheels. para obtener más información).

importante

Si no fija las versiones de sus dependencias transitivas, una dependencia principal puede generar versiones de dependencias transitivas incompatibles. Como práctica recomendada, todas las versiones de la biblioteca deberían estar fijadas para aumentar la coherencia en los trabajos de AWS Glue. Y lo que es aún mejor, AWS Glue recomienda comprimir las dependencias en un archivo zip de wheels para garantizar la máxima coherencia y la fiabilidad de las cargas de trabajo de producción.

Para actualizar o añadir un nuevo módulo de Python, AWS Glue permite enviar el parámetro --additional-python-modules con una lista de módulos de Python separados por comas como valores. Por ejemplo, para actualizar o añadir un nuevo módulo scikit-learn, utilice la siguiente clave-valor: "--additional-python-modules", "scikit-learn==0.21.3". Tiene dos opciones para configurar directamente los módulos de Python.

  • Módulo Python fijado

    "--additional-python-modules", "scikit-learn==0.21.3,ephem==4.1.6"

  • Módulo Python desanclado: (no se recomienda para cargas de trabajo de producción)

    "--additional-python-modules", "scikit-learn>==0.20.0,ephem>=4.0.0"

    O BIEN

    "--additional-python-modules", "scikit-learn,ephem"

importante

Utilice esta opción con precaución, especialmente en las cargas de trabajo de producción. La extracción de dependencias de PyPI en tiempo de ejecución es muy riesgoso porque no puede garantizar en qué artefacto se resuelve pip. El uso de versiones de biblioteca no fijadas es especialmente arriesgado, ya que extrae la última versión de los módulos de Python, lo que puede introducir cambios importantes o un módulo de Python incompatible. Esto podría provocar un error en el trabajo debido a un error de instalación de Python en el entorno de trabajo de AWS Glue. Si bien fijar la versión de la biblioteca aumenta la estabilidad, la resolución de pip aún no es totalmente determinista, por lo que pueden surgir problemas similares. Como práctica recomendada, AWS Glue recomienda utilizar artefactos congelados, como zip de wheels o archivos wheel individuales (consulte (Se recomienda) Instalación de bibliotecas de Python adicionales en AWS Glue 5.0 o versiones posteriores mediante un zip de wheels. para obtener más información).

importante

Si no fija las versiones de sus dependencias transitivas, una dependencia principal puede generar versiones de dependencias transitivas incompatibles. Como práctica recomendada, todas las versiones de la biblioteca deberían estar fijadas para aumentar la coherencia en los trabajos de AWS Glue. Y lo que es aún mejor, AWS Glue recomienda comprimir las dependencias en un archivo zip de wheels para garantizar la máxima coherencia y la fiabilidad de las cargas de trabajo de producción.

Inclusión de archivos de Python con características nativas de PySpark

AWS Glue utiliza PySpark para incluir archivos de Python en trabajos de ETL de AWS Glue. Podrá utilizar --additional-python-modules para administrar las dependencias cuando esté disponible. Puede utilizar el parámetro de trabajo --extra-py-files para incluir archivos de Python. Las dependencias deben estar alojadas en Amazon S3 y el valor del argumento debe ser una lista delimitada por comas de rutas de Amazon S3 sin espacios. Esta funcionalidad se comporta igual que la administración de dependencias de Python que se utilizaría con Spark. Para obtener más información sobre la administración de dependencias de Python en Spark, consulte la página Using PySpark Native Features (Uso de características nativas de PySpark) en la documentación de Apache Spark. --extra-py-files resulta útil en los casos en los que el código adicional no está empaquetado, o bien cuando se migra un programa de Spark con una cadena de herramientas existente para administrar las dependencias. Para que las herramientas para dependencias sean mantenibles, deberá agrupar las dependencias antes del envío.

Scripts de programación que utilizan transformaciones visuales

Al crear un trabajo de AWS Glue con la interfaz visual de AWS Glue Studio, puede transformar los datos con nodos administrados de transformación de datos y transformaciones visuales personalizadas. Par más información sobre los nodos administrados de transformación de datos, consulte Transformación de datos con transformaciones administradas de AWS Glue. Para obtener más información sobre las transformaciones visuales personalizadas, consulte Transformación de datos con transformaciones visuales personalizadas . Los scripts que utilizan transformaciones visuales solo se pueden generar cuando el Lenguaje del trabajo está establecido para que utilice Python.

Al generar un trabajo de AWS Glue con transformaciones visuales, AWS Glue Studio incluirá estas transformaciones en el entorno de tiempo de ejecución con el parámetro --extra-py-files en la configuración del trabajo. Para obtener más información acerca de la configuración de parámetros de trabajos, consulte Uso de los parámetros de trabajo en los trabajos de AWS Glue. Cuando se realizan cambios en un script generado o un entorno de tiempo de ejecución, necesitará conservar la configuración del trabajo para que script se ejecute de manera exitosa.

Compresión de bibliotecas para inclusión

Salvo que una biblioteca se encuentre en un único archivo .py, deberá empaquetarse en un archivo .zip. El directorio del paquete debe encontrarse en la raíz del archivo y debe contener un archivo __init__.py para el paquete. Posteriormente, Python podrá importar el paquete de la forma habitual.

Si la biblioteca se compone solamente de un único módulo de Python en un archivo .py, no será necesario comprimirlo en un archivo .zip.

Carga de bibliotecas de Python en cuadernos de AWS Glue Studio

Para especificar las bibliotecas de Python en los cuadernos de AWS Glue Studio, consulte Installing additional Python modules.

Carga de bibliotecas Python en un punto de conexión de desarrollo en AWS Glue 0.9/1.0

Si utiliza diferentes conjuntos de bibliotecas para distintos scripts de ETL, puede configurar puntos de enlace de desarrollo independientes para cada conjunto o bien, puede sobrescribir los archivos .zip de la biblioteca que carga el punto de enlace de desarrollo cada vez que usted cambia de script.

Puede utilizar la consola con el fin de especificar uno o varios archivos .zip para un punto de enlace de desarrollo cuando lo cree. Después de asignar un nombre y un rol de IAM, seleccione Script Libraries and job parameters (Bibliotecas de script y parámetros de trabajo) (opcional) y escriba la ruta de Amazon S3 completa para los archivos .zip de la biblioteca en el cuadro Python library path (Ruta de la biblioteca Python). Por ejemplo:

s3://bucket/prefix/site-packages.zip

También puede especificar varias rutas completas a los archivos; para ello, sepárelas con comas pero sin espacios, como sigue:

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

Si actualiza estos archivos .zip más adelante, puede utilizar la consola para volver a importarlos en el punto de enlace de desarrollo. Vaya al punto de enlace del desarrollador que corresponda, marque la casilla junto al mismo y seleccione Update ETL libraries (Actualizar bibliotecas de ETL) desde el menú Action (Acción).

De forma similar, puede especificar archivos de la biblioteca mediante las API de AWS Glue. Cuando crea un punto de enlace de desarrollo al invocar Acción CreateDevEndpoint (Python: create_dev_endpoint), puede especificar una o varias rutas completas para las bibliotecas en el parámetro ExtraPythonLibsS3Path, en una llamada con un formato similar al siguiente:

dep = glue.create_dev_endpoint( EndpointName="testDevEndpoint", RoleArn="arn:aws:iam::123456789012", SecurityGroupIds="sg-7f5ad1ff", SubnetId="subnet-c12fdba4", PublicKey="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCtp04H/y...", NumberOfNodes=3, ExtraPythonLibsS3Path="s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip")

Cuando actualice un punto de enlace de desarrollo, también puede actualizar las bibliotecas que carga con un objeto DevEndpointCustomLibraries y si establece el parámetro UpdateEtlLibraries en True a la hora de invocar UpdateDevEndpoint (update_dev_endpoint).

Uso de bibliotecas Python en un trabajo o JobRun

Cuando crea un trabajo nuevo en la consola, puede especificar uno o más archivos .zip de la biblioteca si selecciona Script Libraries and job parameters (Bibliotecas de script y parámetros de trabajo) (opcional) y escribe las rutas completas de la biblioteca de Amazon S3, igual que cuando crea un punto de enlace de desarrollo:

s3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip

Si invoca CreateJob (create_job), puede especificar una o varias rutas completas para las bibliotecas predeterminadas mediante el parámetro predeterminado --extra-py-files , como se indica a continuación:

job = glue.create_job(Name='sampleJob', Role='Glue_DefaultRole', Command={'Name': 'glueetl', 'ScriptLocation': 's3://my_script_bucket/scripts/my_etl_script.py'}, DefaultArguments={'--extra-py-files': 's3://bucket/prefix/lib_A.zip,s3://bucket_B/prefix/lib_X.zip'})

Posteriormente, cuando inicie un JobRun, puede anular el valor predeterminado de la biblioteca con otro distinto:

runId = glue.start_job_run(JobName='sampleJob', Arguments={'--extra-py-files': 's3://bucket/prefix/lib_B.zip'})

Analizar de forma proactiva las dependencias de Python

Para identificar de forma proactiva los posibles problemas de dependencia antes de implementarlos en AWS Glue, puede usar la herramienta de análisis de dependencias para cotejar sus paquetes de Python con el entorno de AWS Glue de destino.

AWS proporciona una herramienta de análisis de dependencias de Python de código abierto diseñada específicamente para entornos de AWS Glue. Esta herramienta está disponible en el repositorio de muestras de AWS Glue y se puede utilizar localmente para validar las dependencias antes de la implementación.

Este análisis ayuda a garantizar que sus dependencias sigan la práctica recomendada de anclar todas las versiones de la biblioteca para lograr implementaciones de producción coherentes. Para obtener más información, consulte el archivo README de la herramienta.

El analizador de dependencias Python de AWS Glue ayuda a identificar las dependencias desancladas y los conflictos de versiones al simular la instalación de pip con restricciones específicas de la plataforma que se adaptan al entorno de AWS Glue objetivo.

# Analyze a single Glue job python glue_dependency_analyzer.py -j my-glue-job # Analyze multiple jobs with specific AWS configuration python glue_dependency_analyzer.py -j job1 -j job2 --aws-profile production --aws-region us-west-2

La herramienta marcará:

  • Dependencias desancladas que podrían instalar diferentes versiones en las ejecuciones de un trabajo

  • Conflictos de versiones entre paquetes

  • Dependencias no disponibles para su entorno de AWS Glue objetivo

Amazon Q Developer es un asistente conversacional con tecnología de inteligencia artificial (IA) generativa que puede ayudarle a comprender, crear, extender y operar aplicaciones de AWS. Puedes descargarlo siguiendo las instrucciones de la guía de introducción de Amazon Q.

Amazon Q Developer se puede utilizar para analizar y corregir errores en los trabajos debido a la dependencia de Python. Le sugerimos que utilice la siguiente petición y sustituya el marcador de posición <Job-Name> por el nombre del trabajo de Glue.

I have an AWS Glue job named <Job-Name> that has failed due to Python module installation conflicts. Please assist in diagnosing and resolving this issue using the following systematic approach. Proceed once sufficient information is available. Objective: Implement a fix that addresses the root cause module while minimizing disruption to the existing working environment. Step 1: Root Cause Analysis • Retrieve the most recent failed job run ID for the specified Glue job • Extract error logs from CloudWatch Logs using the job run ID as a log stream prefix • Analyze the logs to identify: • The recently added or modified Python module that triggered the dependency conflict • The specific dependency chain causing the installation failure • Version compatibility conflicts between required and existing modules Step 2: Baseline Configuration Identification • Locate the last successful job run ID prior to the dependency failure • Document the Python module versions that were functioning correctly in that baseline run • Establish the compatible version constraints for conflicting dependencies Step 3: Targeted Resolution Implementation • Apply pinning by updating the job's additional_python_modules parameter • Pin only the root cause module and its directly conflicting dependencies to compatible versions, and do not remove python modules unless necessary • Preserve flexibility for non-conflicting modules by avoiding unnecessary version constraints • Deploy the configuration changes with minimal changes to the existing configuration and execute a validation test run. Do not change the Glue versions. Implementation Example: Scenario: Recently added pandas==2.0.0 to additional_python_modules Error: numpy version conflict (pandas 2.0.0 requires numpy>=1.21, but existing job code requires numpy<1.20) Resolution: Update additional_python_modules to "pandas==1.5.3,numpy==1.19.5" Rationale: Use pandas 1.5.3 (compatible with numpy 1.19.5) and pin numpy to last known working version Expected Outcome: Restore job functionality with minimal configuration changes while maintaining system stability.

La petición le indica a Q que:

  1. Obtenga el último identificador de ejecución de un trabajo fallido

  2. Busque los registros y detalles asociados

  3. Busque los trabajos ejecutados correctamente para detectar cualquier paquete de Python modificado

  4. Realice las correcciones de configuración necesarias y active otra ejecución de prueba

Módulos de Python que ya se proporcionaron en AWS

Para cambiar la versión de estos módulos proporcionados, indique las nuevas versiones con el parámetro de trabajo --additional-python-modules.

AWS Glue version 5.1

La versión 5.1 de AWS Glue incluye los siguientes módulos de Python listos para su uso:

  • aiobotocore==2.25.1

  • aiohappyeyeballs==2.6.1

  • aiohttp==3.13.2

  • aioitertools==0.12.0

  • aiosignal==1.4.0

  • appdirs==1.4.4

  • attrs==25.4.0

  • boto3==1.40.61

  • botocore==1.40.61

  • certifi==2025.10.5

  • charset-normalizer==3.4.4

  • choreographer==1.2.0

  • contourpy==1.3.3

  • cycler==0.12.1

  • distlib==0.4.0

  • filelock==3.20.0

  • fonttools==4.60.1

  • frozenlist==1.8.0

  • fsspec==2025.10.0

  • idna==3.11

  • iniconfig==2.3.0

  • jmespath==1.0.1

  • kaleido==1.2.0

  • kiwisolver==1.4.9

  • logistro==2.0.1

  • matplotlib==3.10.7

  • multidict==6.7.0

  • narwhals==2.10.2

  • numpy==2.3.4

  • orjson==3.11.4

  • packaging==25.0

  • pandas==2.3.3

  • pillow==12.0.0

  • pip==24.0

  • platformdirs==4.5.0

  • plotly==6.4.0

  • pluggy==1.6.0

  • propcache==0.4.1

  • pyarrow==22.0.0

  • Pygments==2.19.2

  • pyparsing==3.2.5

  • pytest-timeout==2.4.0

  • pytest==8.4.2

  • python-dateutil==2.9.0.post0

  • pytz==2025.2

  • requests==2.32.5

  • s3fs==2025.10.0

  • s3transfer==0.14.0

  • seaborn==0.13.2

  • setuptools==79.0.1

  • simplejson==3.20.2

  • six==1.17.0

  • tenacity==9.1.2

  • typing_extensions==4.15.0

  • tzdata==2025.2

  • urllib3==2.5.0

  • uv==0.9.7

  • virtualenv==20.35.4

  • wrapt==1.17.3

  • yarl==1.22.0

AWS Glue version 5.0

La versión 5.0 de AWS Glue incluye los siguientes módulos de Python listos para su uso:

  • aiobotocore==2.13.1

  • aiohappyeyeballs==2.3.5

  • aiohttp==3.10.1

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • appdirs==1.4.4

  • attrs==24.2.0

  • boto3==1.34.131

  • botocore==1.34.131

  • certifi==2024.7.4

  • charset-normalizer==3.3.2

  • contourpy==1.2.1

  • cycler==0.12.1

  • fonttools==4.53.1

  • frozenlist==1.4.1

  • fsspec==2024.6.1

  • idna==2.10

  • jmespath==0.10.0

  • kaleido==0.2.1

  • kiwisolver==1.4.5

  • matplotlib==3.9.0

  • multidict==6.0.5

  • numpy==1.26.4

  • packaging==24.1

  • pandas==2.2.2

  • pillow==10.4.0

  • pip==23.0.1

  • plotly==5.23.0

  • pyarrow==17.0.0

  • pyparsing==3.1.2

  • python-dateutil==2.9.0.post0

  • pytz==2024.1

  • requests==2.32.2

  • s3fs==2024.6.1

  • s3transfer==0.10.2

  • seaborn==0.13.2

  • setuptools==59.6.0

  • six==1.16.0

  • tenacity==9.0.0

  • tzdata==2024.1

  • urllib3==1.25.10

  • virtualenv==20.4.0

  • wrapt==1.16.0

  • yarl==1.9.4

AWS Glue version 4.0

La versión 4.0 de AWS Glue incluye los siguientes módulos de Python listos para su uso:

  • aiobotocore==2.4.1

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.24.70

  • botocore==1.27.59

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.32

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==5.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kaleido==0.2.1

  • kiwisolver==1.4.4

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.7

  • numpy==1.23.5

  • packaging==23.0

  • pandas==1.5.1

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0.1

  • plotly==5.16.0

  • pmdarima==2.0.1

  • ptvsd==4.3.2

  • pyarrow==10.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==6.0.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2022.11.0

  • s3transfer==0.6.0

  • scikit-learn==1.1.3

  • scipy==1.9.3

  • setuptools==49.1.3

  • six==1.16.0

  • statsmodels==0.13.5

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.10.0

AWS Glue version 3.0

La versión 3.0 de AWS Glue incluye los siguientes módulos de Python listos para su uso:

  • aiobotocore==1.4.2

  • aiohttp==3.8.3

  • aioitertools==0.11.0

  • aiosignal==1.3.1

  • async-timeout==4.0.2

  • asynctest==0.13.0

  • attrs==22.2.0

  • avro-python3==1.10.2

  • boto3==1.18.50

  • botocore==1.21.50

  • certifi==2021.5.30

  • chardet==3.0.4

  • charset-normalizer==2.1.1

  • click==8.1.3

  • cycler==0.10.0

  • Cython==0.29.4

  • docutils==0.17.1

  • enum34==1.1.10

  • frozenlist==1.3.3

  • fsspec==2021.8.1

  • idna==2.10

  • importlib-metadata==6.0.0

  • jmespath==0.10.0

  • joblib==1.0.1

  • kiwisolver==1.3.2

  • matplotlib==3.4.3

  • mpmath==1.2.1

  • multidict==6.0.4

  • nltk==3.6.3

  • numpy==1.19.5

  • packaging==23.0

  • pandas==1.3.2

  • patsy==0.5.1

  • Pillow==9.4.0

  • pip==23.0

  • pmdarima==1.8.2

  • ptvsd==4.3.2

  • pyarrow==5.0.0

  • pydevd==2.5.0

  • pyhocon==0.3.58

  • PyMySQL==1.0.2

  • pyparsing==2.4.7

  • python-dateutil==2.8.2

  • pytz==2021.1

  • PyYAML==5.4.1

  • regex==2022.10.31

  • requests==2.23.0

  • s3fs==2021.8.1

  • s3transfer==0.5.0

  • scikit-learn==0.24.2

  • scipy==1.7.1

  • six==1.16.0

  • Spark==1.0

  • statsmodels==0.12.2

  • subprocess32==3.5.4

  • sympy==1.8

  • tbats==1.1.0

  • threadpoolctl==3.1.0

  • tqdm==4.64.1

  • typing_extensions==4.4.0

  • urllib3==1.25.11

  • wheel==0.37.0

  • wrapt==1.14.1

  • yarl==1.8.2

  • zipp==3.12.0

AWS Glue version 2.0

La versión 2.0 de AWS Glue incluye los siguientes módulos de Python listos para su uso:

  • avro-python3==1.10.0

  • awscli==1.27.60

  • boto3==1.12.4

  • botocore==1.15.4

  • certifi==2019.11.28

  • chardet==3.0.4

  • click==8.1.3

  • colorama==0.4.4

  • cycler==0.10.0

  • Cython==0.29.15

  • docutils==0.15.2

  • enum34==1.1.9

  • fsspec==0.6.2

  • idna==2.9

  • importlib-metadata==6.0.0

  • jmespath==0.9.4

  • Joblib==0.14.1

  • kiwisolver==1.1.0

  • matplotlib==3.1.3

  • mpmath==1.1.0

  • nltk==3.5

  • numpy==1.18.1

  • pandas==1.0.1

  • patsy==0.5.1

  • pmdarima==1.5.3

  • ptvsd==4.3.2

  • pyarrow==0.16.0

  • pyasn1==0.4.8

  • pydevd==1.9.0

  • pyhocon==0.3.54

  • PyMySQL==0.9.3

  • pyparsing==2.4.6

  • python-dateutil==2.8.1

  • pytz==2019.3

  • PyYAML==5.3.1

  • regex==2022.10.31

  • requests==2.23.0

  • rsa==4.7.2

  • s3fs==0.4.0

  • s3transfer==0.3.3

  • scikit-learn==0.22.1

  • scipy==1.4.1

  • setuptools==45.2.0

  • six==1.14.0

  • Spark==1.0

  • statsmodels==0.11.1

  • subprocess32==3.5.4

  • sympy==1.5.1

  • tbats==1.0.9

  • tqdm==4.64.1

  • typing-extensions==4.4.0

  • urllib3==1.25.8

  • wheel==0.35.1

  • zipp==3.12.0

Apéndice A: Creación de un artefacto zip de wheels

Demostramos con un ejemplo cómo crear un artefacto zip de wheels. El ejemplo que se muestra descarga los paquetes cryptography y scipy en un artefacto zip de wheels y copia el zip de wheels en una ubicación de Amazon S3.

  1. Debe ejecutar los comandos para crear el zip de wheels en un entorno de Amazon Linux similar al entorno de Glue. Consulte Apéndice B: Detalles del entorno de AWS Glue. Glue 5.1 usa AL2023 con la versión 3.11 de Python. Cree un Dockerfile que generará este entorno:

    FROM --platform=linux/amd64 public.ecr.aws/amazonlinux/amazonlinux:2023-minimal # Install Python 3.11, pip, and zip utility RUN dnf install -y python3.11 pip zip && \ dnf clean all WORKDIR /build
  2. Cree un archivo requirements.txt

    cryptography scipy
  3. Genere y ponga en marcha un contenedor de Docker

    # Build docker image docker build --platform linux/amd64 -t glue-wheel-builder . # Spin up container docker run --platform linux/amd64 -v $(pwd)/requirements.txt:/input/requirements.txt:ro -v $(pwd):/output -it glue-wheel-builder bash
  4. Ejecute los siguientes comandos en la imagen de Docker

    # Create a directory for the wheels mkdir wheels # Copy requirements.txt into wheels directory cp /input/requirements.txt wheels/ # Download the wheels with the correct platform and Python version pip3 download \ -r wheels/requirements.txt \ --dest wheels/ \ --platform manylinux2014_x86_64 \ --python-version 311 \ --only-binary=:all: # Package the wheels into a zip archive with the .gluewheels.zip suffix zip -r mylibraries-1.0.0.gluewheels.zip wheels/ # Copy zip to output cp mylibraries-1.0.0.gluewheels.zip /output/ # Exit the container exit
  5. Cargue un zip de wheels en la ubicación de Amazon S3

    aws s3 cp mylibraries-1.0.0.gluewheels.zip s3://amzn-s3-demo-bucket/example-prefix/
  6. Limpieza opcional

    rm mylibraries-1.0.0.gluewheels.zip rm Dockerfile rm requirements.txt
  7. Ejecute el trabajo de Glue con los siguientes argumentos de trabajo:

    --additional-python-modules s3://amzn-s3-demo-bucket/example-prefix/mylibraries-1.0.0.gluewheels.zip --python-modules-installer-option --no-index

Apéndice B: Detalles del entorno de AWS Glue

Compatibilidad de las versiones de Glue y métodos de instalación
Versión de AWS Glue Versión de Python Imagen base Versión de glibc Etiquetas de plataforma compatibles
5.1 3.11 Amazon Linux 2023 (AL2023) 2.34

manylinux_2_34_x86_64

manylinux_2_28_x86_64

manylinux2014_x86_64

5.0 3.11 Amazon Linux 2023 (AL2023) 2.34

manylinux_2_34_x86_64

manylinux_2_28_x86_64

manylinux2014_x86_64

4.0 3.10 Amazon Linux 2 (AL2) 2.26 manylinux2014_x86_64
3.0 3.7 Amazon Linux 2 (AL2) 2.26 manylinux2014_x86_64
2.0 3.7 Amazon Linux AMI (AL1) 2.17 manylinux2014_x86_64

Según el modelo de responsabilidad compartida de AWS, usted es responsable de la administración de los módulos y las bibliotecas de Python adicionales y las dependencias que utilice con sus trabajos de ETL de AWS Glue. Esto incluye la aplicación de actualizaciones y parches de seguridad.

AWS Glue no admite la compilación de código nativo en el entorno de trabajo. No obstante, los trabajos de AWS Glue se ejecutan en un entorno de Linux administrado por Amazon. Es posible que pueda proporcionar las dependencias nativas en forma compilada a través de un archivo Wheel de Python. Consulte la tabla anterior para ver los detalles de compatibilidad de las versiones de AWS Glue.

importante

El uso de dependencias incompatibles puede provocar problemas de tiempo de ejecución, especialmente en el caso de las bibliotecas con extensiones nativas que deben coincidir con la arquitectura y las bibliotecas del sistema del entorno de destino. Cada versión de AWS Glue se ejecuta en una versión específica de Python con bibliotecas y configuraciones de sistema preinstaladas.