Cloud Composer 1 Cloud Composer 2
Auf dieser Seite wird beschrieben, wie Sie Airflow-Verbindungen in Ihrer Umgebung verwalten und über Ihre DAGs darauf zugreifen.
Airflow-Verbindungen
Aiflow-Verbindungen speichern Anmeldedaten und andere Verbindungsinformationen wie Nutzernamen, Verbindungsstrings und Passwörter. Ihre DAGs verwenden Verbindungen, um Ressourcen in Google Cloud und anderen Diensten aus Ihren DAGs zu kommunizieren und darauf zuzugreifen.
Airflow-Operatoren in Ihren DAGs verwenden entweder eine Standardverbindung für den Operator oder Sie geben einen benutzerdefinierten Verbindungsnamen an.
Verbindungssicherheit
Die meisten Airflow-Operatoren akzeptieren Anmeldedaten nicht direkt. Stattdessen verwenden sie Airflow-Verbindungen.
Wenn Sie eine neue Umgebung erstellen, generiert Cloud Composer einen eindeutigen, dauerhaften Ferrnet-Schlüssel für die Umgebung und sichert standardmäßig Verbindungsextras. Sie können fernet_key
auf der Seite Konfiguration in der Airflow-UI aufrufen.
Weitere Informationen zum Sichern von Verbindungen und Passwörtern in Airflow finden Sie unter Verbindungen sichern und Sensible Daten maskieren.
Verbindungstypen
Airflow verwendet Verbindungen verschiedener Typen, um eine Verbindung zu bestimmten Diensten herzustellen. Der Google Cloud-Verbindungstyp stellt beispielsweise eine Verbindung zu anderen Diensten in Google Cloud her. Als weiteres Beispiel stellt der S3-Verbindungstyp eine Verbindung zu einem Amazon S3-Bucket her.
Installieren Sie ein PyPI-Paket mit diesem Verbindungstyp, um Airflow einen Verbindungstyp hinzuzufügen.
Einige Pakete sind in Ihrer Umgebung vorinstalliert. Sie können beispielsweise die Verbindung aus dem Paket apache-airflow-providers-google
verwenden, ohne benutzerdefinierte PyPI-Pakete zu installieren.
Vorkonfigurierte Verbindungen
Cloud Composer konfiguriert die folgenden Standardverbindungen in Ihrer Umgebung. Sie können diese Verbindungen verwenden, um auf Ressourcen in Ihrem Projekt zuzugreifen, ohne sie zu konfigurieren.
google_cloud_default
bigquery_default
google_cloud_datastore_default
google_cloud_storage_default
Verbindung in Secret Manager hinzufügen
Sie können eine Verbindung in Secret Manager speichern, ohne sie zu Airflow hinzuzufügen. Wir empfehlen diesen Ansatz, wenn Sie Anmeldedaten und andere vertrauliche Informationen speichern.
So fügen Sie eine Verbindung in Secret Manager hinzu:
Fügen Sie ein Secret mit dem Namen hinzu, der dem Muster für Verbindungen entspricht.
Beispiel:
airflow-connections-example_connection
. Verwenden Sie in Ihren DAGs den Verbindungsnamen ohne Präfix:example_connection
.Fügen Sie Parameter für die Verbindung hinzu:
JSON-Format
Fügen Sie die JSON-Darstellung Ihrer Verbindung als Wert des Secrets hinzu. Beispiel:
{ "conn_type": "mysql", "host": "example.com", "login": "login", "password": "password", "port": "9000" }
Weitere Informationen zum JSON-Verbindungsformat finden Sie in der Airflow-Dokumentation.
URI-Format
Fügen Sie die URI-Darstellung Ihrer Verbindung als Wert des Secrets hinzu:
Im Secret muss eine URI-Darstellung der Verbindung gespeichert werden. Beispiel:
mysql://login:password@example.com:9000
Der URI muss URL-codiert sein. Ein Passwort, das beispielsweise ein Leerzeichen enthält, muss so URL-codiert werden:
mysql://login:secret%20password@example.com:9000
.
Airflow bietet eine einfache Methode zum Generieren von Verbindungs-URIs. Ein Beispiel für das Codieren einer komplexen URL mit JSON-Extras finden Sie in der Airflow-Dokumentation.
Prüfen Sie, ob alle Verbindungsparameter richtig aus Secret Manager gelesen wurden.
Verbindung in Airflow hinzufügen
Als Alternative zum Speichern Ihrer Verbindungen in Secret Manager können Sie sie in Airflow speichern.
So fügen Sie eine Verbindung in Airflow hinzu:
Airflow-Befehlszeile
Führen Sie den Airflow-Befehl connections add
über die Google Cloud CLI aus. Beispiel:
In Airflow 2:
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
Sie können auch das Argument --conn-uri
verwenden:
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections add -- \
--conn-uri "mysql://login:password@example.com:9000" \
example_connection
In Airflow 1:
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" \
--conn_id "example_connection"
Ersetzen Sie Folgendes:
ENVIRONMENT_NAME
: der Name Ihrer UmgebungLOCATION
: Die Region, in der sich die Umgebung befindet.
Airflow-UI
Folgen Sie der Airflow-Dokumentation zum Erstellen von Verbindungen.
Prüfen, ob Airflow eine Verbindung korrekt liest
Sie können den Airflow-Befehl connections get
über die Google Cloud CLI ausführen, um zu prüfen, ob eine Verbindung korrekt gelesen wird. Wenn Sie beispielsweise eine Verbindung in Secret Manager speichern, können Sie auf diese Weise prüfen, ob alle Parameter einer Verbindung von Airflow aus einem Secret gelesen werden.
gcloud composer environments run ENVIRONMENT_NAME \
--location LOCATION \
connections get \
-- CONNECTION_NAME
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.CONNECTION_NAME
durch den Namen der Verbindung. Wenn Ihre Verbindung in Secret Manager gespeichert ist, verwenden Sie den Verbindungsnamen ohne das Verbindungspräfix. Geben Sie beispielsweiseexample_connection
anstelle vonairflow-connections-example_connection_json
an.
Beispiel:
gcloud composer environments run example-environment \
--location us-central1 \
connections get \
-- example_connection -o json
Airflow-Verbindungen in DAGs verwenden
In diesem Abschnitt wird beschrieben, wie Sie über einen DAG auf Ihre Verbindung zugreifen.
Secret Manager-Verbindung verwenden
Verwenden Sie den Namen der Verbindung ohne Präfix. Wenn Ihr Secret beispielsweise den Namen airflow-connections-aws_s3
hat, geben Sie aws_s3
an.
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/')
Wenn Sie eine Standardverbindung in Secret Manager speichern, können Sie den Verbindungsnamen weglassen. In der Airflow-Dokumentation für einen bestimmten Operator finden Sie den von einem Operator verwendeten Standardverbindungsnamen. Der Airflow-Operator S3ToGCSOperator
verwendet beispielsweise standardmäßig die Verbindung aws_default
. Sie können diese Standardverbindung in einem Secret mit dem Namen airflow-connections-aws_default
speichern.
In Airflow gespeicherte Verbindung verwenden
Verwenden Sie den Namen der Verbindung so, wie er in Airflow definiert ist:
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/')
Wenn Sie die Standardverbindung für einen Operator verwenden möchten, lassen Sie den Verbindungsnamen weg. In der Airflow-Dokumentation für einen bestimmten Operator finden Sie den von einem Operator verwendeten Standardverbindungsnamen. Der Airflow-Operator S3ToGCSOperator
verwendet beispielsweise standardmäßig die Verbindung aws_default
.
Fehlerbehebung
Wenn Ihre Umgebung nicht auf das in Secret Manager gespeicherte Secret zugreifen kann:
Achten Sie darauf, dass Secret Manager in Ihrer Umgebung konfiguriert ist.
Prüfen Sie, ob der Name der Verbindung in Secret Manager der von Airflow verwendeten Verbindung entspricht. Bei einer Verbindung mit dem Namen
example_connection
lautet der Secret-Name beispielsweiseairflow-connections-example_connection
.Prüfen Sie, ob Airflow eine Verbindung korrekt liest.