Administración de las dependencias de Python en requirements.txt - Amazon Managed Workflows para Apache Airflow

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Administración de las dependencias de Python en requirements.txt

En este tema se describe cómo instalar y gestionar las dependencias de Python en un requirements.txt archivo para un entorno Amazon Managed Workflows for Apache Airflow.

Pruebas DAGs con la MWAA CLI utilidad Amazon

  • La utilidad interface de línea de comandos (CLI) replica localmente un entorno de Amazon Managed Workflows para Apache Airflow.

  • CLICrea una imagen de contenedor Docker localmente similar a una imagen de MWAA producción de Amazon. Esto te permite ejecutar un entorno local de Apache Airflow para desarrollar y probar DAGs complementos personalizados y dependencias antes de implementarlos en Amazon. MWAA

  • Para ejecutar elCLI, consulte la aws-mwaa-local-runneropción. GitHub

Instalación de dependencias de Python mediante el formato de archivo de requisitos PyPi .org

La siguiente sección describe las diferentes formas de instalar las dependencias de Python según el formato de archivo de requisitos de PyPi .org.

Opción uno: dependencias de Python desde el Índice de paquetes de Python

La siguiente sección describe cómo especificar las dependencias de Python desde el Python Package Index en un archivo requirements.txt.

Apache Airflow v2
  1. Hacer una prueba local. Añada bibliotecas adicionales de forma iterativa para encontrar la combinación adecuada de paquetes y sus versiones antes de crear un archivo requirements.txt. Para ejecutar la MWAA CLI utilidad Amazon, consulta la sección aws-mwaa-local-runneron GitHub.

  2. Revise los extras del paquete Apache Airflow. Para ver una lista de los paquetes instalados para Apache Airflow v2 en AmazonMWAA, consulte Amazon MWAA local runner requirements.txt en el sitio GitHub web.

  3. Añada instrucciones respecto a las restricciones. Añada el archivo de restricciones para su entorno Apache Airflow v2 en la parte superior del archivo requirements.txt. Los archivos de restricciones de Apache Airflow especifican las versiones de proveedores disponibles en el momento de la publicación de Apache Airflow.

    A partir de la versión 2.7.2 de Apache Airflow, su archivo de requisitos debe incluir una instrucción --constraint. Si no especificas ninguna restricción, Amazon te MWAA especificará una para garantizar que los paquetes que figuran en tus requisitos sean compatibles con la versión de Apache Airflow que utilices.

    En el siguiente ejemplo, sustituya {environment-version} por el número de versión de su entorno y, {Python-version}, por la versión de Python compatible con su entorno.

    Para obtener información sobre la versión de Python compatible con su entorno de Apache Airflow, consulte Versiones de Apache Airflow.

    --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-{Airflow-version}/constraints-{Python-version}.txt"

    Si el archivo de restricciones determina que el paquete xyz==1.0 no es compatible con otros paquetes en su entorno, pip3 install fallará para evitar que bibliotecas incompatibles se instalen en su entorno. Si se produce un error en la instalación de algún paquete, puede ver los registros de errores de cada componente de Apache Airflow (el planificador, el servidor web y el servidor web) en el flujo de registros correspondiente en Logs. CloudWatch Para más información sobre los tipos de registros, consulte Visualización de los registros de flujo de aire en Amazon CloudWatch.

  4. Paquetes de Apache Airflow. Añada los extras del paquete y la versión (==). Esto ayuda a evitar que se instalen en su entorno paquetes del mismo nombre, pero de una versión diferente.

    apache-airflow[package-extra]==2.5.1
  5. Bibliotecas Python. Añada el nombre del paquete y la versión (==) al archivo requirements.txt. Esto ayuda a evitar que se aplique automáticamente una futura actualización de última hora de PyPi.org.

    library == version
    ejemplo Boto3 y psycopg2-binary

    Este caso se proporciona como ejemplo. Las bibliotecas boto y psycopg2-binary vienen incluidas en la instalación base de Apache Airflow v2, por lo que no es necesario especificarlas en un archivo requirements.txt.

    boto3==1.17.54 boto==2.49.0 botocore==1.20.54 psycopg2-binary==2.8.6

    Si se especifica un paquete sin una versión, Amazon MWAA instala la última versión del paquete desde PyPi.org. Esta versión puede entrar en conflicto con otros paquetes de su requirements.txt.

Opción dos: archivos wheels de Python (.whl)

El formato wheel de Python es un tipo de paquete diseñado para enviar bibliotecas con artefactos compilados. Los paquetes de ruedas tienen varias ventajas como método para instalar dependencias en AmazonMWAA:

  • Instalación más rápida: los WHL archivos se copian al contenedor como uno solo yZIP, a continuación, se instalan localmente, sin tener que descargar cada uno de ellos.

  • Menos conflictos: se puede determinar con antelación la compatibilidad de las versiones de los paquetes. De esta manera, no es necesario que pip elabore de forma recurrente versiones compatibles.

  • Más resiliencia: con las bibliotecas alojadas externamente, los requisitos posteriores pueden cambiar y provocar incompatibilidad de versiones entre los contenedores de un entorno de AmazonMWAA. Al no depender de una fuente externa para las dependencias, todos los contenedores tienen las mismas bibliotecas, independientemente de cuándo se instancie cada contenedor.

Recomendamos seguir los métodos que se indican a continuación para instalar las dependencias de Python en su requirements.txt desde un archivo wheel de Python (.whl).

Uso del archivo plugins.zip en un bucket de Amazon S3

El programador de Apache Airflow, los trabajadores y el servidor web (para Apache Airflow v2.2.2 y versiones posteriores) buscan complementos personalizados durante el inicio en el contenedor AWS Fargate administrado para su entorno en. /usr/local/airflow/plugins/* Este proceso comienza antes del inicio MWAA del servicio Apache Airflow y las dependencias de Amazon pip3 install -r requirements.txt para Python. Utilice un plugins.zip archivo para todos aquellos archivos que no desee que se modifiquen continuamente durante la ejecución del entorno o para los que no desee conceder acceso a los usuarios que escriben. DAGs Por ejemplo, archivos de rueda de biblioteca de Python, PEM archivos de certificados y YAML archivos de configuración.

En la siguiente sección se describe cómo instalar wheels del archivo plugins.zip de su bucket de Amazon S3.

  1. Descargue los WHL archivos necesarios. Puede utilizarlos pip downloadcon el contenedor local existente requirements.txt en Amazon MWAA local-runner u otro contenedor de Amazon Linux 2 para resolver y descargar los archivos de rueda de Python necesarios.

    $ pip3 download -r "$AIRFLOW_HOME/dags/requirements.txt" -d "$AIRFLOW_HOME/plugins" $ cd "$AIRFLOW_HOME/plugins" $ zip "$AIRFLOW_HOME/plugins.zip" *
  2. Especifique la ruta en su requirements.txt. Especifique el directorio de complementos al principio de su archivo requirements.txt con --find-links e indique a pip que instale desde otras fuentes con --no-index, tal y como se muestra a continuación.

    --find-links /usr/local/airflow/plugins --no-index
    ejemplo Ejemplo de wheel en el archivo requirements.txt

    En el siguiente ejemplo, se supone que ha cargado el wheel en un archivo plugins.zip en la raíz de su bucket de Amazon S3. Por ejemplo:

    --find-links /usr/local/airflow/plugins --no-index numpy

    Amazon MWAA extrae la numpy-1.20.1-cp37-cp37m-manylinux1_x86_64.whl rueda de la plugins carpeta y la instala en su entorno.

Utilizando un WHL archivo alojado en un URL

En la siguiente sección se describe cómo instalar una rueda alojada en unURL. URLDebe ser de acceso público o accesible desde el Amazon personalizado VPC que especificó para su MWAA entorno de Amazon.

  • Proporcione un URL. Proporcione el URL a una rueda de surequirements.txt.

    ejemplo archivo de ruedas en un público URL

    En el siguiente ejemplo, se puede ver cómo se descarga un archivo wheel de un sitio web público.

    --find-links https://files.pythonhosted.org/packages/ --no-index

    Amazon MWAA obtiene la rueda de la URL que especificó y la instala en su entorno.

    nota

    URLsno se puede acceder a ellos desde servidores web privados (requisitos de instalación en Amazon MWAA v2.2.2 y versiones posteriores).

Crear un WHL archivo a partir de un DAG

Si tiene un servidor web privado que utiliza Apache Airflow v2.2.2 o posterior y no puede instalar los requisitos porque su entorno no tiene acceso a repositorios externos, puede utilizar lo siguiente DAG para tomar sus MWAA requisitos actuales de Amazon y empaquetarlos en Amazon S3:

from airflow import DAG from airflow.operators.bash_operator import BashOperator from airflow.utils.dates import days_ago S3_BUCKET = 'my-s3-bucket' S3_KEY = 'backup/plugins_whl.zip' with DAG(dag_id="create_whl_file", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag: cli_command = BashOperator( task_id="bash_command", bash_command=f"mkdir /tmp/whls;pip3 download -r /usr/local/airflow/requirements/requirements.txt -d /tmp/whls;zip -j /tmp/plugins.zip /tmp/whls/*;aws s3 cp /tmp/plugins.zip s3://{S3_BUCKET}/{S3_KEY}" )

Después de ejecutar elDAG, usa este nuevo archivo como tu Amazon MWAAplugins.zip, opcionalmente, empaquetado con otros complementos. A continuación, actualice su requirements.txt que comienza por --find-links /usr/local/airflow/plugins y --no-index sin agregar --constraint.

Esto le permitirá utilizar las mismas bibliotecas sin conexión.

Opción tres: dependencias de Python alojadas en un repositorio privado compatible con PyPi PEP /-503

En la siguiente sección, se describe cómo instalar un complemento de Apache Airflow alojado en un servidor privado con autenticación. URL

  1. Añada su nombre de usuario y contraseña como Opciones de configuración de Airflow. Por ejemplo:

    • foo.user : YOUR_USER_NAME

    • foo.pass : YOUR_PASSWORD

  2. Cree su archivo requirements.txt. Sustituya los marcadores de posición del siguiente ejemplo por su privado URL y por el nombre de usuario y la contraseña que haya agregado como opciones de configuración de Apache Airflow. Por ejemplo:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com
  3. En caso aplicable, añada las bibliotecas adicionales a su archivo requirements.txt. Por ejemplo:

    --index-url https://${AIRFLOW__FOO__USER}:${AIRFLOW__FOO__PASS}@my.privatepypi.com my-private-package==1.2.3

Habilitar los registros en la MWAA consola de Amazon

La función de ejecución de su MWAA entorno de Amazon necesita permiso para enviar CloudWatch registros a Logs. Para actualizar los permisos de un rol de ejecución, consulte Función de MWAA ejecución de Amazon.

Puede habilitar los registros de Apache Airflow en los niveles INFO, WARNING, ERROR o CRITICAL. Cuando eliges un nivel de registro, Amazon MWAA envía los registros de ese nivel y de todos los niveles de gravedad superiores. Por ejemplo, si habilitas los registros en el INFO nivel, Amazon MWAA envía INFO los registros y WARNINGERROR, y los niveles de CRITICAL registro a CloudWatch Logs. Recomendamos habilitar los registros de Apache Airflow en el nivel INFO para que el programador pueda ver los registros recibidos para el archivo requirements.txt.

Esta imagen muestra cómo habilitar los registros a INFO nivel.

Visualización de los registros en la consola CloudWatch de registros

Consulte los registros de Apache Airflow correspondientes al programador encargado de programar sus flujos de trabajo y de analizar su carpeta de dags. Los siguientes pasos describen cómo abrir el grupo de registros del Scheduler en la MWAA consola de Amazon y ver los registros de Apache Airflow en la consola CloudWatch Logs.

Pasos para ver los registros de un requirements.txt
  1. Abre la página Entornos en la MWAA consola de Amazon.

  2. Seleccione un entorno.

  3. Elija el Grupo de registro del programador de Airflow en el panel de Monitorización.

  4. Seleccione el registro requirements_install_ip en los flujos de registro.

  5. Debería ver la lista de paquetes que se hayan instalado en el entorno en /usr/local/airflow/.local/bin. Por ejemplo:

    Collecting appdirs==1.4.4 (from -r /usr/local/airflow/.local/bin (line 1)) Downloading https://files.pythonhosted.org/packages/3b/00/2344469e2084fb28kjdsfiuyweb47389789vxbmnbjhsdgf5463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl Collecting astroid==2.4.2 (from -r /usr/local/airflow/.local/bin (line 2))
  6. Consulte la lista de paquetes y compruebe si se produjo algún error en alguno de ellos durante la instalación. Si algo ha ido mal, es posible que aparezca un error similar al siguiente:

    2021-03-05T14:34:42.731-07:00 No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4)) No matching distribution found for LibraryName==1.0.0 (from -r /usr/local/airflow/.local/bin (line 4))

Visualización de los errores en la interfaz de usuario de Apache Airflow

Es posible que también quiera comprobar su interfaz de usuario de Apache Airflow para averiguar si algún error puede estar relacionado con otro problema. El error más común que puedes encontrar con Apache Airflow en Amazon MWAA es:

Broken DAG: No module named x

Si ve este error en la interfaz de usuario de Apache Airflow, es probable que falte una dependencia obligatoria en su archivo requirements.txt.

Inicio de sesión en Apache Airflow

Necesitas Política de acceso a la interfaz de usuario de Apache Airflow: A mazonMWAAWeb ServerAccess permisos para tu AWS cuenta en AWS Identity and Access Management (IAM) para ver tu interfaz de usuario de Apache Airflow.

Pasos para acceder a la interfaz de usuario de Apache Airflow
  1. Abre la página Entornos en la MWAA consola de Amazon.

  2. Seleccione un entorno.

  3. Elija Abrir interfaz de usuario de Airflow.

Ejemplos de escenarios de requirements.txt

Puede mezclar y combinar diferentes formatos en su requirements.txt. En el siguiente ejemplo se utiliza una combinación de las distintas formas de instalar elementos adicionales.

ejemplo Extras en PyPi .org y en un sitio público URL

Debe usar --index-url esta opción al especificar paquetes de PyPi .org, además de los paquetes de un repositorio públicoURL, como un repositorio URLs personalizado compatible con PEP 503.

aws-batch == 0.6 phoenix-letter >= 0.3 --index-url http://dist.repoze.org/zope2/2.10/simple zopelib