Cloud Composer 1 Cloud Composer 2
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 Functions 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.
Hinweise
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 | Notes |
---|---|---|---|
api
|
(Airflow 2.2.5 und niedriger) auth_backend (Airflow 2.3.0 und höher) auth_backends
|
airflow.composer.api.backend.composer_auth
|
Wechseln Sie zu airflow.api.auth.backend.deny_all , um die stabile REST API zu deaktivieren. |
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 | Notes |
---|---|---|---|
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 | Notes |
---|---|---|---|
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 die Airflow REST API mithilfe der Webserverzugriffssteuerung zulassen
Abhängig von der Methode, die zum Aufrufen der Airflow REST API verwendet wird, kann die Aufrufmethode entweder IPv4- oder IPv6-Adresse verwenden. Denken Sie daran, die Blockierung des IP-Traffics zur Airflow REST API mithilfe der Webserver-Zugriffssteuerung aufzuheben.
Wenn Sie nicht sicher sind, von welchen IP-Adressen Ihre Aufrufe an die Airflow REST API gesendet werden, verwenden Sie die Standardkonfigurationsoption All IP addresses have access (default)
.
Aufrufe an Airflow REST API senden
client_id des IAM-Proxys abrufen
Für eine Anfrage an den Airflow REST API-Endpunkt 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 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, der auf client_id
folgt. 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 dann den Code in Cloud Shell oder 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
aus dem vorherigen Schritt. - 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. Airflow-Nutzer für solche Dienstkonten können nicht wie gewohnt erstellt werden. 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.
Sie können das Problem umgehen, indem Sie einen Airflow-Nutzer für ein Dienstkonto vorregistrieren. Verwenden Sie dazu accounts.google.com:NUMERIC_USER_ID
als Nutzernamen und einen beliebigen eindeutigen String als E-Mail-Adresse.
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 aus dem vorherigen Schritt.Geben Sie eine eindeutige Kennung für die 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 Is Active? muss angeklickt sein.
Geben Sie den Vor- und Nachnamen für den Nutzer an. Sie können einen beliebigen String verwenden.
Klicken Sie auf Speichern.
gcloud
Führen Sie in Airflow 2 den folgenden Airflow-Befehl aus der 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 aus dem vorherigen Schritt.UNIQUE_ID
durch die ID 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 das Dienstkonto authentifizierter Aufrufer als vorregistrierter Nutzer erkannt und bei Airflow angemeldet.
Airflow REST API-Komponente skalieren
Die Airflow REST API und Airflow-UI-Endpunkte werden innerhalb der Komponente ausgeführt, also auf dem Airflow-Webserver. Falls Sie die REST API intensiv nutzen, sollten Sie die CPU- und Speicherparameter erhöhen, um die Ressourcen des Airflow-Webservers an die erwartete Last anzupassen.