Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Apache Airflow tiene una interfaz de la API de REST que puedes usar para realizar tareas como obtener información sobre ejecuciones y tareas de DAG, actualizar DAG, obtener la configuración de Airflow, agregar y borrar conexiones, y enumerar usuarios.
Para ver un ejemplo del uso de la API de REST de Airflow con funciones de Cloud Run, consulta Activa los DAG con Cloud Functions.
Versiones de la API de REST de Airflow
Las siguientes versiones de la API de REST de Airflow están disponibles en Cloud Composer 1:
- Airflow 1 usa la API de REST experimental.
Airflow 2 usa la API de REST estable. Airflow dejó de estar disponible en la API de REST experimental.
Aún puedes usar la API de REST experimental en Airflow 2 si la habilitas a través de una anulación de configuración de Airflow, como se describe más adelante.
Antes de comenzar
Enable the Cloud Composer API.
Habilita la API de REST estable de Airflow
Airflow 2
La API de REST estable ya está habilitada de forma predeterminada en Airflow 2.
Cloud Composer usa su propio backend de autenticación de API, que está integrado en Identity-Aware Proxy.La autorización funciona de la manera estándar que proporciona Airflow. Cuando un usuario nuevo se autoriza a través de la API, la cuenta del usuario obtiene la función Op
de forma predeterminada.
Puedes habilitar o inhabilitar la API de REST estable o cambiar la función de usuario predeterminada si anulas 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 de REST estable, cambia a
airflow.api.auth.backend.deny_all |
api
|
composer_auth_user_registration_role
|
Op
|
Puedes especificar cualquier otra función. |
Airflow 1
La API de REST estable no está disponible en Airflow 1. En su lugar, puedes usar la API de REST experimental.
Habilita la API de REST de Airflow experimental
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 rechaza todas las solicitudes que realizas.
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 rechaza todas las solicitudes que realizas. Debes usar solicitudes para activar los DAG, por lo que debes habilitar 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 establecer esta opción de configuración en airflow.api.auth.backend.default
, el servidor web de Airflow acepta todas las solicitudes a la API sin autenticación. Aunque el servidor web de Airflow no requiere autenticación, aún está protegido por Identity-Aware Proxy, que proporciona su propia capa de autenticación.
Permitir las llamadas a la API de REST de Airflow con el control de acceso al servidor web
Según el método que se use para llamar a la API de REST de Airflow, el método del emisor Puede usar una dirección IPv4 o IPv6. Recuerda desbloquear el tráfico de IP a la API de REST de Airflow con el Control de acceso del servidor web.
Usa la opción de configuración predeterminada, que es All IP addresses have access (default)
.
si no estás seguro de desde qué dirección IP tus llamadas a la API de REST de Airflow
se enviarán.
Realiza llamadas a la API de REST de Airflow
Obtén el ID de cliente del proxy de IAM
Para realizar una solicitud al extremo de la API de REST de Airflow, la función requiere el ID de cliente del proxy de IAM que protege el servidor web de Airflow.
Cloud Composer no proporciona esta información directamente. En cambio, realiza una solicitud no autenticada al servidor web de Airflow y captura el ID de cliente de la URL de redireccionamiento.
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
Reemplaza AIRFLOW_URL
por la URL de la interfaz web de Airflow.
En el resultado, busca la string 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
. Completa tus valores para project_id
, location
y composer_environment
. Luego, ejecuta el código en Cloud Shell o en tu entorno local.
Llama a la API de REST de Airflow con client_id
Realiza los siguientes reemplazos:
- Reemplaza el valor de la variable
client_id
con el valorclient_id
obtenidos en el paso anterior. - Reemplaza el valor de la variable
webserver_id
por el ID de proyecto de tu usuario, que es parte de la URL de la interfaz web de Airflow antes de.appspot.com
. Obtuviste la URL de la interfaz web de Airflow en un paso anterior. Especifica la versión de la API de REST de Airflow que usas:
- Si usas la API de REST de Airflow estable, establece la variable
USE_EXPERIMENTAL_API
enFalse
. - Si usas la API de REST de Airflow experimental, no es necesario realizar cambios. La variable
USE_EXPERIMENTAL_API
ya está configurada comoTrue
.
- Si usas la API de REST de Airflow estable, establece la variable
Accede a la API de REST de Airflow con una cuenta de servicio
La base de datos de Airflow limita la longitud del campo de correo electrónico a 64 caracteres. A veces, las cuentas de servicio tienen direcciones de correo electrónico con más de 64 caracteres caracteres. No es posible crear usuarios de Airflow para ese servicio de la forma usual. Si no hay un usuario de Airflow para esa cuenta de servicio, el acceso a la API de REST de Airflow genera los errores HTTP 401 y 403.
Como solución alternativa, puedes registrar previamente un usuario de Airflow para una cuenta de servicio. Para
hazlo, usa accounts.google.com:NUMERIC_USER_ID
como nombre de usuario y cualquier
cadena única como el correo electrónico.
Para obtener
NUMERIC_USER_ID
para una cuenta de servicio, ejecuta lo siguiente:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
Reemplaza lo siguiente:
SA_NAME
por el nombre de la cuenta de servicio.PROJECT_ID
por el ID del proyecto.
Crea un usuario de Airflow con el rol
Op
para la cuenta de servicio:IU de Airflow
Ve a Administrador > Usuarios y haz clic en Crear. Tu El usuario de Airflow debe tener el rol
Admin
para abrir esta página.Especifica
accounts.google.com:NUMERIC_USER_ID
como el usuario. de la fuente de datos. ReemplazaNUMERIC_USER_ID
por el ID de usuario que obtuviste en el paso anterior.Especifica un identificador único como el correo electrónico. Puedes usar cualquier o una cadena única.
Especifica el rol del usuario. Por ejemplo,
Op
.Asegúrate de que esté seleccionada la casilla de verificación Is Active?.
Especifica el nombre y el apellido 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
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entornoNUMERIC_USER_ID
por el ID de usuario que obtuviste 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, un llamador que se autentique como la cuenta de servicio se reconoce como un usuario registrado previamente y accede a Airflow.
Ajusta el componente de la API de REST de Airflow
Los extremos de la API de REST de Airflow y de la IU de Airflow se ejecutan dentro del componente, es decir, el servidor web de Airflow. En caso de que uses la API de REST de forma intensiva, considera aumentar los parámetros de CPU y memoria para ajustar los recursos del servidor web de Airflow a la carga esperada.