Airflow-Verbindungen verwalten

Auf dieser Seite wird beschrieben, wie Sie Airflow-Verbindungen verwenden.

Mit Airflow-Verbindungen können Sie über eine Cloud Composer-Umgebung auf Ressourcen in Google Cloud-Projekten zugreifen. Sie erstellen Airflow-Verbindungs-IDs, um Informationen wie Anmeldeinformationen und Hostnamen zu speichern. Die Workflows verweisen dann auf die Verbindungs-IDs. Airflow-Verbindungen sind die empfohlene Methode zum Speichern von Secrets und Anmeldedaten, die in Workflows verwendet werden.

Mit Airflow-Verbindungen können Sie die für eine Cloud Composer-Umgebung erforderlichen Verbindungsinformationen speichern, z. B. Google Cloud-Projekte, andere Cloudanbieter oder Dienste von Drittanbietern.

Eine Airflow-Verbindung kann Informationen speichern, z. B. Anmeldedaten, Hostnamen oder zusätzliche API-Parameter. Jede Verbindung ist mit einer ID verknüpft, die Sie in Workflow-Aufgaben verwenden können, um auf die Voreinstellungen zu verweisen. Wir empfehlen die Verwendung von Airflow-Verbindungen zum Speichern von Secrets und Anmeldedaten für Workflowaufgaben.

Der Google Cloud-Verbindungstyp aktiviert Google Cloud-Integrationen.

Farnet-Schlüssel und gesicherte Verbindungen

Wenn Sie eine neue Umgebung erstellen, generiert Cloud Composer einen eindeutigen, permanenten Fernet-Schlüssel für die Umgebung und sichert standardmäßig Verbindungsextras. Sie können fernet_key in der Airflow-Konfiguration aufrufen. Informationen zur Sicherung von Verbindungen finden Sie unter Verbindungen sichern.

Standardverbindungen verwenden

Cloud Composer konfiguriert standardmäßig die folgenden Airflow-Verbindungen für die Google Cloud Platform:

  • bigquery_default
  • google_cloud_default
  • google_cloud_datastore_default
  • google_cloud_storage_default

Sie können diese Verbindungen aus Ihren DAGs mithilfe der Standardverbindungs-ID verwenden. Im folgenden Beispiel wird der BigQueryOperator mit der Standardverbindung verwendet.

task_default = bigquery_operator.BigQueryOperator(
    task_id='task_default_connection',
    bql='SELECT 1', use_legacy_sql=False)

Sie können die Verbindungs-ID auch explizit angeben, wenn Sie den Operator erstellen.

task_explicit = bigquery_operator.BigQueryOperator(
    task_id='task_explicit_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Composer creates a 'google_cloud_default' connection by default.
    bigquery_conn_id='google_cloud_default')

Auf Ressourcen in einem anderen Projekt zugreifen

Für den Zugriff auf Ressourcen in einem Google Cloud-Projekt in der Cloud Composer-Umgebung wird empfohlen, die Standardverbindungen zu verwenden und dem mit Ihrer Umgebung verknüpften Dienstkonto die entsprechenden Identitäts- und Zugriffsverwaltungsberechtigungen zuzuweisen.

In den folgenden Abschnitten wird erläutert, wie Sie Lese- und Schreibvorgänge in Cloud Storage-Buckets in your-storage-project für eine Cloud Composer-Umgebung zulassen, die im Projekt mit der ID your-composer-project bereitgestellt wird.

Das Ihrer Umgebung zugeordnete Dienstkonto ermitteln

Console

  1. Öffnen Sie in der Cloud Console die Seite Umgebungen.

    Zur Seite "Umgebungen"

  2. Klicken Sie in der Spalte Name auf den Namen der Umgebung, um deren Seite Umgebungsdetails zu öffnen.
  3. Beachten Sie das Dienstkonto. Dieser Wert ist eine E-Mail-Adresse wie service-account-name@your-composer-project.iam.gserviceaccount.com.

gcloud

Geben Sie den folgenden Befehl ein und ersetzen Sie VARIABLES durch die entsprechenden Werte:

gcloud composer environments describe ENVIRONMENT_NAME \
    --location LOCATION \
    --format="get(config.nodeConfig.serviceAccount)" 

Die Ausgabe zeigt eine Adresse wie service-account-name@your-composer-project.iam.gserviceaccount.com an.

Dem Dienstkonto die entsprechenden IAM-Berechtigungen gewähren

Wenn Sie Lese- und Schreibzugriffe auf Cloud Storage-Buckets in your-storage-project gewähren möchten, weisen Sie dem mit Ihrer Cloud Composer-Umgebung verknüpften Dienstkonto die Rolle roles/storage.objectAdmin zu.

Console

  1. Auf der Seite IAM & Verwaltung für Ihr Speicherprojekt.

    Zur Seite "IAM & Verwaltung"

  2. Klicken Sie auf Mitglieder hinzufügen.

  3. Geben Sie im Dialogfeld Mitglieder hinzufügen die vollständige E-Mail-Adresse des mit Ihrer Cloud Composer-Umgebung verknüpften Dienstkontos an.

  4. Wählen Sie im Drop-down-Menü Rolle auswählen die entsprechenden Berechtigungen aus. Wählen Sie für dieses Beispiel die Rolle Speicher > Objektadministrator aus.

  5. Klicken Sie auf Hinzufügen.

gcloud

Verwenden Sie den Befehl gcloud projects add-iam-policy-binding, um IAM-Berechtigungen auf Projektebene hinzuzufügen. Ersetzen Sie dabei VARIABLES durch die entsprechenden Werte:

gcloud projects add-iam-policy-binding YOUR_STORAGE_PROJECT \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL \
    --role=roles/storage.objectAdmin 

Nachdem die entsprechenden Berechtigungen erteilt wurden, können Sie auf die Ressourcen im Projekt your-storage-project mit den gleichen Airflow-Standardverbindungen zugreifen, die Sie auch für den Zugriff auf Ressourcen im Projekt your-composer-project verwenden.

Neue Airflow-Verbindungen erstellen

Hinweis

Weisen Sie dem Dienstkonto, das Ihrer Cloud Composer-Umgebung zugeordnet ist, die entsprechenden IAM-Berechtigungen zu und verwenden Sie die Standardverbindungen in Ihren DAG-Definitionen. Führen Sie die Schritte in diesem Abschnitt aus, falls das nicht möglich ist.

Verbindung zu einem anderen Projekt herstellen

Die folgenden Schritte enthalten Beispiele, um Lese- und Schreibvorgänge in Cloud Storage-Buckets in your-storage-project für eine in der Projekt-ID your-composer-project bereitgestellte Cloud Composer-Umgebung zu ermöglichen.

  1. Erstellen Sie ein Dienstkonto in your-storage-project und laden Sie einen JSON-Schlüssel herunter:

    1. Rufen Sie in der Cloud Console die Seite Dienstkonten auf.

      Seite "Dienstkonten" öffnen

    2. Klicken Sie auf Projekt auswählen.

    3. Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.

    4. Klicken Sie auf Dienstkonto erstellen.

    5. Geben Sie einen Namen für das Dienstkonto ein, wählen Sie eine Rolle aus, die Sie dem Dienstkonto zuweisen möchten, z. B. Speicher > Objektadministrator.

    6. Klicken Sie das Kästchen Neuen privaten Schlüssel bereitstellen an und klicken Sie auf Speichern.

    7. Öffnen Sie die JSON-Datei in einem Texteditor. Der Inhalt sollte in etwa so aussehen:

      { "type": "service_account", "project_id": "your-storage-project", ... }

  2. Neue Verbindung herstellen:

    Airflow-UI

    1. Greifen Sie auf die Airflow-Weboberfläche für Ihre Cloud Composer-Umgebung zu.

    2. Öffnen Sie in der Airflow-Weboberfläche die Seite Admin > Verbindungen.

      Airflow-Screenshot. Öffnen Sie das Menü

    3. Klicken Sie zum Öffnen des neuen Verbindungsformulars auf den Tab .

      Airflow-Screenshot. Klicken Sie auf den Tab Erstellen.

    4. Neue Verbindung herstellen:

      1. Um eine Verbindungs-ID auszuwählen, füllen Sie das Feld Verbindungs-ID aus, z. B. my_gcp_connection. Verwenden Sie diese ID in Ihren DAG-Definitionsdateien.
      2. Wählen Sie im Feld Verbindungstyp die Option Google Cloud Platform aus.
      3. Geben Sie einen Wert für die Projekt-ID ein, die dem Projekt entspricht, zu dem Ihr Dienstkonto gehört.
      4. Führen Sie einen der folgenden Schritte aus:

        1. Kopieren Sie die JSON-Schlüsseldatei des Dienstkontos, die Sie im Verzeichnis data/ des Cloud Storage-Buckets Ihrer Umgebung heruntergeladen haben. Geben Sie anschließend unter den lokalen Dateipfad des Airflow-Workers zum Speicherort der JSON-Schlüsseldatei ein, z. B. /home/airflow/gcs/data/keyfile.json.
        2. Kopieren Sie in Schlüsseldatei (JSON) den Inhalt der JSON-Schlüsseldatei des Dienstkontos, die Sie heruntergeladen haben.

        Nutzer mit Zugriff auf Airflow-Verbindungen über die Befehlszeile oder die Web-UI können Anmeldedaten lesen, die in keyfile_dict gespeichert sind. Zum Schutz dieser Anmeldedaten empfehlen wir die Verwendung eines Schlüsseldateipfads und die Verwendung einer Cloud Storage-ACL, um den Zugriff auf die Schlüsseldatei einzuschränken.

      5. Geben Sie einen Wert in das Feld Bereiche ein. Es wird empfohlen, https://www.googleapis.com/auth/cloud-platform als Bereich zu verwenden und IAM-Berechtigungen für das Dienstkonto zu verwenden, um den Zugriff auf Google Cloud-Ressourcen zu beschränken.

      6. Klicken Sie auf Speichern, um die Verbindung herzustellen.

        Airflow-Screenshot. Klicken Sie auf den Tab Erstellen.

    gcloud

    Geben Sie den folgenden Befehl ein:

    gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION connections -- --add \
    --conn_id=CONNECTION_ID --conn_type=google_cloud_platform \
    --conn_extra '{"extra\__google\_cloud\_platform\__CMD_ARGS": "...",
    "extra\__google\_cloud\_platform\__CMD_ARGS": "...", ...}'
    

    Dabei gilt:

    • ENVIRONMENT_NAME ist der Name der Umgebung.
    • LOCATION ist die Compute Engine-Region, in der sich die Umgebung befindet.
    • CONNECTION_ID ist die Kennzeichnung für die Verbindung. Verwenden Sie Kleinbuchstaben und trennen Sie Wörter mit Unterstrichen.
    • CMD_ARGS sind die Folgenden:
      • project ist eine Projekt-ID. Nur extra__google_cloud_platform__project ist erforderlich.
      • key_path ist ein lokaler Dateipfad auf dem Airflow-Worker, der eine JSON-Schlüsseldatei enthält, z. B. /home/airflow/gcs/data/keyfile.json. Wenn angegeben, ist auch scope erforderlich. Verwenden Sie key_path oder keyfile_dict, aber nicht beides.
      • keyfile_dict ist ein JSON-Objekt, das den Inhalt der JSON-Schlüsseldatei angibt, die Sie heruntergeladen haben. Wenn angegeben, wird auch scope benötigt. Verwenden Sie keyfile_dict oder key_path, aber nicht beides. Nutzer mit Zugriff auf Airflow-Verbindungen über die Befehlszeile oder die Web-UI können die in keyfile_dict gespeicherten Anmeldedaten lesen. Zum Schutz dieser Anmeldedaten empfehlen wir die Verwendung von key_path und das Anwenden einer Cloud Storage-ACL, um den Zugriff auf die Schlüsseldatei zu beschränken.
      • scope ist eine durch Kommas getrennte Liste von OAuth-Bereichen.

    Beispiel:

    gcloud composer environments run test-environment \
     --location us-central1 connections -- --add \
     --conn_id=my_gcp_connection --conn_type=google_cloud_platform \
     --conn_extra '{"extra\__google\_cloud\_platform\__project": "your-storage-project",
     "extra\__google\_cloud\_platform\__key_path": "/home/airflow/gcs/data/keyfile.json",
     "extra\__google\_cloud\_platform\__scope": "https://www.googleapis.com/auth/cloud-platform"}'

Neue Airflow-Verbindung verwenden

Legen Sie das Flag der entsprechenden Verbindungs-ID fest, wenn Sie einen Google Cloud Airflow-Operator erstellen, um die von Ihnen erstellte Verbindung zu verwenden.

task_custom = bigquery_operator.BigQueryOperator(
    task_id='task_custom_connection',
    bql='SELECT 1', use_legacy_sql=False,
    # Set a connection ID to use a connection that you have created.
    bigquery_conn_id='my_gcp_connection')

Verbindung zu einer externen Datenbank konfigurieren

Cloud Composer stellt den standardmäßigen Cloud SQL-Proxy in Ihrer Umgebung bereit, um den Zugriff auf die Cloud SQL-Datenbank der Umgebung aus einer Anwendung, einem Client oder einem anderen Google Cloud-Dienst per Remotezugriff zu autorisieren.

Zum Verbinden von Cloud Composer mit einer externen Datenbank, z. B. einer SQL-Datenbank oder einer privaten IP-Instanz in Cloud SQL, müssen Sie einen neuen SQL-Proxy-Pod (yaml) in den GKE-Cluster Ihrer Umgebung bereitstellen.

Nachdem Sie den neuen SQL-Proxydienst bereitgestellt haben, stammt die Verbindung zu Ihrer externen Datenbank aus dem GKE-Cluster Ihrer Umgebung. Damit der Airflow-Webserver auf die externe Datenbank (z. B. in einer Airflow-Verbindung) zugreifen kann, sollte der SQL-Proxydienst über den Webserver zugänglich sein. Dazu sind folgende Optionen verfügbar: