Gestione delle connessioni Airflow

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Questa pagina descrive come gestire le connessioni Airflow nel tuo ambiente e accedervi dai tuoi DAG.

Informazioni sulle connessioni Airflow

Le connessioni Aiflow memorizzano le credenziali e altre informazioni di connessione, ad esempio nomi utente, stringhe di connessione e password. I DAG utilizzano le connessioni per comunicare e accedere alle risorse in Google Cloud e in altri servizi dai tuoi DAG.

Gli operatori Airflow nei tuoi DAG utilizzano una connessione predefinita per l'operatore o specifichi un nome di connessione personalizzato.

Informazioni sulla sicurezza della connessione

La maggior parte degli operatori Airflow non accetta le credenziali direttamente. Utilizzano invece le connessioni Airflow.

Quando crei un nuovo ambiente, Cloud Composer genera una chiave Fernet univoca e permanente per l'ambiente e protegge gli extra di connessione per impostazione predefinita. Puoi visualizzare fernet_key nella pagina Configurazione nell'interfaccia utente di Airflow.

Per ulteriori informazioni su come le connessioni e le password vengono protette in Airflow, consulta Protezione delle connessioni e Occultamento dei dati sensibili nella documentazione di Airflow.

Informazioni sui tipi di connessione

Airflow utilizza connessioni di diversi tipi per connettersi a servizi specifici. Ad esempio, il Google Cloud tipo di connessione si connette ad altri servizi in Google Cloud. Un altro esempio è il tipo di connessione S3 che si connette a un bucket Amazon S3.

Per aggiungere un tipo di connessione ad Airflow, installa un pacchetto PyPI con quel tipo di connessione. Alcuni pacchetti sono preinstallati nel tuo ambiente. Ad esempio, puoi utilizzare la connessione dal pacchetto apache-airflow-providers-google senza installare pacchetti PyPI personalizzati.

Connessioni preconfigurate

Cloud Composer configura le seguenti connessioni predefinite nel tuo ambiente. Puoi utilizzare queste connessioni per accedere alle risorse del progetto senza doverle configurare.

  • google_cloud_default
  • bigquery_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Aggiungere una connessione in Secret Manager

Puoi memorizzare una connessione in Secret Manager senza aggiungerla a Airflow. Ti consigliamo di utilizzare questo approccio per memorizzare le credenziali e altre informazioni sensibili.

Per aggiungere una connessione in Secret Manager:

  1. Configura Secret Manager per il tuo ambiente.

  2. Aggiungi un secret con il nome corrispondente al pattern per le connessioni.

    Ad esempio: airflow-connections-example_connection. Nei DAG, utilizza il nome della connessione senza il prefisso: example_connection.

  3. Aggiungi i parametri per la connessione:

    Formato JSON

    Aggiungi la rappresentazione JSON della connessione come valore del segreto. Ad esempio:

    {
      "conn_type": "mysql",
      "host": "example.com",
      "login": "login",
      "password": "password",
      "port": "9000"
    }
    

    Per ulteriori informazioni sul formato di connessione JSON, consulta la documentazione di Airflow.

    Formato URI

    Aggiungi la rappresentazione URI della connessione come valore del segreto:

    • Il segreto deve memorizzare una rappresentazione URI della connessione. Ad esempio, mysql://login:password@example.com:9000.

    • L'URI deve essere con codifica URL. Ad esempio, una password contenente un simbolo di spazio deve essere codificata come URL come segue:mysql://login:secret%20password@example.com:9000.

    Airflow dispone di un metodo pratico per generare URI di connessione. Un esempio di come codificare un URL complesso con elementi extra JSON è disponibile nella documentazione di Airflow.

  4. Verifica che tutti i parametri di connessione siano letti correttamente da Secret Manager.

Aggiungere una connessione in Airflow

In alternativa a archiviare le connessioni in Secret Manager, puoi archiviarle in Airflow.

Per aggiungere una connessione in Airflow:

Interfaccia a riga di comando Airflow

Esegui il comando connections add dell'interfaccia a riga di comando Airflow con Google Cloud CLI. Ad esempio:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-type "mysql" \
    --conn-host "example.com" \
    --conn-port "9000" \
    --conn-login "login" \
    --conn-password "password" \
    example_connection

Puoi anche utilizzare l'argomento --conn-uri:

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  connections add -- \
    --conn-uri "mysql://login:password@example.com:9000" \
    example_connection

Sostituisci quanto segue:

  • ENVIRONMENT_NAME: il nome del tuo ambiente.
  • LOCATION: la regione in cui si trova l'ambiente.

UI di Airflow

Segui la documentazione di Airflow sulla creazione di connessioni.

Verifica che Airflow legga correttamente una connessione

Puoi eseguire il comando connections get Airflow CLI tramite Google Cloud CLI per verificare che una connessione venga letta correttamente. Ad esempio, se memorizzi una connessione in Secret Manager, hai un modo per verificare se tutti i parametri di una connessione vengono letti da Airflow da un segreto.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    connections get \
    -- CONNECTION_NAME

Sostituisci:

  • ENVIRONMENT_NAME con il nome dell'ambiente.
  • LOCATION con la regione in cui si trova l'ambiente.
  • CONNECTION_NAME con il nome della connessione. Se la connessione è memorizzata in Secret Manager, utilizza il nome della connessione senza il prefisso. Ad esempio, specifica example_connection anziché airflow-connections-example_connection_json.

Esempio:

gcloud composer environments run example-environment \
    --location us-central1 \
    connections get \
    -- example_connection -o json

Utilizzare le connessioni Airflow nei DAG

Questa sezione mostra come accedere alla connessione da un DAG.

Utilizzare una connessione Secret Manager

Utilizza il nome della connessione senza il prefisso. Ad esempio, se il segreto è denominato airflow-connections-aws_s3, specifica aws_s3.

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Se memorizzi una connessione predefinita in Secret Manager, puoi omettere il nome della connessione. Consulta la documentazione di Airflow per un operatore specifico per ottenere il nome della connessione predefinita utilizzata da un operatore. Ad esempio, l'operatore Airflow S3ToGCSOperator utilizza la connessione aws_default per default. Puoi memorizzare questa connessione predefinita in un segreto denominato airflow-connections-aws_default.

Utilizzare una connessione archiviata in Airflow

Utilizza il nome della connessione, così come è definito in Airflow:

transfer_dir_from_s3 = S3ToGCSOperator(
    task_id='transfer_dir_from_s3',
    aws_conn_id='aws_s3',
    prefix='data-for-gcs',
    bucket='example-s3-bucket-transfer-operators',
    dest_gcs='gs://us-central1-example-environ-361f4221-bucket/data/from-s3/')

Per utilizzare la connessione predefinita per un operatore, ometti il nome della connessione. Consulta la documentazione di Airflow per un operatore specifico per ottenere il nome della connessione predefinita utilizzata da un operatore. Ad esempio, l'operatore Airflow S3ToGCSOperator utilizza la connessione aws_default per impostazione predefinita.

Risoluzione dei problemi

Se il tuo ambiente non riesce ad accedere al secret archiviato in Secret Manager:

  1. Assicurati che Secret Manager sia configurato nel tuo ambiente.

  2. Verifica che il nome della connessione in Secret Manager corrisponda alla connessione utilizzata da Airflow. Ad esempio, per una connessione denominata example_connection, il nome del secret è airflow-connections-example_connection.

  3. Verifica che Airflow legga correttamente una connessione.

Passaggi successivi