Managed Airflow (Gen 3) | Managed Airflow (Gen 2) | Managed Airflow (Legacy Gen 1)
Questa pagina descrive come utilizzare le funzioni Cloud Run per attivare i DAG di Managed Service for Apache Airflow in risposta agli eventi.
Apache Airflow è progettato per eseguire i DAG in base a una pianificazione regolare, ma puoi anche attivare i DAG in risposta agli eventi. Un modo per farlo è utilizzare Cloud Run Functions per attivare i DAG di Managed Airflow quando si verifica un evento specificato.
Inoltre puoi:
- Attiva i DAG utilizzando solo l'API REST Airflow.
- Crea una funzione che attiva un DAG quando un messaggio viene inviato a un argomento Pub/Sub.
L'esempio in questa guida mostra una funzione che attiva un DAG in risposta a un evento:
- Configura i trigger per la funzione in Cloud Run Functions.
- Quando la funzione viene attivata, effettua una richiesta per attivare un DAG tramite l'API REST Airflow del tuo ambiente Managed Airflow. La richiesta contiene l'identificatore e il tipo dell'evento, nonché il relativo payload.
- Airflow elabora questa richiesta ed esegue il DAG specificato nella richiesta. Il DAG restituisce i dati che gli sono stati passati dalla funzione.
Prima di iniziare
Questa sezione elenca i passaggi preparatori.
Controlla la configurazione di rete del tuo ambiente
Questa soluzione non funziona nelle configurazioni di IP privato e Controlli di servizio VPC perché non è possibile configurare la connettività dalle funzioni Cloud Run al server web Airflow in queste configurazioni.
Abilitare le API per il progetto
Console
Abilita le API Managed Airflow e Cloud Run Functions, se non sono già abilitate.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.
gcloud
Abilita le API Managed Airflow e Cloud Run Functions, se non sono già abilitate:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.
gcloud services enable cloudfunctions.googleapis.comcomposer.googleapis.com
Abilita l'API REST Airflow
A seconda della versione di Airflow:
- Per Airflow 2, l'API REST stabile è già abilitata per impostazione predefinita. Se nel tuo ambiente l'API stabile è disabilitata, abilita l'API REST stabile.
- Per Airflow 1, abilita l'API REST sperimentale.
Consenti chiamate API all'API REST Airflow utilizzando controllo dell'accesso alla rete del server web
Le funzioni Cloud Run possono raggiungere l'API REST di Airflow tramite un indirizzo IPv4 o IPv6.
Se non hai la certezza di quale sarà l'intervallo IP di chiamata, utilizza un'opzione di configurazione predefinita in Controllo dell'accesso al web server, ovvero All IP addresses have access (default), per non bloccare accidentalmente le tue funzioni Cloud Run. Puoi sempre
configurare l'accesso alla rete del server web in un secondo momento.
Ottieni l'URL del server web Airflow
Questo esempio effettua richieste API REST all'endpoint del server web Airflow.
Utilizzi la parte dell'URL dell'interfaccia web di Airflow prima di .appspot.com nel codice di Cloud Function.
Console
Nella console Google Cloud , vai alla pagina Ambienti.
Fai clic sul nome del tuo ambiente.
Nella pagina Dettagli ambiente, vai alla scheda Configurazione ambiente.
L'URL del server web Airflow è elencato nell'elemento UI web di Airflow.
gcloud
Esegui questo comando:
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format='value(config.airflowUri)'
Sostituisci:
ENVIRONMENT_NAMEcon il nome dell'ambiente.LOCATIONcon la regione in cui si trova l'ambiente.
Ottieni il client_id del proxy IAM
Per effettuare una richiesta all'endpoint API REST di Airflow, la funzione richiede l'ID client del proxy Identity and Access Management che protegge il server web Airflow.
Managed Airflow non fornisce direttamente queste informazioni. In alternativa, invia una richiesta non autenticata al server web Airflow e acquisisci l'ID client dall'URL di reindirizzamento:
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
Sostituisci AIRFLOW_URL con l'URL dell'interfaccia web di Airflow.
Nell'output, cerca la stringa che segue client_id. Ad esempio:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
Salva il seguente codice in un file denominato get_client_id.py. Inserisci i valori per project_id, location e composer_environment, poi esegui il codice in Cloud Shell o nel tuo ambiente locale.
Caricare un DAG nel tuo ambiente
Carica un DAG nel tuo ambiente. Il seguente DAG di esempio restituisce la configurazione di esecuzione del DAG ricevuta. Attiverai questo DAG da una funzione, che creerai più avanti in questa guida.
import datetime
import airflow
from airflow.operators.bash_operator import BashOperator
with airflow.DAG(
'composer_sample_trigger_response_dag',
start_date=datetime.datetime(2026, 1, 1),
# Not scheduled, trigger only
schedule=None) as dag:
# Print the dag_run's configuration, which includes information about the
# Cloud Storage object change.
print_gcs_info = BashOperator(
task_id='print_gcs_info', bash_command='echo {{ dag_run.conf }}}}')
Esegui il deployment di una funzione che attiva il DAG
Puoi eseguire il deployment di una funzione utilizzando il linguaggio che preferisci supportato da Cloud Run Functions o Cloud Run. Questo tutorial mostra una Cloud Functions implementata in Python e Java.
Specifica i parametri di configurazione della funzione
Trigger: seleziona uno o più trigger Eventarc per la tua funzione.
Per saperne di più sulla creazione di trigger, consulta Creare trigger con Eventarc. Ad esempio, puoi attivare funzioni da Cloud Storage utilizzando Eventarc.
Service account: il account di servizio specificato per il trigger deve disporre di autorizzazioni sufficienti per attivare i DAG negli ambienti Managed Airflow.
Ti consigliamo di seguire il principio del privilegio minimo e di concedere solo il ruolo Utente Composer (
composer.user). Per saperne di più sulla configurazione delle autorizzazioni, consulta Ruoli e autorizzazioni per le destinazioni Cloud Run.Entry point della funzione:
(Python) Quando aggiungi il codice per questo esempio, seleziona il runtime Python 3.10 o versioni successive e specifica
trigger_dagcome punto di ingresso.
Aggiungere requisiti
Specifica le dipendenze nel file requirements.txt:
Aggiungi codice per la funzione
Inserisci il seguente codice nel file main.py ed esegui le seguenti
sostituzioni:
Sostituisci il valore della variabile
client_idcon il valoreclient_idche hai ottenuto in precedenza.Sostituisci il valore della variabile
webserver_idcon l'ID progetto tenant, che fa parte dell'URL dell'interfaccia web di Airflow prima di.appspot.com. In precedenza hai ottenuto l'URL dell'interfaccia web di Airflow.Specifica la versione dell'API REST Airflow che utilizzi:
- Se utilizzi l'API REST Airflow stabile, imposta la variabile
USE_EXPERIMENTAL_APIsuFalse. - Se utilizzi l'API REST Airflow sperimentale, non sono necessarie modifiche. La variabile
USE_EXPERIMENTAL_APIè già impostata suTrue.
- Se utilizzi l'API REST Airflow stabile, imposta la variabile
Testare la funzione
Per verificare che la funzione e il DAG funzionino come previsto:
- Attendi il deployment della funzione.
- Attiva la funzione in base al trigger specificato. Puoi anche attivare la funzione manualmente selezionando l'azione Testa la funzione nella console Google Cloud .
- Controlla la pagina DAG nell'interfaccia web di Airflow. Il DAG deve avere un'esecuzione attiva o già completata.
- Nell'interfaccia utente di Airflow, controlla i log delle attività per questa esecuzione. Dovresti vedere
che l'attività
print_gcs_inforestituisce i dati ricevuti dalla funzione ai log:
Output di esempio:
[2021-04-04 18:25:44,778] {bash_operator.py:154} INFO - Output:
[2021-04-04 18:25:44,781] {bash_operator.py:158} INFO - Triggered from GCF:
{bucket: example-storage-for-gcf-triggers, contentType: text/plain,
crc32c: dldNmg==, etag: COW+26Sb5e8CEAE=, generation: 1617560727904101,
... }
[2021-04-04 18:25:44,781] {bash_operator.py:162} INFO - Command exited with
return code 0h
Passaggi successivi
- Accedere alla UI di Airflow
- Accedere all'API REST di Airflow
- Scrivi DAG
- Scrivi funzioni Cloud Run
- Trigger di Cloud Storage