Cloud Composer 1 Cloud Composer 2
Auf dieser Seite wird beschrieben, wie Sie Python-Pakete für Ihre Cloud Composer-Umgebung installieren.
Vorinstallierte und benutzerdefinierte PyPI-Pakete in Cloud Composer-Images
Cloud Composer-Images enthalten sowohl vorinstallierte als auch benutzerdefinierte PyPI-Pakete.
Vorinstallierte PyPI-Pakete sind Pakete, die im Cloud Composer-Image Ihrer Umgebung enthalten sind. Jedes Cloud Composer-Image enthält PyPI-Pakete, die für Ihre Version von Cloud Composer und Airflow spezifisch sind.
Benutzerdefinierte PyPI-Pakete sind Pakete, die Sie zusätzlich zu vorinstallierten Paketen in Ihrer Umgebung installieren können.
Optionen zum Verwalten von PyPI-Paketen für Cloud Composer-Umgebungen
Wahltaste | Verwenden, wenn |
---|---|
Über PyPI installieren | Die Standardmethode zum Installieren von Paketen in Ihrer Umgebung |
Aus einem Repository mit einer öffentlichen IP-Adresse installieren | Das Paket wird in einem anderen Paket-Repository als PyPI gehostet. Dieses Repository hat eine öffentliche IP-Adresse |
Von einem Artifact Registry-Repository installieren | Das Paket wird in einem Artifact Registry-Repository gehostet |
Von einem Repository im Netzwerk Ihres Projekts installieren | Ihre Umgebung hat keinen Zugriff auf das öffentliche Internet. Das Paket wird in einem Paket-Repository im Netzwerk Ihres Projekts gehostet. |
Als lokale Python-Bibliothek installieren |
Das Paket wurde nicht im PyPI gefunden und die Bibliothek weist keine externen Abhängigkeiten wie dist-packages auf. |
Plug-in installieren | Das Paket bietet Plug-in-spezifische Funktionen, z. B. das Ändern der Airflow-Weboberfläche. |
PythonVirtualenvOperator | Sie möchten nicht, dass das Paket für alle Airflow-Worker installiert wird oder die Abhängigkeit mit vorinstallierten Paketen in Konflikt steht. Das Paket befindet sich im PyPI und hat keine externen Abhängigkeiten. |
KubernetesPodOperator und GKE-Operatoren |
Sie benötigen externe Abhängigkeiten, die nicht aus pip installiert werden können (z. B. dist-packages ) oder sich auf einem internen pip-Server befinden. Diese Option erfordert mehr Einrichtung und Wartung. Berücksichtigen Sie dies nur, wenn
andere Optionen nicht funktionieren. |
Hinweise
- Sie benötigen eine Rolle, die Umgebungsaktualisierungsvorgänge auslösen kann. Darüber hinaus muss das Dienstkonto der Umgebung eine Rolle mit ausreichenden Berechtigungen zum Ausführen von Aktualisierungsvorgängen haben. Weitere Informationen finden Sie unter Zugriffssteuerung.
- Wenn Ihre Umgebung durch einen VPC Service Controls-Perimeter geschützt ist, müssen Sie vor der Installation von PyPI-Abhängigkeiten zusätzliche Nutzeridentitäten mit Zugriff auf Dienste gewähren, die vom Dienstperimeter geschützt werden, und die Unterstützung für ein privates PyPI-Repository aktivieren.
- Die Anforderungen müssen dem in PEP-508 angegebenen Format entsprechen, wobei jede Anforderung in Kleinbuchstaben angegeben wird und aus dem Paketnamen mit optionalen Extras und Versionsangaben besteht.
Aktualisierungen von PyPI-Abhängigkeiten generieren Docker-Images in Artifact Registry.
Wenn ein Abhängigkeitskonflikt dazu führt, dass die Aktualisierung fehlschlägt, wird die Ausführung Ihrer Umgebung mit den vorhandenen Abhängigkeiten fortgeführt. Wenn der Vorgang erfolgreich ist, können Sie die neu installierten Python-Abhängigkeiten in Ihren DAGs verwenden.
Liste der PyPI-Pakete ansehen
Sie können die Liste der Pakete für Ihre Umgebung in verschiedenen Formaten abrufen.
Vorinstallierte Pakete ansehen
Die Liste der vorinstallierten Pakete für Ihre Umgebung finden Sie in der Liste der Pakete für das Cloud Composer-Image Ihrer Umgebung.
Alle Pakete ansehen
So rufen Sie alle vorinstallierten und benutzerdefinierten Pakete in Ihrer Umgebung auf:
gcloud
Der folgende gcloud CLI-Befehl gibt das Ergebnis des Befehls python -m pip list
für einen Airflow-Worker in Ihrer Umgebung zurück.
Mit dem Argument --tree
können Sie das Ergebnis des Befehls python -m pipdeptree --warn
abrufen.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.
Benutzerdefinierte PyPI-Pakete ansehen
Console
Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.
Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.
Rufen Sie den Tab PyPI Packages (PyPI-Pakete) auf.
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.
Benutzerdefinierte Pakete in einer Cloud Composer-Umgebung installieren
In diesem Abschnitt werden verschiedene Methoden zum Installieren benutzerdefinierter Pakete in Ihrer Umgebung beschrieben.
Pakete aus PyPI installieren
Ein Paket kann über den Python-Paketindex installiert werden, wenn es keine externen Abhängigkeiten hat oder mit vorinstallierten Paketen in Konflikt steht.
So können Sie die Python-Abhängigkeiten für Ihre Umgebung hinzufügen, aktualisieren oder löschen:
Console
Rufen Sie in der Google Cloud Console die Seite Umgebungen auf.
Klicken Sie in der Liste der Umgebungen auf den Namen Ihrer Umgebung. Die Seite Umgebungsdetails wird geöffnet.
Rufen Sie den Tab PyPI-Pakete auf.
Klicken Sie auf Bearbeiten.
Klicken Sie auf Paket hinzufügen.
Geben Sie im Abschnitt PyPI-Pakete Paketnamen mit optionalen Versionsspezifizierern und Extras an.
Beispiel:
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Klicken Sie auf Speichern.
gcloud
Die gcloud CLI bietet mehrere Einstellungen für die Arbeit mit benutzerdefinierten PyPI-Paketen:
--update-pypi-packages-from-file
ersetzt alle vorhandenen benutzerdefinierten PyPI-Pakete durch die angegebenen Pakete. Nicht angegebene Pakete werden entfernt.--update-pypi-package
aktualisiert oder installiert ein Paket.--remove-pypi-packages
entfernt die angegebenen Pakete.--clear-pypi-packages
entfernt alle Pakete.
Anforderungen aus einer Datei installieren
In der Datei requirements.txt
muss jeder Anforderungsspezifizierer in einer separaten Zeile stehen.
Beispiel:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Aktualisieren Sie Ihre Umgebung und geben Sie die Datei requirements.txt
im Argument --update-pypi-packages-from-file
an.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.
Ein Paket installieren
Aktualisieren Sie Ihre Umgebung und geben Sie das Paket, die Version und die Extras im Argument --update-pypi-package
an.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.PACKAGE_NAME
durch den Namen des Pakets.EXTRAS_AND_VERSION
durch die optionale Versions- und Extras-Bezeichner. Wenn Sie Versionen und Extras weglassen möchten, geben Sie einen leeren Wert an.
Beispiel:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Pakete entfernen
Aktualisieren Sie Ihre Umgebung und geben Sie im Argument --remove-pypi-packages
die Pakete an, die Sie löschen möchten:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.PACKAGE_NAMES
durch eine durch Kommas getrennte Liste von Paketen.
Beispiel:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Erstellen Sie eine API-Anfrage environments.patch
.
In dieser Anfrage:
Geben Sie die Maske im
updateMask
-Parameter an:- Verwenden Sie die Maske
config.softwareConfig.pypiPackages
, um alle vorhandenen Pakete durch die angegebenen Pakete zu ersetzen. Pakete, die Sie nicht angeben, werden gelöscht. - Verwenden Sie
config.softwareConfig.envVariables.PACKAGE_NAME
, um ein bestimmtes Paket hinzuzufügen oder zu aktualisieren. Wenn Sie mehrere Pakete hinzufügen oder aktualisieren möchten, geben Sie mehrere Masken mit Kommas an.
- Verwenden Sie die Maske
Geben Sie im Anfragetext Pakete und Werte für Versionen und Extras an:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Ersetzen Sie:
PACKAGE_NAME
durch den Namen des Pakets.EXTRAS_AND_VERSION
durch die optionale Versions- und Extras-Bezeichner. Wenn Sie Versionen und Extras weglassen möchten, geben Sie einen leeren Wert an.- Wenn Sie mehrere Pakete hinzufügen möchten, fügen Sie in
pypiPackages
zusätzliche Einträge für Pakete hinzu.
Beispiel:
// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.softwareConfig.pypiPackages.EXAMPLE_PACKAGE,
// config.softwareConfig.pypiPackages.ANOTHER_PACKAGE
{
"config": {
"softwareConfig": {
"pypiPackages": {
"EXAMPLE_PACKAGE": "",
"ANOTHER_PACKAGE": ">=1.10.3"
}
}
}
}
Terraform
Der pypi_packages
-Block im software_config
-Block gibt Pakete an.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Ersetzen Sie:
ENVIRONMENT_NAME
durch den Namen der Umgebung.LOCATION
durch die Region, in der sich die Umgebung befindet.PACKAGE_NAME
durch den Namen des Pakets.EXTRAS_AND_VERSION
durch die optionale Versions- und Extras-Bezeichner. Wenn Sie Versionen und Extras weglassen möchten, geben Sie einen leeren Wert an.- Wenn Sie mehrere Pakete hinzufügen möchten, fügen Sie in
pypi_packages
zusätzliche Einträge für Pakete hinzu.
Beispiel:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Pakete aus einem öffentlichen Repository installieren
Sie können Pakete installieren, die in anderen Repositories gehostet werden, die eine öffentliche IP-Adresse haben.
Die Pakete müssen richtig konfiguriert sein, damit sie mit dem pip
-Standardtool installiert werden können.
So installieren Sie die App aus einem Paket-Repository mit einer öffentlichen Adresse:
Erstellen Sie eine pip.conf-Datei und fügen Sie gegebenenfalls die folgenden Informationen in die Datei ein:
- URL des Repositorys
- Anmeldedaten für den Zugriff auf das Repository
- Nicht standardmäßige Installationsoptionen für
pip
Beispiel:
[global] index-url=https://example.com/
Wenn Sie Pakete aus mehreren Repositories abrufen möchten, verwenden Sie ein virtuelles Artifact Registry-Repository, um die Reihenfolge zu steuern, in der pip Ihre Repositories durchsucht.
Laden Sie die Datei pip.conf in den Ordner
/config/pip/
im Bucket Ihrer Umgebung hoch.Installieren Sie Pakete mit einer der verfügbaren Methoden.
Pakete aus einem Artifact Registry-Repository installieren
Sie können in Ihrem Projekt Pakete in einem Artifact Registry-Repository speichern und Ihre Umgebung für die Installation aus diesem Repository konfigurieren.
Konfigurieren Sie Rollen und Berechtigungen:
Das Dienstkonto Ihrer Umgebung muss die Rolle
iam.serviceAccountUser
haben.Prüfen Sie, ob das Cloud Build-Dienstkonto Berechtigungen zum Lesen aus Ihrem Artifact Registry-Repository hat.
Wenn Ihre Umgebung den Zugriff auf andere Dienste in Ihrem Projekt eingeschränkt hat, z. B. wenn Sie VPC Service Controls verwenden, gilt Folgendes:
Weisen Sie dem Dienstkonto der Umgebung statt dem Cloud Build-Dienstkonto Berechtigungen für den Zugriff auf Ihr Artifact Registry-Repository zu.
Achten Sie darauf, dass die Verbindung zum Artifact Registry-Repository in Ihrem Projekt konfiguriert ist.
So installieren Sie benutzerdefinierte PyPI-Pakete aus einem Artifact Registry-Repository:
Erstellen Sie eine pip.conf-Datei und fügen Sie gegebenenfalls die folgenden Informationen in die Datei ein:
- URL des Artifact Registry-Repositorys
- Anmeldedaten für den Zugriff auf das Repository
- Nicht standardmäßige Installationsoptionen für
pip
- Wenn Sie nur Ihr Artifact Registry-Repository als Quelle für Pakete verwenden möchten, definieren Sie den Parameter
index-url
neu. Andernfalls wird das Repository, das Sie im Parameterextra-index-url
angeben, zusätzlich zum Standard-PyPI-Paketindex (pypi.python.org
) verwendet.
Hängen Sie bei einem Artifact Registry-Repository
/simple/
an die Repository-URL an:[global] extra-index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
Laden Sie diese Datei pip.conf in den Ordner
/config/pip/
im Bucket Ihrer Umgebung hoch. Beispiel:gs://us-central1-example-bucket/config/pip/pip.conf
.Installieren Sie Pakete mit einer der verfügbaren Methoden.
Pakete aus einem privaten Repository installieren
Sie können ein privates Repository im Netzwerk Ihres Projekts hosten und Ihre Umgebung so konfigurieren, dass Python-Pakete daraus installiert werden.
Konfigurieren Sie Rollen und Berechtigungen:
Das Dienstkonto für Ihre Cloud Composer-Umgebung muss die Rolle
iam.serviceAccountUser
haben.Wenn Sie benutzerdefinierte PyPI-Pakete aus einem Repository im Netzwerk Ihres Projekts installieren und dieses Repository keine öffentliche IP-Adresse hat:
Weisen Sie dem Dienstkonto der Umgebung Berechtigungen für den Zugriff auf dieses Repository zu.
Achten Sie darauf, dass die Verbindung zu diesem Repository in Ihrem Projekt konfiguriert ist.
So installieren Sie Pakete aus einem privaten Repository, das im Netzwerk Ihres Projekts gehostet wird:
Erstellen Sie eine pip.conf-Datei und fügen Sie gegebenenfalls die folgenden Informationen in die Datei ein:
- IP-Adresse des Repositorys im Netzwerk Ihres Projekts
- Anmeldedaten für den Zugriff auf das Repository
- Nicht standardmäßige Installationsoptionen für
pip
Beispiel:
[global] extra-index-url=https://192.0.2.10/
Laden Sie die Datei pip.conf in den Ordner
/config/pip/
im Bucket Ihrer Umgebung hoch. Beispiel:gs://us-central1-example-bucket/config/pip/pip.conf
.Installieren Sie Pakete mit einer der verfügbaren Methoden.
Lokale Python-Bibliothek installieren
So installieren Sie eine interne oder lokale Python-Bibliothek:
Platzieren Sie die Abhängigkeiten in einem Unterverzeichnis im Ordner
dags/
im Bucket Ihrer Umgebung. Zum Importieren eines Moduls aus einem Unterverzeichnis muss jedes Unterverzeichnis im Pfad des Moduls eine__init__.py
-Paketmarkierungsdatei enthalten.Im folgenden Beispiel lautet die Abhängigkeit
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Importieren Sie die Abhängigkeit aus der DAG-Definitionsdatei.
Beispiel:
Pakete verwenden, die von gemeinsam genutzten Objektbibliotheken abhängen
Bestimmte PyPI-Pakete hängen von Bibliotheken auf Systemebene ab. Obwohl Systembibliotheken von Cloud Composer nicht unterstützt werden, stehen Ihnen folgende Optionen zur Verfügung:
KubernetesPodOperator verwenden. Legen Sie als Operator-Image ein benutzerdefiniertes Build-Image fest. Verwenden Sie diese Option, wenn Pakete während der Installation aufgrund einer nicht erfüllten Systemabhängigkeit fehlschlagen.
Laden Sie die gemeinsam genutzten Objektbibliotheken in den Bucket Ihrer Umgebung hoch. Verwenden Sie diese Option, wenn Ihre PyPI-Pakete erfolgreich installiert wurden, aber zur Laufzeit fehlschlagen.
- Suchen Sie manuell nach den gemeinsam genutzten Objektbibliotheken für die PyPI-Abhängigkeit (eine .so-Datei).
- Laden Sie die gemeinsam genutzten Objektbibliotheken in den Ordner
/plugins
im Bucket Ihrer Umgebung hoch. - Legen Sie die folgende Umgebungsvariable fest:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Pakete in privaten IP-Umgebungen installieren
In diesem Abschnitt wird erläutert, wie Sie Pakete in privaten IP-Umgebungen installieren.
Je nachdem, wie Sie Ihr Projekt konfigurieren, hat Ihre Umgebung möglicherweise keinen Zugriff auf das öffentliche Internet.
Private IP-Umgebung mit öffentlichem Internetzugang
Wenn Ihre private IP-Umgebung Zugriff auf das öffentliche Internet hat, können Sie Pakete mit den Optionen für öffentliche IP-Umgebungen installieren:
- Über PyPI installieren. In diesem Fall ist keine spezielle Konfiguration erforderlich. Folgen Sie der Anleitung unter Paket aus PyPI installieren.
- Installation aus einem Repository mit einer öffentlichen IP-Adresse Folgen Sie der Anleitung unter Paket aus einem privaten Repository installieren.
- Installation aus einem privaten PyPI-Repository ausführen, das im Netzwerk Ihres Projekts gehostet wird.
Private IP-Umgebung ohne Internetzugang
Wenn Ihre private IP-Umgebung keinen Zugriff auf das öffentliche Internet hat, können Sie Pakete mit einer der folgenden Methoden installieren:
- Verwenden Sie ein privates PyPI-Repository, das im Netzwerk Ihres Projekts gehostet wird.
- Verwenden Sie eine Proxyserver-VM im Netzwerk Ihres Projekts, um eine Verbindung zu einem PyPI-Repository im öffentlichen Internet herzustellen. Geben Sie die Proxyadresse in der Datei
/config/pip/pip.conf
im Bucket Ihrer Umgebung an. - Verwenden Sie ein Artifact Registry-Repository als einzige Quelle für Pakete. Dazu müssen Sie den
index-url
-Parameter wie beschrieben neu definieren. - Wenn Ihre Sicherheitsrichtlinie den Zugriff auf externe IP-Adressen von Ihrem VPC-Netzwerk zulässt, können Sie die Installation von Paketen aus Repositories im öffentlichen Internet aktivieren, indem Sie Cloud NAT konfigurieren.
- Legen Sie Python-Abhängigkeiten im Ordner
/dags
im Bucket Ihrer Umgebung ab, um sie als lokale Bibliotheken zu installieren. Dies ist möglicherweise keine gute Option, wenn die Abhängigkeitsstruktur groß ist.
In einer privaten IP-Umgebung unter Berücksichtigung von Ressourcenstandortbeschränkungen installieren
Wenn Sie Ihr Projekt an den Anforderungen für Ressourcenstandorte ausrichten, ist die Verwendung einiger Tools untersagt. Insbesondere kann Cloud Build nicht für die Paketinstallation verwendet werden, wodurch der direkte Zugriff auf Repositories im öffentlichen Internet verhindert wird.
Folgen Sie der Anleitung für private IP-Umgebungen ohne Internetzugang, um Python-Abhängigkeiten in einer solchen Umgebung zu installieren.
Python-Abhängigkeit in einer privaten IP-Umgebung in einem VPC Service Controls-Perimeter installieren
Wenn Sie Ihr Projekt mit einem VPC Service Controls-Perimeter schützen, führt dies zu weiteren Sicherheitseinschränkungen. Insbesondere kann Cloud Build nicht für die Paketinstallation verwendet werden, wodurch der direkte Zugriff auf Repositories im öffentlichen Internet verhindert wird.
Wenn Sie Python-Abhängigkeiten für eine private IP-Umgebung innerhalb eines Perimeters installieren möchten, folgen Sie der Anleitung für private IP-Umgebungen ohne Internetzugang.