Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
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 Functions auslösen.
Airflow REST API-Versionen
Die folgenden Airflow REST API-Versionen sind in Cloud Composer 1 verfügbar:
- 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.
Hinweis
Enable the Cloud Composer API.
Stabile Airflow REST API aktivieren
Airflow 2
Die stabile REST API ist in Airflow 2 bereits 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 aktivieren
Airflow 2
Standardmäßig ist das API-Authentifizierungsfeature in der experimentellen API deaktiviert. Der Airflow-Webserver lehnt alle von Ihnen gestellten 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, ist er durch Identity-Aware Proxy mit einer eigenen Authentifizierungsebene geschützt.
API-Aufrufe an Airflow REST API mit Webserver-Zugriffssteuerung zulassen
Abhängig von der Methode, mit der die Airflow REST API aufgerufen wird, kann 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 sich nicht sicher sind, von welcher IP-Adresse aus Ihre Aufrufe an die Airflow REST API gesendet werden
gesendet.
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. Stattdessen eine nicht authentifizierte Anfrage an den Airflow-Webserver senden und Client-ID aus der 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 dann 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 Variablen
client_id
durch den Wert vonclient_id
die im vorherigen Schritt abgerufen wurden. - 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
Die Airflow-Datenbank beschränkt die Länge des E-Mail-Felds auf 64 Zeichen. Dienstkonten haben manchmal E-Mail-Adressen, die länger als 64 Zeichen sind. Es ist nicht möglich, Airflow-Nutzer für einen solchen Dienst zu erstellen wie gewohnt zu verwalten. Wenn es für einen solchen Dienst keinen Airflow-Nutzer gibt und der Zugriff auf die Airflow REST API führt zu HTTP-Fehlern 401 und 403.
Als Problemumgehung können Sie einen Airflow-Nutzer vorab für ein Dienstkonto registrieren. Bis
Verwenden Sie dabei accounts.google.com:NUMERIC_USER_ID
als Nutzernamen und
eindeutigen String wie die E-Mail-Adresse an.
Führen Sie folgenden Befehl 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 eine eindeutige Kennung als E-Mail-Adresse 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 beliebige .
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 beliebige eindeutigen String hinzu.
Nachdem Sie einen Airflow-Nutzer für ein Dienstkonto erstellt haben, da das Dienstkonto als vorregistrierter Nutzer erkannt wird, und bei Airflow angemeldet.
Airflow REST API-Komponente skalieren
Die Endpunkte der Airflow REST API und der Airflow-Benutzeroberfläche werden innerhalb der Komponente, also des Airflow-Webservers, ausgeführt. Wenn Sie die REST API intensiv nutzen, sollten Sie CPU- und Speicherparameter werden erhöht, um Airflow Webserver-Ressourcen anzupassen auf die erwartete Auslastung.