Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
Apache Airflow bietet eine REST API-Schnittstelle, mit der Sie Aufgaben wie das Abrufen von Informationen zu DAG-Ausführungen und -Aufgaben, das Aktualisieren von DAGs, das Abrufen von Airflow-Konfigurationen, das Hinzufügen und Löschen von Verbindungen und das Auflisten von Nutzern ausführen können.
Ein Beispiel für die Verwendung der Airflow REST API mit Cloud Run-Funktionen finden Sie unter DAGs mit Cloud Run-Funktionen auslösen.
Airflow REST API-Versionen
- Airflow 1 verwendet die experimentelle REST API.
- Airflow 2 verwendet die stabile REST API. Die experimentelle REST API wurde von Airflow verworfen.
- Sie können die experimentelle REST API in Airflow 2 weiterhin verwenden, wenn Sie sie über eine Airflow-Konfigurationsüberschreibung aktivieren, wie unten beschrieben.
Stabile Airflow REST API konfigurieren
Airflow 2
Die stabile REST API ist in Airflow 2 standardmäßig aktiviert. Cloud Composer verwendet ein eigenes API-Authentifizierungs-Backend, in das der Identity-Aware Proxy eingebunden ist.
Die Autorisierung funktioniert wie gewohnt von Airflow. Wenn ein neuer Nutzer über die API autorisiert wird, erhält das Nutzerkonto standardmäßig die Rolle Op
.
Sie können die stabile REST API aktivieren oder deaktivieren oder die Standardnutzerrolle ändern. Dazu überschreiben die folgenden Airflow-Konfigurationsoptionen:
Bereich | Schlüssel | Wert | Hinweise |
---|---|---|---|
api
|
(Airflow 2.2.5 und niedriger) auth_backend (Airflow 2.3.0 und höher) auth_backends
|
airflow.composer.api.backend.composer_auth
|
Ändern Sie zum Deaktivieren der stabilen REST API auf airflow.api.auth.backend.deny_all . |
api
|
composer_auth_user_registration_role
|
Op
|
Sie können eine beliebige andere Rolle angeben |
Airflow 1
Die stabile REST API ist in Airflow 1 nicht verfügbar. Sie können stattdessen die experimentelle REST API verwenden.
Experimentelle Airflow REST API konfigurieren
Airflow 2
Standardmäßig ist das API-Authentifizierungsfeature in der experimentellen API deaktiviert. Der Airflow-Webserver lehnt alle Anfragen ab. Überschreiben Sie die folgende Airflow-Konfigurationsoption, um die API-Authentifizierungsfunktion und die experimentelle API von Airflow 2 zu aktivieren:
Bereich | Schlüssel | Wert | Hinweise |
---|---|---|---|
api
|
(Airflow 2.2.5 und niedriger) auth_backend (Airflow 2.3.0 und höher) auth_backends
|
airflow.api.auth.backend.default
|
Der Standardwert ist airflow.composer.api.backend.composer_auth . |
api
|
enable_experimental_api
|
True
|
Der Standardwert ist False . |
Airflow 1
Standardmäßig ist das API-Authentifizierungsfeature in Airflow 1.10.11 und höheren Versionen deaktiviert. Der Airflow-Webserver lehnt alle von Ihnen gestellten Anfragen ab. Zum Auslösen von DAGs verwenden Sie Anfragen. Aktivieren Sie daher diese Funktion.
Zum Aktivieren der API-Authentifizierungsfunktion in Airflow 1 überschreiben Sie die folgende Airflow-Konfigurationsoption:
Bereich | Schlüssel | Wert | Hinweise |
---|---|---|---|
api |
auth_backend |
airflow.api.auth.backend.default |
Der Standardwert ist airflow.api.auth.backend.deny_all . |
Nachdem Sie diese Konfigurationsoption auf airflow.api.auth.backend.default
gesetzt haben, akzeptiert der Airflow-Webserver alle API-Anfragen ohne Authentifizierung.
Auch wenn der Airflow-Webserver selbst keine Authentifizierung erfordert, verwendet Cloud Composer eine eigene Authentifizierungsebene, um ihn zu schützen. Diese ist in Identity-Aware Proxy eingebunden.
API-Aufrufe an die Airflow REST API über die Zugriffssteuerung des Webservers zulassen
Je nach Methode, die zum Aufrufen der Airflow REST API verwendet wird, kann die Aufrufmethode entweder eine IPv4- oder IPv6-Adresse verwenden. Denken Sie daran, den IP-Traffic zur Airflow REST API mithilfe der Webserver-Zugriffssteuerung zu entsperren.
Verwenden Sie die Standardkonfigurationsoption All IP addresses have access (default)
, wenn Sie nicht sicher sind, von welchen IP-Adressen Ihre Aufrufe an die Airflow REST API gesendet werden.
Aufrufe an Airflow REST API senden
client_id des IAM-Proxys abrufen
Um eine Anfrage an den Airflow REST API-Endpunkt zu senden, benötigt die Funktion die Client-ID des IAM-Proxys, der den Airflow-Webserver schützt.
Cloud Composer stellt diese Informationen nicht direkt zur Verfügung. Stellen Sie stattdessen eine nicht authentifizierte Anfrage an den Airflow-Webserver und erfassen Sie die Client-ID über die Weiterleitungs-URL:
cURL
curl -v AIRFLOW_URL 2>&1 >/dev/null | grep -o "client_id\=[A-Za-z0-9-]*\.apps\.googleusercontent\.com"
Ersetzen Sie AIRFLOW_URL
durch die URL der Airflow-Weboberfläche.
Suchen Sie in der Ausgabe nach dem String nach client_id
. Beispiel:
client_id=836436932391-16q2c5f5dcsfnel77va9bvf4j280t35c.apps.googleusercontent.com
Python
Speichern Sie den folgenden Code in einer Datei mit dem Namen get_client_id.py
. Geben Sie die Werte für project_id
, location
und composer_environment
ein und führen Sie den Code in Cloud Shell oder in Ihrer lokalen Umgebung aus.
Airflow REST API mit client_id aufrufen
Ersetzen Sie die folgenden Werte:
- Ersetzen Sie den Wert der Variable
client_id
durch den Wertclient_id
, der im vorherigen Schritt ermittelt wurde. - Ersetzen Sie den Wert der Variable
webserver_id
durch die Mandantenprojekt-ID, die Teil der URL der Airflow-Weboberfläche vor.appspot.com
ist. Sie haben die URL der Airflow-Weboberfläche in einem vorherigen Schritt abgerufen. Geben Sie die von Ihnen verwendete Airflow REST API-Version an:
- Wenn Sie die stabile Airflow API verwenden, legen Sie die Variable
USE_EXPERIMENTAL_API
aufFalse
fest. - Wenn Sie die experimentelle Airflow REST API verwenden, sind keine Änderungen erforderlich. Die Variable
USE_EXPERIMENTAL_API
ist bereits aufTrue
festgelegt.
- Wenn Sie die stabile Airflow API verwenden, legen Sie die Variable
Mit einem Dienstkonto auf die Airflow REST API zugreifen
In der Airflow-Datenbank ist die Länge des E-Mail-Felds auf 64 Zeichen begrenzt. Dienstkonten haben manchmal E-Mail-Adressen, die länger als 64 Zeichen sind. Es ist nicht möglich, Airflow-Nutzer für solche Dienstkonten auf die übliche Weise zu erstellen. Wenn für ein solches Dienstkonto kein Airflow-Nutzer vorhanden ist, führt der Zugriff auf die Airflow REST API zu den HTTP-Fehlern 401 und 403.
Als Problemumgehung können Sie einen Airflow-Nutzer für ein Dienstkonto registrieren. Verwenden Sie dazu accounts.google.com:NUMERIC_USER_ID
als Nutzernamen und einen beliebigen eindeutigen String als E-Mail-Adresse.
Führen Sie Folgendes aus, um
NUMERIC_USER_ID
für ein Dienstkonto abzurufen:gcloud iam service-accounts describe \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --format="value(oauth2ClientId)"
Ersetzen Sie:
SA_NAME
durch den Namen des Dienstkontos.PROJECT_ID
durch die Projekt-ID.
Erstellen Sie einen Airflow-Nutzer mit der Rolle
Op
für das Dienstkonto:Airflow-UI
Klicken Sie auf Verwaltung > Nutzer und dann auf Erstellen. Ihr Airflow-Nutzer muss die Rolle
Admin
haben, um diese Seite zu öffnen.Geben Sie
accounts.google.com:NUMERIC_USER_ID
als Nutzernamen an. Ersetzen SieNUMERIC_USER_ID
durch die Nutzer-ID, die Sie im vorherigen Schritt ermittelt haben.Geben Sie als E-Mail-Adresse eine eindeutige Kennung an. Sie können einen beliebigen eindeutigen String verwenden.
Geben Sie die Rolle für den Nutzer an. Beispiel:
Op
.Das Kästchen Ist aktiv? muss angeklickt sein.
Geben Sie den Vor- und Nachnamen des Nutzers an. Sie können jeden String verwenden.
Klicken Sie auf Speichern.
gcloud
Führen Sie in Airflow 2 den folgenden Befehl der Airflow-Befehlszeile aus:
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
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.NUMERIC_USER_ID
durch die Nutzer-ID, die Sie im vorherigen Schritt ermittelt haben.UNIQUE_ID
durch die Kennung für den Airflow-Nutzer. Sie können einen beliebigen eindeutigen String verwenden.
Nachdem Sie einen Airflow-Nutzer für ein Dienstkonto erstellt haben, wird ein als Dienstkonto authentifizierter Aufrufer als vorab registrierter Nutzer erkannt und in Airflow angemeldet.
Airflow REST API-Komponente skalieren
Die Endpunkte der Airflow REST API und der Airflow-Benutzeroberfläche werden auf dem Airflow-Webserver ausgeführt. Wenn Sie die REST API intensiv verwenden, sollten Sie die für den Airflow-Webserver verfügbare CPU- und Arbeitsspeichermenge entsprechend der erwarteten Auslastung erhöhen.