Athrun Data Intelligence


Clientes que utilizan Flujos de trabajo administrados por Amazon para Apache Airflow (Amazon MWAA) a menudo necesitan dependencias de Python alojadas en repositorios de código privados. Muchos clientes optan por modo de comunicación a la red pública por su facilidad de uso y capacidad para realizar solicitudes salientes de Internet, todo ello manteniendo un comunicación seguro. Sin requisa, es posible que no se pueda lograr a los repositorios de códigos privados a través de Internet. Además es una buena actos instalar dependencias de Python solo donde sean necesarias. puedes usar Scripts de inicio de Amazon MWAA para instalar selectivamente las dependencias de Python necesarias para ejecutar código en los trabajadores, evitando al mismo tiempo problemas conveniente a las restricciones del servidor web.

Esta publicación muestra un método para instalar selectivamente dependencias de Python según el tipo de componente de Amazon MWAA (servidor web, programador o trabajador) desde un repositorio de Git al que solo se puede lograr desde su cúmulo privada potencial (VPC).

Descripción universal de la decisión

Esta decisión se centra en el uso de un repositorio Git privado para instalar selectivamente dependencias de Python, aunque puede usar el mismo patrón demostrado en esta publicación con índices de paquetes privados de Python como Código AWSArtefacto. Para obtener más información, consulte Amazon MWAA con AWS CodeArtifact para dependencias de Python.

El Cimentación de Amazon MWAA le permite designar un modo de comunicación al servidor web para controlar si se puede lograr al servidor web desde Internet o solo desde su VPC. Además puede controlar si sus trabajadores, programador y servidores web tienen comunicación a Internet a través de la configuración de VPC de su cliente. En esta publicación, demostramos un entorno como el que se muestra en el subsiguiente diagrama, donde el entorno utiliza modo de comunicación a la red pública para los servidores web, y los trabajadores y programadores de Apache Airflow no tienen una ruta a Internet desde su VPC.

arquitectura-mwaa

Hay hasta cuatro posibles configuraciones de red para un entorno Amazon MWAA:

  • Modo de enrutamiento divulgado y comunicación al servidor web divulgado
  • Modo de enrutamiento privado y comunicación al servidor web divulgado (que se muestra en el diagrama previo)
  • Modo de enrutamiento divulgado y comunicación al servidor web privado
  • Modo de enrutamiento privado y comunicación al servidor web privado

Nos centramos en una configuración de red para esta publicación, pero los conceptos fundamentales son aplicables a cualquier configuración de red.

La decisión que analizamos se plinto en el hecho de que Amazon MWAA ejecuta un tema de inicio (startup.sh) durante el inicio de cada componente individual de Apache Airflow (trabajador, programador y servidor web) ayer de instalar los requisitos (requirements.txt) e inicializando el proceso Apache Airflow. Este script de inicio se utiliza para configurar una variable de entorno, a la que luego se hace remisión en el archivo requisitos.txt para instalar bibliotecas de forma selectiva.

Los siguientes pasos nos permiten alcanzar esto:

  1. Cree e instale el script de inicio (startup.sh) en el entorno de Amazon MWAA. Este script establece la variable de entorno para instalar dependencias de forma selectiva.
  2. Crear e instalar dependencias globales de Python (requirements.txt) en el entorno de Amazon MWAA. Este archivo contiene las dependencias globales requeridas por todos los componentes de Amazon MWAA.
  3. Cree e instale dependencias de Python específicas de componentes en el entorno de Amazon MWAA. Este paso implica la creación de archivos de requisitos separados para cada tipo de componente (trabajador, programador, servidor web) para instalar selectivamente las dependencias necesarias.

Requisitos previos

Para este tutorial, debe tener los siguientes requisitos previos:

  • Un cuenta de AWS
  • Un entorno de Amazon MWAA implementado con modo de comunicación divulgado para el servidor web
  • Control de versiones facultado para su entorno Amazon MWAA Servicio de almacenamiento simple de Amazon (Amazon S3) cubo
  • Amazon CloudWatch registro facultado en el nivel INFO para el trabajador y el servidor web
  • Un repositorio Git accesible desde su VPC

Encima, cargamos un paquete de Python de muestra en el repositorio de Git:

git clone https://github.com/scrapy/scrapy
git clone https://git-codecommit.us-east-1.amazonaws.com/v1/repos/scrapy scrapylocal
rm -rf ./scrapy/.git*
cp -r ./scrapy/* ./scrapylocal
cd scrapylocal
git add --all
git commit -m "first commit"
git push

Cree e instale el script de inicio en el entorno de Amazon MWAA

Cree el archivo startup.sh usando el subsiguiente código de ejemplo:

#!/bin/sh

echo "Printing Apache Airflow component"
echo $MWAA_AIRFLOW_COMPONENT

if (( "${MWAA_AIRFLOW_COMPONENT}" != "webserver" ))
then
sudo yum -y install libaio
fi
if (( "${MWAA_AIRFLOW_COMPONENT}" == "webserver" ))
then
echo "Setting extended python requirements for webservers"
export EXTENDED_REQUIREMENTS="webserver_reqs.txt"
fi

if (( "${MWAA_AIRFLOW_COMPONENT}" == "worker" ))
then
echo "Setting extended python requirements for workers"
export EXTENDED_REQUIREMENTS="worker_reqs.txt"
fi

if (( "${MWAA_AIRFLOW_COMPONENT}" == "scheduler" ))
then
echo "Setting extended python requirements for schedulers"
export EXTENDED_REQUIREMENTS="scheduler_reqs.txt"
fi

Cargue startup.sh en el depósito S3 de su entorno Amazon MWAA:

aws s3 cp startup.sh s3://(mwaa-environment-bucket)
aws mwaa update-environment --startup-script-s3-path s3://(mwaa-environment-bucket)/startup.sh

Explore las secuencias de registros de CloudWatch para sus trabajadores y vea el registro de trabajador_consola. Observe que el script de inicio ahora se está ejecutando y configurando la variable de entorno.

secuencia de comandos de inicio de registro

Cree e instale dependencias globales de Python en el entorno de Amazon MWAA

Su archivo de requisitos debe incluir una manifiesto de restricción para comprobar de que los paquetes enumerados en sus requisitos sean compatible con la lectura de Apache Airflow estás usando. La manifiesto que comienza con -r hace remisión a la variable de entorno que configuró en su startup.sh script basado en el tipo de componente.

El subsiguiente código es un ejemplo de la requirements.txt archivo:

--constraint https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.11.txt
-r /usr/nave/airflow/dags/${EXTENDED_REQUIREMENTS}

Cargue el archivo requisitos.txt en el depósito S3 del entorno de Amazon MWAA:

aws s3 cp requirements.txt s3://(mwaa-environment-bucket)

Cree e instale dependencias de Python específicas de componentes en el entorno de Amazon MWAA

Para este ejemplo, queremos instalar el paquete Python scrapy en trabajadores y programadores desde nuestro repositorio privado de Git. Además queremos instalar pprintpp en el servidor web desde los índices de paquetes públicos de Python. Para lograrlo, necesitamos crear los siguientes archivos (proporcionamos código de ejemplo):

git+https://(user):(password)@git-codecommit.us-east-1.amazonaws.com/v1/repos/scrapy#egg=scrapy

git+https://(user):(password)@git-codecommit.us-east-1.amazonaws.com/v1/repos/scrapy#egg=scrapy

Subir webserver_reqs.txt, scheduler_reqs.txty worker_reqs.txt a la carpeta DAG para el entorno de Amazon MWAA:

aws s3 cp webserver_reqs.txt s3://mwaa-environment/dags
aws s3 cp scheduler_reqs.txt s3://mwaa-environment/dags
aws s3 cp worker_reqs.txt s3://mwaa-environment/dags

Actualice el entorno para el nuevo archivo de requisitos y observe los resultados.

Obtenga la última lectura del objeto para el archivo de requisitos:

aws s3api list-object-versions --bucket (mwaa-environment-bucket)

Actualice el entorno de Amazon MWAA para utilizar el nuevo requirements.txt archivo:

aws mwaa update-environment --name (mwaa-environment-name) --requirements-s3-object-version (s3-object-version)

Explore los flujos de registros de CloudWatch para sus trabajadores y vea el requirements_install registro. Observe que el script de inicio ahora se está ejecutando y configurando la variable de entorno.

requisitos de registro

log-git

Conclusión

En esta publicación, demostramos un método para instalar selectivamente dependencias de Python según el tipo de componente de Amazon MWAA (servidor web, programador o trabajador) desde un repositorio de Git al que solo se puede lograr desde su VPC.

Esperamos que esta publicación le haya proporcionado una mejor comprensión de cómo guiones de inicio y Trámite de dependencias de Python trabajar en un entorno Amazon MWAA. Puede implementar otras variaciones y configuraciones utilizando los conceptos descritos en esta publicación, según la configuración y los requisitos específicos de su red.


Sobre el autor

Tim Wilhoit es arquitecto senior de soluciones para el Unidad de Defensa en AWS. Tim tiene más de 20 abriles de experiencia en TI empresarial. Sus áreas de interés son la informática sin servidor y ML/AI. En su tiempo huido, a Tim le gusta acontecer tiempo en el balsa y apoyar a los Oklahoma State Cowboys. ¡Vaya golpes!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *