Uso de un script de inicio con Amazon MWAA - 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.

Uso de un script de inicio con Amazon MWAA

Un script de inicio es un script del intérprete de comandos (.sh) que uno aloja en el bucket de Amazon S3 de su entorno de forma similar a sus DAG, requisitos y complementos. Amazon MWAA ejecuta este script durante el inicio en cada componente individual de Apache Airflow (proceso de trabajo, programador y servidor web) antes de instalar los requisitos e inicializar el proceso de Apache Airflow. Utilice un script de inicio para hacer lo siguiente:

  • Instalar los tiempos de ejecución: instale los tiempos de ejecución de Linux necesarios para sus flujos de trabajo y conexiones.

  • Configurar las variables de entorno: configure las variables de entorno para cada componente de Apache Airflow. Sobrescriba variables comunes como PATH, PYTHONPATH y LD_LIBRARY_PATH.

  • Administrar las claves y los tokens: transfiera los tokens de acceso a los repositorios personalizados a requirements.txt y configure las claves de seguridad.

En los temas siguientes, se describe cómo configurar un script de inicio para instalar tiempos de ejecución de Linux, establecer variables de entorno y solucionar problemas relacionados con los registros de CloudWatch.

Configuración de un script de inicio

Para usar un script de inicio con su entorno Amazon MWAA existente, cargue un archivo .sh en el bucket Amazon S3 de su entorno. A continuación, para asociar el script al entorno, especifique lo siguiente en los detalles del entorno:

  • La ruta URL de Amazon S3 al script: la ruta relativa al script alojado en su bucket, por ejemplo, s3://mwaa-environment/startup.sh.

  • El ID de versión de Amazon S3 del script: la versión del script del intérprete de comandos de inicio de su bucket de Amazon S3. Debe especificar el ID de versión que Amazon S3 asigna al archivo cada vez que actualice el script. Los ID de versión son cadenas opacas unicode, codificadas en UTF-8, listas para URL que no tienen más de 1024 bytes de longitud, por ejemplo: 3sL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY+MTRCxf3vjVBH40Nr8X8gdRQBpUMLUo.

Para completar los pasos de esta sección, utilice el siguiente script de ejemplo. El script genera el valor asignado a MWAA_AIRFLOW_COMPONENT. Esta variable de entorno identifica cada componente de Apache Airflow en el que se ejecuta el script.

Copie el código y guárdelo localmente como startup.sh.

#!/bin/sh ​ echo "Printing Apache Airflow component" echo $MWAA_AIRFLOW_COMPONENT

A continuación, cargue el script en su bucket de Amazon S3.

AWS Management Console
Carga de un script del intérprete de comandos (consola)
  1. Inicie sesión AWS Management Console Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En la lista Buckets, elija el nombre del bucket asociado a su entorno.

  3. En la pestaña Objetos, elija Cargar.

  4. En la página Cargar, arrastre y suelte el script del intérprete de comandos que ha creado.

  5. Seleccione Cargar.

El script aparece en la lista Objetos. Amazon S3 crea un nuevo ID de versión para el archivo. Si actualiza el script y lo vuelve a cargar con el mismo nombre de archivo, se asigna un nuevo ID de versión al archivo.

AWS CLI
Creación y carga de un script del intérprete de comandos (CLI)
  1. Abra un nuevo símbolo del sistema y ejecute el comando ls de Amazon S3 para enumerar e identificar el bucket asociado a su entorno.

    $ aws s3 ls
  2. Navegue hasta la carpeta en la que guardó el script del intérprete de comandos. Utilice cp en una nueva ventana de símbolo del sistema para cargar el script en su bucket. Sustituya your-s3-bucket por su información.

    $ aws s3 cp startup.sh s3://your-s3-bucket/startup.sh

    Si se ejecuta correctamente, Amazon S3 muestra la ruta URL del objeto:

    upload: ./startup.sh to s3://your-s3-bucket/startup.sh
  3. Utilice el siguiente comando para recuperar el último ID de versión del script.

    $ aws s3api list-object-versions --bucket your-s3-bucket --prefix startup --query 'Versions[?IsLatest].[VersionId]' --output text
    BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

Este identificador de versión se especifica al asociar el script a un entorno.

Ahora, asocie el script a su entorno.

AWS Management Console
Asociación del script a un entorno (consola)
  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione la fila del entorno que desee actualizar y, a continuación, elija Editar.

  3. En la página Especificar detalles, en Archivo de script de inicio (opcional), introduzca la URL de Amazon S3 del script, por ejemplo: s3://your-mwaa-bucket/startup-sh..

  4. Elija la versión más reciente en la lista desplegable o elija Examinar S3 para buscar el script.

  5. Elija Siguiente y a continuación, vaya a la página Revisar y guardar.

  6. Revise los cambios y, a continuación, seleccione Guardar.

Las actualizaciones del entorno pueden tardar entre 10 y 30 minutos. Amazon MWAA ejecuta el script de inicio a medida que se reinicia cada componente del entorno.

AWS CLI
Asociación del script a un entorno (CLI)
  • Abra un símbolo del sistema y utilice update-environment para especificar la URL de Amazon S3 y el ID de versión del script.

    $ aws mwaa update-environment \ --name your-mwaa-environment \ --startup-script-s3-path startup.sh \ --startup-script-s3-object-version BbdVMmBRjtestta1EsVnbybZp1Wqh1J4

    Si el proceso se ha realizado correctamente, Amazon MWAA devuelve el nombre de recurso de Amazon (ARN) del entorno:

    arn:aws::airflow:us-west-2:123456789012:environment/your-mwaa-environment 

La actualización del entorno puede tardar entre 10 y 30 minutos. Amazon MWAA ejecuta el script de inicio a medida que se reinicia cada componente del entorno.

Por último, recupere los eventos de registro para comprobar que el script funciona según lo previsto. Al activar el registro para cada componente de Apache Airflow, Amazon MWAA crea un grupo de registros y un flujo de registros nuevos. Para obtener más información, consulte Tipos de registro de Apache Airflow.

AWS Management Console
Comprobación del flujo de registro de Apache Airflow (consola)
  1. Abra la página Entornos en la consola de Amazon MWAA.

  2. Seleccione su entorno.

  3. En el panel Monitorización, elija el grupo de registros del que quiere ver los registros, por ejemplo, el Grupo de registros del programador de Airflow.

  4. En la consola de CloudWatch, en la lista de flujos de registro, elija un flujo con el siguiente prefijo: startup_script_exection_ip.

  5. En el panel Eventos de registro, verá el resultado del comando que imprime el valor de MWAA_AIRFLOW_COMPONENT. Por ejemplo, en el caso de los registros del programador, verá lo siguiente:

    Printing Apache Airflow component
    scheduler
    Finished running startup script. Execution time: 0.004s.
    Running verification
    Verification completed

Puede repetir los pasos anteriores para ver los registros de los procesos de trabajo y del servidor web.

Instalación de los tiempos de ejecución de Linux mediante un script de inicio

Utilice un script de inicio para actualizar el sistema operativo de un componente de Apache Airflow e instale bibliotecas de tiempo de ejecución adicionales para utilizarlas con sus flujos de trabajo. Por ejemplo, se ejecuta el siguiente script yum update para actualizar el sistema operativo.

Cuando se ejecuta yum update en un script de inicio, debe excluir Python utilizando --exclude=python* como se muestra en el ejemplo. Para que su entorno se ejecute, Amazon MWAA instala una versión específica de Python compatible con su entorno. Por lo tanto, no puede actualizar la versión de Python del entorno mediante un script de inicio.

#!/bin/sh echo "Updating operating system" sudo yum update -y --exclude=python*

Para instalar tiempos de ejecución en un componente específico de Apache Airflow, utilice MWAA_AIRFLOW_COMPONENT e if e instrucciones condicionales fi. En este ejemplo, se ejecuta un único comando para instalar la biblioteca libaio en el programador y el proceso de trabajo, pero no en el servidor web.

importante
  • Si ha configurado un servidor web privado, debe utilizar la siguiente condición o proporcionar todos los archivos de instalación de forma local para evitar que se agoten los tiempos de espera de la instalación.

  • Utilice sudo para ejecutar operaciones que requieren privilegios administrativos.

#!/bin/sh if [[ "${MWAA_AIRFLOW_COMPONENT}" != "webserver" ]] then sudo yum -y install libaio fi

Puede utilizar un script de inicio para comprobar la versión de Python.

#!/bin/sh export PYTHON_VERSION_CHECK=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}.{2}".format(*version))'` echo "Python version is $PYTHON_VERSION_CHECK"

Amazon MWAA no admite la anulación de la versión predeterminada de Python, ya que esto podría provocar incompatibilidades con las bibliotecas de Apache Airflow instaladas.

Configuración de las variables de entorno mediante un script de inicio

Utilice scripts de inicio para establecer variables de entorno y modificar las configuraciones de Apache Airflow. En el siguiente ejemplo, se define una nueva variable ENVIRONMENT_STAGE. Puede hacer referencia a esta variable en un DAG o en sus módulos personalizados.

#!/bin/sh export ENVIRONMENT_STAGE="development" echo "$ENVIRONMENT_STAGE"

Utilice scripts de inicio para sobrescribir variables comunes de Apache Airflow o del sistema. Por ejemplo, configure LD_LIBRARY_PATH para indicar a Python que busque binarios en la ruta que especifique. Esto le permite proporcionar binarios personalizados para sus flujos de trabajo mediante complementos:

#!/bin/sh export LD_LIBRARY_PATH=/usr/local/airflow/plugins/your-custom-binary

Variables de entorno reservadas

Amazon MWAA reserva un conjunto de variables de entorno críticas. Si sobrescribe una variable reservada, Amazon MWAA la restaura a su valor predeterminado. A continuación se enumeran las variables reservadas:

  • MWAA__AIRFLOW__COMPONENT: se utiliza para identificar el componente Apache Airflow con uno de los siguientes valores: scheduler, worker o webserver.

  • AIRFLOW__WEBSERVER__SECRET_KEY: la clave secreta utilizada para firmar de forma segura las cookies de sesión en el servidor web Apache Airflow.

  • AIRFLOW__CORE__FERNET_KEY: la clave utilizada para cifrar y descifrar los datos confidenciales almacenados en la base de datos de metadatos, por ejemplo, las contraseñas de conexión.

  • AIRFLOW_HOME: la ruta al directorio principal de Apache Airflow, donde los archivos de configuración y los archivos DAG se almacenan localmente.

  • AIRFLOW__CELERY__BROKER_URL: la URL del agente de mensajes utilizado para la comunicación entre el programador de Apache Airflow y los nodos de trabajo de Celery.

  • AIRFLOW__CELERY__RESULT_BACKEND: la URL de la base de datos utilizada para almacenar los resultados de las tareas de Celery.

  • AIRFLOW__CORE__EXECUTOR: la clase de ejecutor que debe usar Apache Airflow. En Amazon MWAA, se trata de CeleryExecutor

  • AIRFLOW__CORE__LOAD_EXAMPLES: se utiliza para activar o desactivar la carga de ejemplos de DAG.

  • AIRFLOW__METRICS__METRICS_BLOCK_LIST: se utiliza para gestionar qué métricas de Apache Airflow emite y captura Amazon MWAA en CloudWatch.

  • SQL_ALCHEMY_CONN: la cadena de conexión de la base de datos de RDS para PostgreSQL utilizada para almacenar los metadatos de Apache Airflow en Amazon MWAA.

  • AIRFLOW__CORE__SQL_ALCHEMY_CONN: se utiliza con el mismo propósito que SQL_ALCHEMY_CONN, pero siguiendo la nueva convención de nomenclatura de Apache Airflow.

  • AIRFLOW__CELERY__DEFAULT_QUEUE: la cola predeterminada para las tareas de Celery en Apache Airflow.

  • AIRFLOW__OPERATORS__DEFAULT_QUEUE: la cola predeterminada para las tareas que utilizan operadores específicos de Apache Airflow.

  • AIRFLOW_VERSION: la versión de Apache Airflow instalada en el entorno Amazon MWAA.

  • AIRFLOW_CONN_AWS_DEFAULT: las credenciales de AWS predeterminadas que se utilizan para la integración con otros servicios de AWS.

  • AWS_DEFAULT_REGION: establece la región de AWS predeterminada que se utiliza con las credenciales predeterminadas para la integración con otros servicios de AWS.

  • AWS_REGION: si se define, esta variable de entorno invalida los valores de la variable AWS_DEFAULT_REGION de entorno y la región de configuración del perfil.

  • PYTHONUNBUFFERED: se utiliza para enviar flujos stdout y stderr a registros de contenedor.

  • AIRFLOW__METRICS__STATSD_ALLOW_LIST: se utiliza para configurar una lista de permitidos de prefijos separados por comas para enviar las métricas que comienzan con los elementos de la lista.

  • AIRFLOW__METRICS__STATSD_ON: activa el envío de métricas a StatsD.

  • AIRFLOW__METRICS__STATSD_HOST: se utiliza para conectarse al daemon StatSD.

  • AIRFLOW__METRICS__STATSD_PORT: se utiliza para conectarse al daemon StatSD.

  • AIRFLOW__METRICS__STATSD_PREFIX: se utiliza para conectarse al daemon StatSD.

  • AIRFLOW__CELERY__WORKER_AUTOSCALE: establece la simultaneidad máxima y mínima.

  • AIRFLOW__CORE__DAG_CONCURRENCY: establece el número de instancias de tareas que el programador puede ejecutar simultáneamente en un DAG.

  • AIRFLOW__CORE__MAX_ACTIVE_TASKS_PER_DAG: establece el número máximo de tareas activas por DAG.

  • AIRFLOW__CORE__PARALLELISM: define el número máximo de instancias de tareas que se pueden ejecutar simultáneamente.

  • AIRFLOW__SCHEDULER__PARSING_PROCESSES: establece el número máximo de procesos analizados por el programador para programar los DAG.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__VISIBILITY_TIMEOUT: define, en número de segundos, el tiempo de espera para que un proceso de trabajo confirme la tarea antes de que el mensaje se entregue a otro proceso de trabajo.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__REGION: establece la región de AWS para el transporte de Celery subyacente.

  • AIRFLOW__CELERY_BROKER_TRANSPORT_OPTIONS__PREDEFINED_QUEUES: establece la cola para el transporte de Celery subyacente.

  • AIRFLOW_SCHEDULER_ALLOWED_RUN_ID_PATTERN: se utiliza para verificar la validez de la entrada del run_id parámetro al activar un DAG.

  • AIRFLOW__WEBSERVER__BASE_URL: la URL del servidor web utilizado para alojar la interfaz de usuario de Apache Airflow.

Variables de entorno sin reserva

Puede utilizar un script de inicio para sobrescribir las variables de entorno no reservadas. En la siguiente lista, se ofrecen algunas de las variables comunes:

  • PATH: especifica una lista de directorios en los que el sistema operativo busca archivos ejecutables y scripts. Cuando se ejecuta un comando en la línea de comandos, el sistema comprueba los directorios en PATH para buscar y ejecutar el comando. Al crear tareas u operadores personalizados en Apache Airflow, es posible que necesite recurrir a scripts o ejecutables externos. Si los directorios que contienen estos archivos no se encuentran en los valores especificados en la variable PATH, las tareas no se ejecutarán si el sistema no puede localizarlos. Al añadir los directorios adecuados a PATH, las tareas de Apache Airflow pueden buscar y ejecutar los ejecutables necesarios.

  • PYTHONPATH: utilizada por el intérprete de Python para determinar en qué directorios buscar los módulos y paquetes importados. Es una lista de directorios que puede añadir a la ruta de búsqueda predeterminada. Esto permite al intérprete buscar y cargar bibliotecas de Python no incluidas en la biblioteca estándar o instaladas en los directorios del sistema. Use esta variable para agregar sus módulos y paquetes de Python personalizados y úselos con sus DAG.

  • LD_LIBRARY_PATH: variable de entorno utilizada por el enlazador y el cargador dinámicos de Linux para buscar y cargar bibliotecas compartidas. Especifica una lista de directorios que contienen bibliotecas compartidas, en las que se busca antes que en los directorios predeterminados de las bibliotecas del sistema. Utilice esta variable para especificar los binarios personalizados.

  • CLASSPATH: utilizada por el entorno de ejecución de Java (JRE) y el kit de desarrollo de Java Development Kit (JDK) para localizar y cargar clases, bibliotecas y recursos de Java en tiempo de ejecución. Es una lista de directorios, archivos JAR y archivos ZIP que contienen código Java compilado.