Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Apache Airflow tiene una interfaz de API REST que puedes usar para realizar tareas como obtener información sobre ejecuciones de DAGs y tareas, actualizar DAGs, obtener la configuración de Airflow, añadir y eliminar conexiones, y enumerar usuarios.
Para ver un ejemplo de cómo usar la API REST de Airflow con funciones de Cloud Run, consulta Activar DAGs con funciones de Cloud Run.
Versiones de la API REST de Airflow
- Airflow 1 usa la API REST experimental.
- Airflow 2 usa la API REST estable. La API REST experimental está obsoleta en Airflow.
- Puedes seguir usando la API REST experimental en Airflow 2 si la habilitas mediante una anulación de configuración de Airflow, como se describe más adelante.
Configurar la API REST estable de Airflow
Airflow 2
La API REST estable está habilitada de forma predeterminada en Airflow 2. Cloud Composer usa su propio backend de autenticación de APIs, que está integrado con Identity-Aware Proxy.
La autorización funciona de la forma estándar que proporciona Airflow. Cuando un nuevo usuario autoriza el acceso a través de la API, su cuenta obtiene el rol Op
de forma predeterminada.
Puede habilitar o inhabilitar la API REST estable, o cambiar el rol de usuario predeterminado anulando las siguientes opciones de configuración de Airflow:
Sección | Clave | Valor | Notas |
---|---|---|---|
api
|
(Airflow 2.2.5 y versiones anteriores) auth_backend (Airflow 2.3.0 y versiones posteriores) auth_backends
|
airflow.composer.api.backend.composer_auth
|
Para inhabilitar la API REST estable, cambia a
airflow.api.auth.backend.deny_all |
api
|
composer_auth_user_registration_role
|
Op
|
Puedes especificar cualquier otro rol. |
Airflow 1
La API REST estable no está disponible en Airflow 1. En su lugar, puedes usar la API REST experimental.
Configurar la API REST experimental de Airflow
Airflow 2
De forma predeterminada, la función de autenticación de la API está inhabilitada en la API experimental. El servidor web de Airflow deniega todas las solicitudes que recibe. Para habilitar la función de autenticación de la API y la API experimental de Airflow 2, anula la siguiente opción de configuración de Airflow:
Sección | Clave | Valor | Notas |
---|---|---|---|
api
|
(Airflow 2.2.5 y versiones anteriores) auth_backend (Airflow 2.3.0 y versiones posteriores) auth_backends
|
airflow.api.auth.backend.default
|
El valor predeterminado es airflow.composer.api.backend.composer_auth . |
api
|
enable_experimental_api
|
True
|
El valor predeterminado es False . |
Airflow 1
De forma predeterminada, la función de autenticación de la API está inhabilitada en Airflow 1.10.11 y versiones posteriores. El servidor web de Airflow deniega todas las solicitudes que hagas. Las solicitudes se usan para activar DAGs, así que habilita esta función.
Para habilitar la función de autenticación de API en Airflow 1, anula la siguiente opción de configuración de Airflow:
Sección | Clave | Valor | Notas |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
El valor predeterminado es airflow.api.auth.backend.deny_all . |
Después de definir esta opción de configuración como airflow.api.auth.backend.default
, el servidor web de Airflow aceptará todas las solicitudes de API sin autenticación.
Aunque el servidor web de Airflow no requiere autenticación, Cloud Composer usa su propia capa de autenticación para protegerlo, que está integrada con Identity-Aware Proxy.
Permitir llamadas a la API REST de Airflow mediante el control de acceso al servidor web
En función del método utilizado para llamar a la API REST de Airflow, el método de llamada puede usar una dirección IPv4 o IPv6. Recuerda desbloquear el tráfico IP a la API REST de Airflow mediante el control de acceso al servidor web.
Usa la opción de configuración predeterminada, que es All IP addresses have access (default)
, si no sabes desde qué direcciones IP se enviarán tus llamadas a la API REST de Airflow.
Hacer llamadas a la API REST de Airflow
Obtener el client_id del proxy de IAM
Para hacer una solicitud al endpoint de la API REST de Airflow, la función requiere el ID de cliente del proxy de gestión de identidades y accesos que protege el servidor web de Airflow.
Cloud Composer no proporciona esta información directamente. En su lugar, haz una solicitud no autenticada al servidor web de Airflow y captura el ID de cliente de la URL de redirección:
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
Sustituye AIRFLOW_URL
por la URL de la interfaz web de Airflow.
En el resultado, busca la cadena que sigue a client_id
. Por ejemplo:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
Guarda el siguiente código en un archivo llamado get_client_id.py
. Rellena los valores de project_id
, location
y composer_environment
y, a continuación, ejecuta el código en Cloud Shell o en tu entorno local.
Llamar a la API REST de Airflow mediante client_id
Haz las siguientes sustituciones:
- Sustituye el valor de la variable
client_id
por el valorclient_id
obtenido en el paso anterior. - Sustituye el valor de la variable
webserver_id
por el ID de tu proyecto de arrendatario, que forma parte de la URL de la interfaz web de Airflow antes de.appspot.com
. Has obtenido la URL de la interfaz web de Airflow en un paso anterior. Especifica la versión de la API REST de Airflow que usas:
- Si usas la API REST estable de Airflow, asigna el valor
False
a la variableUSE_EXPERIMENTAL_API
. - Si usas la API REST experimental de Airflow, no tienes que hacer ningún cambio. La variable
USE_EXPERIMENTAL_API
ya está definida comoTrue
.
- Si usas la API REST estable de Airflow, asigna el valor
Acceder a la API REST de Airflow mediante una cuenta de servicio
La base de datos de Airflow en las versiones anteriores a la 2.3.0 limita la longitud del campo de correo a 64 caracteres. A veces, las cuentas de servicio tienen direcciones de correo electrónico de más de 64 caracteres. No es posible crear usuarios de Airflow para estas cuentas de servicio de la forma habitual. Si no hay ningún usuario de Airflow para esa cuenta de servicio, al acceder a la API REST de Airflow se producirán errores HTTP 401 y 403.
Como solución alternativa, puedes preregistrar un usuario de Airflow para una cuenta de servicio. Para ello, usa accounts.google.com:NUMERIC_USER_ID
como nombre de usuario y cualquier cadena única como correo.
Para obtener
NUMERIC_USER_ID
de una cuenta de servicio, ejecuta el siguiente comando:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
Sustituye:
SA_NAME
con el nombre de la cuenta de servicio.PROJECT_ID
con el ID del proyecto.
Crea un usuario de Airflow con el rol
Op
para la cuenta de servicio:Interfaz de usuario de Airflow
Vaya a Administrar > Usuarios y haga clic en Crear. Tu usuario de Airflow debe tener el rol
Admin
para abrir esta página.Especifica
accounts.google.com:NUMERIC_USER_ID
como nombre de usuario. SustituyeNUMERIC_USER_ID
por el ID de usuario obtenido en el paso anterior.Especifica un identificador único como correo electrónico. Puedes usar cualquier cadena única.
Especifica el rol del usuario. Por ejemplo,
Op
.Asegúrese de que la casilla ¿Está activo? esté marcada.
Especifica el nombre y los apellidos del usuario. Puedes usar cualquier cadena.
Haz clic en Guardar.
gcloud
En Airflow 2, ejecuta el siguiente comando de la CLI de Airflow:
gcloud composer environments run ENVIRONMENT_NAME \ --location LOCATION \ users create -- \ -u accounts.google.com:NUMERIC_USER_ID \ -e UNIQUE_ID \ -f UNIQUE_ID \ -l - -r Op --use-random-password
Sustituye:
ENVIRONMENT_NAME
con el nombre del entorno.LOCATION
con la región en la que se encuentra el entorno.NUMERIC_USER_ID
con el ID de usuario obtenido en el paso anterior.UNIQUE_ID
con el identificador del usuario de Airflow. Puedes usar cualquier cadena única.
Después de crear un usuario de Airflow para una cuenta de servicio, se reconoce a un llamante autenticado como la cuenta de servicio como usuario registrado previamente y se inicia sesión en Airflow.
Escalar el componente de la API REST de Airflow
Los endpoints de la API REST de Airflow y de la interfaz de usuario de Airflow se ejecutan en el servidor web de Airflow. Si usas la API REST de forma intensiva, considera la posibilidad de aumentar la cantidad de CPU y memoria disponibles para el servidor web de Airflow en función de la carga prevista.