Esegui un ambiente Airflow locale con lo strumento CLI Composer Local Development

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Questa sezione descrive come creare, configurare ed eseguire un ambiente Airflow locale utilizzando lo strumento CLI Composer Local Development.

Informazioni sullo strumento CLI di sviluppo locale di Composer

Lo strumento CLI di sviluppo locale di Composer semplifica lo sviluppo dei DAG di Apache Airflow per Cloud Composer eseguendo un ambiente Airflow in locale. Questo ambiente Airflow locale utilizza un'immagine di una versione Cloud Composer specifica.

Puoi creare un ambiente Airflow locale in base a un ambiente Cloud Composer esistente. In questo caso, l'ambiente Airflow locale prende l'elenco dei pacchetti PyPI installati e dei nomi delle variabili di ambiente dall'ambiente Cloud Composer.

Puoi utilizzare questo ambiente Airflow locale per scopi di test e sviluppo, ad esempio per testare il nuovo codice DAG, i pacchetti PyPI o le opzioni di configurazione di Airflow.

Prima di iniziare

  • Lo strumento CLI di sviluppo locale di Composer crea ambienti Airflow locali in una directory in cui esegui il comando composer-dev create. Per accedere in un secondo momento al tuo ambiente Airflow locale, esegui i comandi dello strumento nel percorso in cui hai creato inizialmente l'ambiente locale. Tutti i dati per l'ambiente locale vengono archiviati in una sottodirectory nel percorso in cui hai creato l'ambiente locale: ./composer/<local_environment_name>.

  • Il computer deve avere spazio di archiviazione sufficiente per memorizzare le immagini di Cloud Composer. Lo strumento CLI di sviluppo locale di Composer memorizza un file immagine per ogni versione di Cloud Composer. Ad esempio, se hai due ambienti Airflow locali con versioni diverse di Cloud Composer, lo strumento CLI Composer Local Development archivia due immagini Cloud Composer.

  • Lo strumento dell'interfaccia a riga di comando di sviluppo locale di Composer utilizza l'output colorato. Puoi disattivare l'output colorato con la variabile NO_COLOR=1: NO_COLOR=1 composer-dev <other commands>.

  • Se hai un solo ambiente locale, puoi omettere il nome dell'ambiente locale da tutti i comandi composer-dev, tranne run-airflow-cmd.

  • Installa le dipendenze dello strumento dell'interfaccia a riga di comando di Composer per lo sviluppo locale:

  • Installa Docker. Docker deve essere installato ed eseguito nel sistema locale. Per verificare che Docker sia in esecuzione, puoi eseguire qualsiasi comando dell'interfaccia a riga di comando Docker, ad esempio docker ps.

Configura le credenziali

Se non l'hai già fatto, ottieni nuove credenziali utente da utilizzare per le credenziali predefinite dell'applicazione:

gcloud auth application-default login

Accedi a gcloud CLI utilizzando il tuo Account Google:

gcloud auth login

Tutte le chiamate API eseguite dallo strumento CLI di sviluppo locale di Composer e dai DAG vengono eseguite dall'account che utilizzi in gcloud CLI. Ad esempio, se un DAG nel tuo ambiente Airflow locale legge i contenuti di un bucket Cloud Storage, questo account deve disporre delle autorizzazioni per accedere al bucket. Questo è diverso dagli ambienti Cloud Composer, in cui le chiamate vengono effettuate dall'account di servizio di un ambiente.

Installa lo strumento CLI di sviluppo locale di Composer

Clona il repository CLI di sviluppo locale di Composer:

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

Nella directory di primo livello del repository clonato, esegui:

pip install .

A seconda della configurazione di pip, il percorso in cui è installato lo strumento potrebbe non essere nella variabile PATH. In questo caso, pip visualizza un messaggio di avviso. Puoi utilizzare le informazioni di questo messaggio di avviso per aggiungere questa directory alla variabile PATH nel sistema operativo.

Creare un ambiente Airflow locale con una versione specifica di Cloud Composer

Per elencare le versioni disponibili di Cloud Composer, esegui:

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

Per creare un ambiente Airflow locale con i parametri predefiniti, esegui:

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

Altri parametri:

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

Sostituisci:

  • IMAGE_VERSION con il nome dell'immagine Cloud Composer.
  • PROJECT_ID con l'ID progetto.
  • WEB_SERVER_PORT con la porta su cui deve essere in ascolto il server web Airflow.
  • LOCAL_DAGS_PATH con il percorso di una directory locale in cui si trovano i file DAG.
  • LOCAL_ENVIRONMENT_NAME con il nome di questo ambiente Airflow locale.

Esempio:

composer-dev create \
  --from-image-version composer-2.11.1-airflow-2.10.2 \
  example-local-environment

Creare un ambiente Airflow locale da un ambiente Cloud Composer

Da un ambiente Cloud Composer vengono prese solo le seguenti informazioni:

Altre informazioni e parametri di configurazione dell'ambiente, come i file DAG, la cronologia di esecuzione dei DAG, le variabili Airflow e le connessioni, non vengono copiati dall'ambiente Cloud Composer.

Per creare un ambiente Airflow locale da un ambiente Cloud Composer esistente:

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

Sostituisci:

  • LOCAL_ENVIRONMENT_NAME con un nome per l'ambiente Airflow locale.
  • ENVIRONMENT_NAME con il nome dell'ambiente Cloud Composer.
  • LOCATION con la regione in cui si trova l'ambiente Cloud Composer.
  • PROJECT_ID con l'ID progetto.
  • WEB_SERVER_PORT con una porta per il server web Airflow locale.
  • LOCAL_DAGS_PATH con un percorso a una directory locale in cui si trovano i DAG.

Esempio:

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

Avvia un ambiente Airflow locale

Per avviare un ambiente Airflow locale, esegui:

composer-dev start LOCAL_ENVIRONMENT_NAME

Sostituisci:

  • LOCAL_ENVIRONMENT_NAME con il nome di un ambiente Airflow locale.

Interrompere o riavviare un ambiente Airflow locale

Quando riavvii un ambiente Airflow locale, lo strumento CLI Composer Local Development riavvia il container Docker in cui viene eseguito l'ambiente. Tutti i componenti di Airflow vengono arrestati e riavviati. Di conseguenza, tutte le esecuzioni di DAG eseguite durante un riavvio vengono contrassegnate come non riuscite .

Per riavviare o avviare un ambiente Airflow locale interrotto, esegui:

composer-dev restart LOCAL_ENVIRONMENT_NAME

Sostituisci:

  • LOCAL_ENVIRONMENT_NAME con il nome di un ambiente Airflow locale.

Per interrompere un ambiente Airflow locale, esegui:

composer-dev stop LOCAL_ENVIRONMENT_NAME

Aggiungi e aggiorna i DAG

I DAG vengono archiviati nella directory specificata nel parametro --dags-path quando hai creato l'ambiente Airflow locale. Per impostazione predefinita, questa directory è ./composer/<local_environment_name>/dags. Puoi ottenere la directory utilizzata dal tuo ambiente con il comando describe.

Per aggiungere e aggiornare i DAG, modifica i file in questa directory. Non è necessario riavviare l'ambiente Airflow locale.

Visualizzare i log dell'ambiente Airflow locale

Puoi visualizzare i log recenti di un contenitore Docker che esegue il tuo ambiente Airflow locale. In questo modo, puoi monitorare gli eventi relativi ai contenitori e controllare i log di Airflow per rilevare errori come conflitti di dipendenza causati dall'installazione dei pacchetti PyPI.

Per visualizzare i log di un container Docker che esegue il tuo ambiente Airflow locale, esegui:

composer-dev logs LOCAL_ENVIRONMENT_NAME --max-lines 10

Per seguire lo stream di log, ometti l'argomento --max-lines:

composer-dev logs LOCAL_ENVIRONMENT_NAME

Esegui un comando dell'interfaccia a riga di comando Airflow

Puoi eseguire i comandi dell'interfaccia a riga di comando Airflow nel tuo ambiente Airflow locale.

Per eseguire un comando dell'interfaccia a riga di comando di Airflow:

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

Esempio:

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

Configurare gli ambienti Airflow locali

Lo strumento CLI di sviluppo locale di Composer memorizza i parametri di configurazione per un ambiente Airflow locale, come le variabili di ambiente e i requisiti del pacchetto PyPI, nella directory dell'ambiente locale (./composer/<local_environment_name>).

La configurazione viene applicata all'avvio di un ambiente Airflow locale. Ad esempio, se aggiungi requisiti dei pacchetti PyPI in conflitto, lo strumento CLI di sviluppo locale di Composer segnala errori all'avvio dell'ambiente locale.

Le connessioni Airflow vengono memorizzate nel database dell'ambiente Airflow locale. Puoi configurarli eseguendo un comando Airflow CLI o memorizzando i parametri di connessione nelle variabili di ambiente. Per ulteriori informazioni sui modi per creare e configurare le connessioni, consulta Gestire le connessioni nella documentazione di Airflow.

Visualizza un elenco e lo stato degli ambienti Airflow locali

Per elencare tutti gli ambienti Airflow locali disponibili e visualizzarne lo stato:

composer-dev list

Per descrivere un ambiente specifico e ottenere dettagli come la versione dell'immagine, il percorso dei DAG e l'URL del server web di un ambiente:

composer-dev describe LOCAL_ENVIRONMENT_NAME

Sostituisci:

  • LOCAL_ENVIRONMENT_NAME con il nome dell'ambiente Airflow locale.

Elenca le immagini utilizzate dagli ambienti Airflow locali

Per elencare tutte le immagini utilizzate dallo strumento CLI di sviluppo locale di Composer, esegui:

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

Installare plug-in e modificare i dati

I plug-in e i dati per un ambiente Airflow locale vengono estratti dalla directory dell'ambiente locale: ./composer/<local_environment_name>/data e ./composer/<local_environment_name>/plugins.

Per modificare i contenuti delle directory /data e /plugins, aggiungi o rimuovi i file in queste directory. Docker propaga automaticamente le modifiche ai file al tuo ambiente Airflow locale.

Lo strumento CLI di sviluppo locale di Composer non supporta la specifica di una directory diversa per i dati e i plug-in.

Configura le variabili di ambiente

Per configurare le variabili di ambiente, modifica il file variables.env nella directory dell'ambiente:./composer/<local_environment_name>/variables.env.

Il file variables.env deve contenere definizioni chiave-valore, una riga per ogni variabile di ambiente. Per modificare le opzioni di configurazione di Airflow, utilizza il formato AIRFLOW__SECTION__KEY. Per ulteriori informazioni sulle variabili di ambiente disponibili, consulta il riferimento alla configurazione di Airflow.

EXAMPLE_VARIABLE=True
ANOTHER_VARIABLE=test
AIRFLOW__WEBSERVER__DAG_DEFAULT_VIEW=graph

Per applicare le modifiche, riavvia l'ambiente Airflow locale.

Installare o rimuovere i pacchetti PyPI

Per installare o rimuovere i pacchetti PyPI, modifica il file requirements.txt nella directory dell'ambiente: ./composer/<local_environment_name>/requirements.txt.

I requisiti devono seguire il formato specificato in PEP-508, dove ogni requisito è specificato in lettere minuscole e consiste nel nome del pacchetto con extra facoltativi e specificatori di versione.

Per applicare le modifiche, riavvia l'ambiente Airflow locale.

Passare a un'altra immagine Cloud Composer

Puoi utilizzare qualsiasi immagine Cloud Composer con lo strumento CLI Composer Local Development e passare da un'immagine all'altra. Questo approccio è diverso dall'upgrade dell'ambiente Cloud Composer, perché i parametri di configurazione dell'ambiente Airflow locale vengono applicati all'avvio.

Ad esempio, dopo il rilascio di una nuova versione di Cloud Composer, puoi passare all'utilizzo della nuova versione e mantenere la configurazione esistente dell'ambiente Airflow locale. Come altro esempio, puoi passare da una versione di Airflow all'altra all'interno di una versione specifica di Cloud Composer.

Per modificare l'immagine dell'ambiente utilizzata dall'ambiente Airflow locale:

  1. Modifica il file di configurazione dell'ambiente locale: ./composer/<local_environment_name>/config.json.

  2. Modifica il valore del parametro composer_image_version. Per visualizzare i valori disponibili, puoi elencare le versioni di Cloud Composer disponibili.

  3. Per applicare le modifiche, riavvia l'ambiente Airflow locale.

Eliminare un ambiente Airflow locale

Attenzione: assicurati di aver salvato tutti i dati richiesti dall'ambiente, come i log e la configurazione.

Per eliminare un ambiente Airflow locale, esegui il seguente comando:

composer-dev remove LOCAL_ENVIRONMENT_NAME

Se l'ambiente è in esecuzione, aggiungi il flag --force per forzarne la rimozione.

Eliminare le immagini Docker

Per eliminare tutte le immagini scaricate dallo strumento CLI di sviluppo locale di Composer, esegui:

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

Risoluzione dei problemi

Questa sezione fornisce soluzioni ai problemi più comuni.

Impossibile avviare un ambiente locale su macOS

Se hai installato il pacchetto composer-dev in una directory a cui Docker non può accedere, l'ambiente locale potrebbe non avviarsi.

Ad esempio, se Python è installato nella directory /opt, ad esempio quando lo installi con la configurazione predefinita di Homebrew su macOS, anche il pacchetto composer-dev viene installato nella directory /opt. Poiché Docker è conforme alle regole della sandbox di Apple, la directory /opt non è disponibile per impostazione predefinita. Inoltre, non puoi aggiungerlo tramite l'interfaccia utente (Impostazioni > Risorse > Condivisione file).

In questo caso, lo strumento CLI di sviluppo locale di Composer genera un messaggio di errore simile all'esempio seguente:

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...")

Puoi utilizzare una delle seguenti soluzioni:

  • Installa Python o il pacchetto composer-dev in una directory diversa, in modo che Docker possa accedere al pacchetto.
  • Modifica manualmente il ~/Library/Group\ Containers/group.com.docker/settings.json file e aggiungi /opt a filesharingDirectories.

Passaggi successivi