Ejecuta un entorno de Airflow local con la herramienta de CLI de desarrollo local de Composer

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

En esta sección, se describe cómo crear, configurar y ejecutar un entorno local de Airflow con la herramienta de CLI de Composer Local Development.

Acerca de la herramienta de CLI de Composer Local Development

La herramienta de CLI de Composer Local Development optimiza el desarrollo de DAGs de Apache Airflow para Cloud Composer ejecutando un entorno de Airflow de forma local. Este entorno local de Airflow usa una imagen de compilación de Airflow que utiliza una versión de Cloud Composer específica.

Puedes crear un entorno local de Airflow basado en un entorno existente de Cloud Composer. En este caso, el entorno local de Airflow toma la lista de paquetes de PyPI instalados y los nombres de las variable de entorno de tu entorno de Cloud Composer.

Puedes usar este entorno local de Airflow para realizar pruebas y desarrollar, por ejemplo, para probar código de DAG nuevo, paquetes de PyPI o opciones de configuración de Airflow.

Antes de comenzar

  • La herramienta de CLI de desarrollo local de Composer crea entornos locales de Airflow en un directorio en el que ejecutas el comando composer-dev create. Para acceder a tu entorno local de Airflow más adelante, ejecuta los comandos de la herramienta en la ruta de acceso en la que creaste inicialmente el entorno local. Todos los datos del entorno local se almacenan en un subdirectorio en la ruta de acceso en la que creaste el entorno local: ./composer/<local_environment_name>.

  • Tu computadora debe tener suficiente espacio en el disco para almacenar imágenes de compilación de Airflow. La herramienta de CLI de desarrollo local de Composer almacena un archivo de imagen para cada compilación de Airflow. Por ejemplo, si tienes dos entornos locales de Airflow con diferentes compilaciones de Airflow, la herramienta de CLI de Composer Local Development almacena dos imágenes de compilación de Airflow.

  • La herramienta de CLI de desarrollo local de Composer usa resultados con colores. Puedes inhabilitar el resultado con colores con la variable NO_COLOR=1: NO_COLOR=1 composer-dev <other commands>.

  • Si solo tienes un entorno local, puedes omitir su nombre en todos los comandos de composer-dev, excepto en run-airflow-cmd.

  • Instala las dependencias de la herramienta de la CLI de Composer Local Development:

  • Instala Docker. Docker debe estar instalado y en ejecución en el sistema local. Para verificar que Docker se esté ejecutando, puedes ejecutar cualquier comando de la CLI de Docker, como docker ps.

Configura las credenciales

Si aún no lo hiciste, obtén credenciales de usuario nuevas para usar con las credenciales predeterminadas de la aplicación:

gcloud auth application-default login

Accede a gcloud CLI con tu Cuenta de Google:

gcloud auth login

Todas las llamadas a la API que realizan la herramienta de CLI de desarrollo local de Composer y los DAG se ejecutan desde la cuenta que usas en gcloud CLI. Por ejemplo, si un DAG en tu entorno local de Airflow lee el contenido de un bucket de Cloud Storage, esta cuenta debe tener permisos para acceder al bucket. Esto es diferente de los entornos de Cloud Composer, en los que la cuenta de servicio de un entorno realiza las llamadas.

Instala la herramienta de la CLI de Composer Local Development

Clona el repositorio de la CLI de Composer Local Development:

git clone https://github.com/GoogleCloudPlatform/composer-local-dev.git

En el directorio de nivel superior del repositorio clonado, ejecuta el siguiente comando:

pip install .

Según la configuración de pip, es posible que la ruta en la que se instala la herramienta no esté en la variable PATH. Si es así, pip mostrará un mensaje de advertencia. Puedes usar la información de este mensaje de advertencia para agregar este directorio a la variable PATH en tu sistema operativo.

Crea un entorno local de Airflow con una imagen de compilación de Airflow

Para enumerar las imágenes de compilación de Airflow disponibles, ejecuta el siguiente comando:

composer-dev list-available-versions --include-past-releases --limit 10

Para crear un entorno local de Airflow con parámetros predeterminados, ejecuta el siguiente comando:

composer-dev create \
  --from-image-version IMAGE_VERSION \
  LOCAL_ENVIRONMENT_NAME

Otros parámetros:

composer-dev create \
  --from-image-version IMAGE_VERSION \
  --project PROJECT_ID \
  --port WEB_SERVER_PORT \
  --dags-path LOCAL_DAGS_PATH \
  LOCAL_ENVIRONMENT_NAME

Reemplaza lo siguiente:

  • IMAGE_VERSION por el nombre de la imagen de compilación de Airflow.
  • PROJECT_ID por el ID del proyecto.
  • WEB_SERVER_PORT con el puerto en el que debe escuchar el servidor web de Airflow.
  • LOCAL_DAGS_PATH con la ruta de acceso a un directorio local en el que se encuentran los archivos DAG.
  • LOCAL_ENVIRONMENT_NAME por el nombre de este entorno local de Airflow.

Ejemplo:

composer-dev create \
  --from-image-version composer-3-airflow-2.10.5-build.12 \
  example-local-environment

Crea un entorno local de Airflow a partir de un entorno de Cloud Composer

Solo se toma la siguiente información de un entorno de Cloud Composer:

  • Es la compilación específica de Airflow que usa tu entorno.

  • Lista de paquetes personalizados de PyPI instalados en tu entorno.

  • Lista comentada de los nombres de las variables de entorno establecidas en tu entorno.

No se copian otros parámetros de configuración e información del entorno, como los archivos DAG, el historial de ejecución de DAG, las variables de Airflow y las conexiones, desde tu entorno de Cloud Composer.

Para crear un entorno local de Airflow a partir de un entorno existente de Cloud Composer, sigue estos pasos:

composer-dev create LOCAL_ENVIRONMENT_NAME \
    --from-source-environment ENVIRONMENT_NAME \
    --location LOCATION \
    --project PROJECT_ID \
    --port WEB_SERVER_PORT \
    --dags-path LOCAL_DAGS_PATH

Reemplaza lo siguiente:

  • LOCAL_ENVIRONMENT_NAME por un nombre para el entorno local de Airflow.
  • ENVIRONMENT_NAME por el nombre del entorno de Cloud Composer.
  • LOCATION con la región en la que se encuentra el entorno de Cloud Composer.
  • PROJECT_ID por el ID del proyecto.
  • WEB_SERVER_PORT con un puerto para el servidor web de Airflow local.
  • LOCAL_DAGS_PATH con una ruta de acceso a un directorio local en el que se encuentran los DAGs.

Ejemplo:

composer-dev create example-local-environment \
  --from-source-environment example-environment \
  --location us-central1 \
  --project example-project \
  --port 8081 \
  --dags-path example_directory/dags

Inicia un entorno local de Airflow

Para iniciar un entorno local de Airflow, ejecuta lo siguiente:

composer-dev start LOCAL_ENVIRONMENT_NAME

Reemplaza lo siguiente:

  • LOCAL_ENVIRONMENT_NAME por el nombre de un entorno local de Airflow.

Cómo detener o reiniciar un entorno local de Airflow

Cuando reinicias un entorno local de Airflow, la herramienta de CLI de Composer Local Development reinicia el contenedor de Docker en el que se ejecuta el entorno. Todos los componentes de Airflow se detienen y se reinician. Como resultado, todas las ejecuciones de DAG que se ejecutan durante un reinicio se marcan como fallidas .

Para reiniciar o iniciar un entorno local de Airflow detenido, ejecuta el siguiente comando:

composer-dev restart LOCAL_ENVIRONMENT_NAME

Reemplaza lo siguiente:

  • LOCAL_ENVIRONMENT_NAME por el nombre de un entorno local de Airflow.

Para detener un entorno local de Airflow, ejecuta el siguiente comando:

composer-dev stop LOCAL_ENVIRONMENT_NAME

Agregar y actualizar DAG

Los DAG se almacenan en el directorio que especificaste en el parámetro --dags-path cuando creaste tu entorno local de Airflow. De forma predeterminada, este directorio es ./composer/<local_environment_name>/dags. Puedes obtener el directorio que usa tu entorno con el comando describe.

Para agregar y actualizar DAGs, cambia los archivos en este directorio. No es necesario que reinicies tu entorno local de Airflow.

Consulta los registros del entorno local de Airflow

Puedes ver los registros recientes de un contenedor de Docker que ejecuta tu entorno local de Airflow. De esta manera, puedes supervisar los eventos relacionados con el contenedor y verificar los registros de Airflow en busca de errores, como conflictos de dependencias causados por la instalación de paquetes de PyPI.

Para ver los registros de un contenedor de Docker que ejecuta tu entorno local de Airflow, ejecuta el siguiente comando:

composer-dev logs LOCAL_ENVIRONMENT_NAME --max-lines 10

Para seguir el flujo de registro, omite el argumento --max-lines:

composer-dev logs LOCAL_ENVIRONMENT_NAME

Ejecuta un comando de la CLI de Airflow

Puedes ejecutar comandos de la CLI de Airflow en tu entorno local de Airflow.

Para ejecutar un comando de la CLI de Airflow, haz lo siguiente:

composer-dev run-airflow-cmd LOCAL_ENVIRONMENT_NAME \
  SUBCOMMAND SUBCOMMAND_ARGUMENTS

Ejemplo:

composer-dev run-airflow-cmd example-local-environment dags list -o table

Configura entornos locales de Airflow

La herramienta de CLI de desarrollo local de Composer almacena parámetros de configuración para un entorno local de Airflow, como variables de entorno y requisitos de paquetes de PyPI en el directorio del entorno local (./composer/<local_environment_name>).

La configuración se aplica cuando se inicia un entorno local de Airflow. Por ejemplo, si agregas requisitos de paquetes de PyPI en conflicto, la herramienta de CLI de Composer Local Development informa errores cuando inicias el entorno local.

Las conexiones de Airflow se almacenan en la base de datos del entorno local de Airflow. Puedes configurarlos ejecutando un comando de la CLI de Airflow o almacenando los parámetros de conexión en variables de entorno. Para obtener más información sobre las formas de crear y configurar conexiones, consulta Administrar conexiones en la documentación de Airflow.

Obtén una lista y el estado de los entornos locales de Airflow

Para enumerar todos los entornos locales de Airflow disponibles y mostrar su estado, haz lo siguiente:

composer-dev list

Para describir un entorno específico y obtener detalles como la versión de la imagen, la ruta de acceso de los DAG y la URL del servidor web de un entorno, haz lo siguiente:

composer-dev describe LOCAL_ENVIRONMENT_NAME

Reemplaza lo siguiente:

  • LOCAL_ENVIRONMENT_NAME por el nombre del entorno local de Airflow.

Enumera las imágenes que usan los entornos locales de Airflow

Para enumerar todas las imágenes que usa la herramienta de CLI de Composer Local Development, ejecuta el siguiente comando:

docker images --filter=reference='*/cloud-airflow-releaser/*/*'

Instala complementos y cambia datos

Los complementos y los datos de un entorno local de Airflow se toman del directorio del entorno local: ./composer/<local_environment_name>/data y ./composer/<local_environment_name>/plugins.

Para cambiar el contenido de los directorios /data y /plugins, agrega o quita archivos en ellos. Docker propaga automáticamente los cambios en los archivos a tu entorno local de Airflow.

La herramienta de CLI de desarrollo local de Composer no admite la especificación de un directorio diferente para los datos y los complementos.

Configure las variables de entorno

Para configurar las variables de entorno, edita el archivo variables.env en el directorio del entorno: ./composer/<local_environment_name>/variables.env.

El archivo variables.env debe contener definiciones de clave-valor, una línea para cada variable de entorno. Para cambiar las opciones de configuración de Airflow, usa el formato AIRFLOW__SECTION__KEY. Para obtener más información sobre las variables de entorno disponibles, consulta la referencia de configuración de Airflow.

EXAMPLE_VARIABLE=True
ANOTHER_VARIABLE=test
AIRFLOW__WEBSERVER__DAG_DEFAULT_VIEW=graph

Para aplicar los cambios, reinicia tu entorno local de Airflow.

Instala o quita paquetes de PyPI

Para instalar o quitar paquetes de PyPI, modifica el archivo requirements.txt en el directorio del entorno: ./composer/<local_environment_name>/requirements.txt.

Los requisitos deben seguir el formato especificado en PEP-508, donde cada requisito se especifica en minúsculas y consta del nombre del paquete con extras opcionales y especificadores de versión.

Para aplicar los cambios, reinicia tu entorno local de Airflow.

Cómo cambiar a otra imagen de compilación de Airflow

Puedes usar cualquier imagen de compilación de Airflow con la herramienta de CLI de Composer Local Development y cambiar entre las imágenes. Este enfoque es diferente de la actualización de tu entorno de Cloud Composer, ya que los parámetros de configuración de tu entorno local de Airflow se aplican cuando se inicia.

Por ejemplo, después de que se lanza una nueva compilación de Airflow, puedes cambiar tu entorno para que la use y conservar la configuración existente del entorno local de Airflow.

Para cambiar la imagen del entorno que usa tu entorno local de Airflow, haz lo siguiente:

  1. Edita el archivo de configuración del entorno local: ./composer/<local_environment_name>/config.json.

  2. Cambia el valor del parámetro composer_image_version. Para ver los valores disponibles, puedes listar las imágenes disponibles.

  3. Para aplicar los cambios, reinicia tu entorno local de Airflow.

Borra un entorno local de Airflow

Precaución: Asegúrate de haber guardado todos los datos necesarios del entorno, como los registros y la configuración.

Para borrar un entorno local de Airflow, ejecuta el siguiente comando:

composer-dev remove LOCAL_ENVIRONMENT_NAME

Si el entorno se está ejecutando, agrega la marca --force para forzar su eliminación.

Borra imágenes de Docker

Para borrar todas las imágenes descargadas por la herramienta de CLI de Composer Local Development, ejecuta el siguiente comando:

docker rmi $(docker images --filter=reference='*/cloud-airflow-releaser/*/*' -q)

Soluciona problemas

En esta sección, se proporcionan soluciones para problemas habituales.

No se puede iniciar un entorno local en macOS

Si instalaste el paquete composer-dev en un directorio al que Docker no puede acceder, es posible que tu entorno local no se inicie.

Por ejemplo, si Python está instalado en el directorio /opt, como cuando lo instalas con la configuración predeterminada de Homebrew en macOS, el paquete composer-dev también se instala en el directorio /opt. Dado que Docker cumple con las reglas de zona de pruebas de Apple, el directorio /opt no está disponible de forma predeterminada. Además, no puedes agregarlo a través de la IU (Configuración > Recursos > Uso compartido de archivos).

En este caso, la herramienta de CLI de Composer Local Development genera un mensaje de error similar al siguiente ejemplo:

Failed to create container with an error: 400 Client Error for ...
Bad Request ("invalid mount config for type "bind": bind source path does not exist:
/opt/homebrew/lib/python3.9/site-packages/composer_local_dev/docker_files/entrypoint.sh

Possible reason is that composer-dev was installed in the path that is
not available to Docker. See...")

Puedes usar una de las siguientes soluciones:

  • Instala Python o el paquete composer-dev en un directorio diferente para que Docker pueda acceder al paquete.
  • Edita manualmente el archivo ~/Library/Group\ Containers/group.com.docker/settings.json y agrega /opt a filesharingDirectories.

¿Qué sigue?