Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3
Cette page explique comment installer des packages Python pour votre environnement Cloud Composer.
À propos des packages PyPI préinstallés et personnalisés dans les images Cloud Composer
Les images Cloud Composer contiennent à la fois des packages PyPI préinstallés et personnalisés.
Les packages PyPI préinstallés sont des packages inclus dans l'image Cloud Composer de votre environnement. Chaque L'image Cloud Composer contient Les packages PyPI qui sont spécifiques à votre version de Cloud Composer et d'Airflow.
Les packages PyPI personnalisés sont des packages que vous pouvez installer dans votre environnement en plus des packages préinstallés.
Options pour gérer les packages PyPI pour les environnements Cloud Composer
Option | Utiliser si |
---|---|
Installer à partir de PyPI | La méthode par défaut pour installer des packages dans votre environnement |
Installer à partir d'un dépôt avec une adresse IP publique | Le package est hébergé dans un référentiel de packages autre que PyPI. Ce dépôt dispose d'une adresse IP publique |
Installer à partir d'un dépôt Artifact Registry | Le package est hébergé dans un dépôt Artifact Registry. |
Installer à partir d'un dépôt du réseau de votre projet | Votre environnement n'a pas accès à l'Internet public. Le package est hébergé dans un dépôt de packages sur le réseau de votre projet. |
Installer en tant que bibliothèque Python locale |
Le package est introuvable dans PyPI, et la bibliothèque ne comporte aucune dépendance externe, telle que dist-packages . |
Installer un plug-in | Le package fournit des fonctionnalités spécifiques au plug-in, telles que la modification l'interface Web Airflow. |
PythonVirtualenvOperator | Vous ne souhaitez pas que le package soit installé pour tous les nœuds de calcul Airflow. Sinon, la dépendance entre en conflit avec les packages préinstallés. Le package se trouve dans le PyPI et ne comporte aucune dépendance externe. |
KubernetesPodOperator et opérateurs GKE |
Vous avez besoin de dépendances externes ne pouvant pas être installées à partir de pip (telles que dist-packages ) ou se trouvant sur un serveur pip interne. Cette option nécessite davantage de configuration et de maintenance. N'y pensez que si les autres options ne fonctionnent pas. |
Avant de commencer
- Vous devez disposer d'un rôle permettant de déclencher des opérations de mise à jour d'environnement. De plus, le compte de service de l'environnement doit disposer d'un rôle doté d'autorisations suffisantes pour effectuer des opérations de mise à jour. Pour plus d'informations, consultez la section Contrôle des accès.
- Si votre environnement est protégé par un périmètre VPC Service Controls, avant d'installer des dépendances PyPI, d'autres identités d'utilisateur ayant accès aux services le périmètre de service protège et active la prise en charge d'une PyPI privée un dépôt de clés.
- Les exigences doivent respecter le format spécifié dans PEP-508, où chaque exigence est spécifiée en minuscules et consiste en un nom de package avec des options et des spécificateurs de version facultatifs.
Les mises à jour de dépendances PyPI génèrent des images Docker dans Artifact Registry.
Si un conflit de dépendance entraîne l'échec de la mise à jour, votre environnement continue de s'exécuter avec ses dépendances existantes. Si l'opération réussit, vous pouvez commencer à utiliser les dépendances Python récemment installées dans vos DAG.
Si vous souhaitez que vos compilations s'exécutent avec un compte de service personnalisé, vous pouvez remplacer la variable d'environnement
COMPOSER_AGENT_BUILD_SERVICE_ACCOUNT
par le compte de service choisi. Ce compte de service doit être configuré pour l'exécution de compilations conformément à la documentation Cloud Build. et le compte de service de l'environnement doivent disposer Autorisationiam.serviceAccounts.actAs
sur ce contenu.Projets dans lesquels L'API Cloud Composer est activée à partir du 29 avril 2024. À moins que votre organisation ne remplace
constraints/cloudbuild.disableCreateDefaultServiceAccount
stratégie, nouveaux projets, ne provisionne pas l'ancien compte de service Cloud Build sur l'activation de l'API. Étant donné que Cloud Build est utilisé par défaut lors de l'installation de packages PyPI personnalisés dans l'environnement Cloud Composer, l'installation des packages peut échouer. Par défaut, compte de service de l'environnement. veillez à accorder toutes les autorisations supplémentaires nécessaires des packages privés à ce compte de service également.
Afficher la liste des packages PyPI
Vous pouvez obtenir la liste des packages de votre environnement dans plusieurs formats.
Afficher les packages préinstallés
Pour afficher la liste des packages préinstallés pour votre environnement, consultez la liste des packages de l'image Cloud Composer de votre environnement.
Afficher tous les packages
Pour afficher tous les packages (préinstallés et personnalisés) de votre environnement:
gcloud
La commande CLI gcloud suivante renvoie le résultat de la commande python -m pip list
pour un nœud de calcul Airflow dans votre environnement.
Vous pouvez utiliser l'argument --tree
pour obtenir le résultat de la commande python -m pipdeptree --warn
.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.
Afficher les packages PyPI personnalisés
Console
Dans la console Google Cloud, accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.
Accédez à l'onglet Packages PyPI.
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.
Installer des packages personnalisés dans un environnement Cloud Composer
Cette section décrit les différentes méthodes d'installation de packages personnalisés dans votre environnement.
Installer des packages à partir de PyPI
Un package peut être installé à partir de L'index de packages Python s'il n'a pas de fichiers dépendances ou des conflits avec des packages préinstallés.
Pour ajouter, mettre à jour ou supprimer les dépendances Python sur l'environnement, procédez comme suit :
Console
Dans la console Google Cloud, accédez à la page Environnements.
Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.
Accédez à l'onglet Packages PyPI.
Cliquez sur Modifier.
Cliquez sur Ajouter un package.
Dans la section Packages PyPI, spécifiez les noms de package, avec des spécificateurs de version et des options facultatifs.
Exemple :
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Cliquez sur Enregistrer.
gcloud
La gcloud CLI propose plusieurs options pour utiliser des PyPI personnalisés. packages:
--update-pypi-packages-from-file
remplace tous les packages PyPI personnalisés existants par les packages spécifiés. Les packages que vous ne spécifiez pas sont supprimés.--update-pypi-package
met à jour ou installe un package.--remove-pypi-packages
supprime les packages spécifiés.--clear-pypi-packages
supprime tous les packages.
Installer les éléments requis à partir d'un fichier
Chaque spécificateur d'exigence doit figurer sur une ligne distincte dans le fichier requirements.txt
.
Exemple :
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Mettez à jour votre environnement et spécifiez le fichier requirements.txt
dans l'argument --update-pypi-packages-from-file
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.
Installer un package
Mettez à jour votre environnement, puis spécifiez le package, la version et les extras dans l'argument --update-pypi-package
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région où se trouve l'environnement.PACKAGE_NAME
par le nom du package.EXTRAS_AND_VERSION
avec le spécificateur de version et d'extras facultatif. Pour omettre les versions et les extras, spécifiez une valeur vide.
Exemple :
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Supprimer des packages
Mettez à jour votre environnement et spécifiez les packages que vous souhaitez supprimer dans l'argument --remove-pypi-packages
:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région dans laquelle se trouve l'environnement.PACKAGE_NAMES
par une liste de packages séparés par une virgule.
Exemple :
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Rédigez une requête API environments.patch
.
Dans cette requête :
Dans le paramètre
updateMask
, spécifiez le masque :- Utilisez le masque
config.softwareConfig.pypiPackages
pour remplacer tous les packages avec les packages spécifiés. Les packages que vous ne spécifiés sont supprimés. - Utilisez
config.softwareConfig.envVariables.PACKAGE_NAME
pour ajouter ou mettre à jour un package spécifique. Pour ajouter ou mettre à jour plusieurs packages, spécifier plusieurs masques par des virgules.
- Utilisez le masque
Dans le corps de la requête, spécifiez les packages et les valeurs pour les versions et les extras:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Remplacez :
PACKAGE_NAME
par le nom du package.EXTRAS_AND_VERSION
avec le spécificateur de version et d'extras facultatif. À omettre les versions et les extras, spécifier une valeur vide.- Pour ajouter plusieurs packages, ajoutez des entrées supplémentaires pour les packages.
à
pypiPackages
.
Exemple :
// 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
Le bloc pypi_packages
du bloc software_config
spécifie les packages.
resource "google_composer_environment" "example" {
provider = google-beta
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Remplacez :
ENVIRONMENT_NAME
par le nom de l'environnement.LOCATION
par la région où se trouve l'environnement.PACKAGE_NAME
par le nom du package.EXTRAS_AND_VERSION
avec le spécificateur de version et d'extras facultatif. À omettre les versions et les extras, spécifier une valeur vide.- Pour ajouter plusieurs packages, ajoutez des entrées supplémentaires pour les packages.
à
pypi_packages
.
Exemple :
resource "google_composer_environment" "example" {
provider = google-beta
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Installer des packages à partir d'un dépôt public
Vous pouvez installer des packages hébergés dans d'autres dépôts ayant une adresse IP publique.
Les packages doivent être correctement configurés pour que l'outil pip
par défaut puisse l'installer.
Pour effectuer l'installation à partir d'un dépôt de packages disposant d'une adresse publique :
Créer un fichier pip.conf et incluez-y les informations suivantes, le cas échéant:
- URL du dépôt (dans le paramètre
index-url
) - Identifiants d'accès au dépôt
- Options d'installation
pip
non définies par défaut
Exemple :
[global] index-url=https://example.com/
- URL du dépôt (dans le paramètre
(Facultatif) Dans certains cas, vous pouvez récupérer des packages à partir de plusieurs dans d'autres dépôts publics, par exemple lorsque le dépôt public contient de packages que vous voulez installer et tous les autres packages de PyPI:
- Configurez un dépôt virtuel Artifact Registry.
- Ajouter une configuration pour plusieurs dépôts (y compris PyPI, si nécessaire)
et définir l'ordre dans lequel
pip
recherche les dépôts. - Spécifiez l'URL du dépôt virtuel dans le paramètre
index-url
.
Importez le fichier pip.conf dans le dossier
/config/pip/
du bucket de votre environnement.Installez des paquets à l'aide de l'une des méthodes disponibles.
Installer des packages à partir d'un dépôt Artifact Registry
Vous pouvez stocker des packages dans un dépôt Artifact Registry. dans votre projet et configurer votre environnement pour effectuer des installations à partir de celui-ci.
Configurez les rôles et les autorisations:
Le compte de service de votre environnement doit disposer du rôle
iam.serviceAccountUser
.Assurez-vous que le compte de service Cloud Build dispose des autorisations de lire depuis votre dépôt Artifact Registry.
Si votre environnement limite l'accès aux autres services de votre projet, par exemple si vous utilisez VPC Service Controls :
Accordez les autorisations d'accès à votre dépôt Artifact Registry pour compte de service de l'environnement plutôt que compte de service Cloud Build.
Assurez-vous que la connectivité au dépôt Artifact Registry est configurée dans votre projet.
Pour installer des packages PyPI personnalisés à partir d'un dépôt Artifact Registry :
Créer un fichier pip.conf et incluez-y les informations suivantes, le cas échéant:
- URL du dépôt Artifact Registry (dans le paramètre
index-url
) - Identifiants d'accès au dépôt
- Options d'installation
pip
autres que celles par défaut
Pour un dépôt Artifact Registry, ajoutez
/simple/
à l'URL du dépôt :[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
- URL du dépôt Artifact Registry (dans le paramètre
(Facultatif) Dans certains cas, vous pouvez extraire des packages à partir de plusieurs dépôts, par exemple lorsque votre dépôt Artifact Registry contient des packages spécifiques que vous souhaitez installer et que vous souhaitez installer tous les autres packages à partir de PyPI :
- Configurez un dépôt virtuel Artifact Registry.
- Ajouter une configuration pour plusieurs dépôts (y compris PyPI, si nécessaire)
et définir l'ordre dans lequel
pip
recherche les dépôts. - Spécifiez l'URL du dépôt virtuel dans le paramètre
index-url
.
Importez ce fichier pip.conf dans le répertoire
/config/pip/
. dans le bucket de votre environnement. Exemple :gs://us-central1-example-bucket/config/pip/pip.conf
.Installez les packages en utilisant l'une des méthodes disponibles.
Installer des packages à partir d’un dépôt privé
Vous pouvez héberger un dépôt privé sur le réseau de votre projet et configurer votre environnement pour y installer des packages Python.
Configurez les rôles et les autorisations:
Le compte de service de votre environnement Cloud Composer doit disposer du rôle
iam.serviceAccountUser
.Si vous installez des packages PyPI personnalisés à partir d'un dépôt du répertoire et que ce dépôt ne possède pas d'adresse IP publique:
Attribuez des autorisations d'accès à ce dépôt au compte de service de l'environnement.
Assurez-vous que la connectivité à ce dépôt est configurée dans votre projet.
Pour installer des packages à partir d'un dépôt privé hébergé sur le réseau de votre projet:
Créez un fichier pip.conf et faites-y figurer les informations suivantes, le cas échéant :
- Adresse IP du dépôt dans le réseau de votre projet
- Identifiants d'accès au dépôt
- Options d'installation
pip
non définies par défaut
Exemple :
[global] index-url=https://192.0.2.10/
(Facultatif) Dans certains cas, vous pouvez récupérer des packages à partir de plusieurs dans d'autres dépôts, par exemple lorsque le dépôt privé contient des de packages que vous voulez installer et tous les autres packages de PyPI:
- Configurez un dépôt virtuel Artifact Registry.
- Ajouter une configuration pour plusieurs dépôts (y compris PyPI, si nécessaire)
et définir l'ordre dans lequel
pip
recherche les dépôts. - Spécifiez l'URL du dépôt virtuel dans le paramètre
index-url
.
(Facultatif) Dans les versions 2.2.1 et ultérieures de Cloud Composer, vous pouvez utiliser un certificat personnalisé lorsque vous installez des packages à partir de votre dépôt privé. Pour ce faire :
Importez le fichier de certificat dans le
/config/pip/
dans le bucket de votre environnement.Dans pip.conf, spécifiez le nom du fichier de certificat dans le paramètre
cert
. Ne modifiez pas le dossier/etc/pip/
.Exemple :
[global] cert =/etc/pip/example-certificate.pem
Importez le fichier pip.conf dans le dossier
/config/pip/
du bucket de votre environnement. Exemple :gs://us-central1-example-bucket/config/pip/pip.conf
.Installez les packages en utilisant l'une des méthodes disponibles.
Installer une bibliothèque Python locale
Pour installer une bibliothèque Python interne ou locale, procédez comme suit :
Placez les dépendances dans un sous-répertoire du sous-répertoire
dags/
dans le bucket de votre environnement. Pour importer un module à partir d'un chaque sous-répertoire du chemin d'accès au module doit contenir un fichier de repère de package__init__.py
.Dans l'exemple suivant, la dépendance est
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Importez la dépendance à partir du fichier de définition du DAG.
Exemple :
Utiliser des packages qui dépendent de bibliothèques d'objets partagées
Certains packages PyPI dépendent de bibliothèques système. Bien que Cloud Composer ne soit pas compatible avec les bibliothèques système, vous pouvez utiliser les options suivantes :
Utiliser KubernetesPodOperator. Définissez l'image de l'opérateur sur une image de build personnalisée. Si des packages échouent lors de l'installation en raison à une dépendance système non satisfaite, utilisez cette option.
Importez les bibliothèques d'objets partagées dans le bucket de votre environnement. Si vos packages PyPI se sont correctement installés, mais échouent lors de l'exécution, utilisez cette option.
- Recherchez manuellement les bibliothèques d'objets partagées pour la dépendance PyPI (un fichier .so).
- Importez les bibliothèques d'objets partagées dans le dossier
/plugins
du bucket de votre environnement. - Définissez la variable d'environnement suivante :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Installer des packages dans des environnements d'adresses IP privées
Cette section explique comment installer des packages dans des environnements IP privés.
Selon la configuration de votre projet, il est possible que votre environnement n'ait pas l'accès à l'Internet public.
Environnement IP privé avec accès Internet public
Si votre environnement d'adresse IP privée peut accéder à Internet public, vous pouvez installer des packages à l'aide d'options pour les environnements d'adresse IP publique :
- Installer à partir de PyPI Dans ce cas, aucune configuration spéciale n'est requise. Suivez la procédure décrite dans la section Installez un package à partir de PyPI.
- Installez à partir d'un dépôt avec une adresse IP publique. Suivez la procédure décrite dans la section Installer un paquet à partir d'un dépôt privé.
- Installez à partir d'un dépôt PyPI privé hébergé sur le réseau de votre projet.
Environnement IP privé sans accès à Internet
Si votre environnement IP privé n'a pas accès à Internet public, vous pouvez installer des paquets de l'une des manières suivantes :
- Utilisez un dépôt PyPI privé hébergé sur le réseau de votre projet.
- Utilisez une VM de serveur proxy dans le réseau de votre projet pour vous connecter à un dépôt PyPI sur l'Internet public. Spécifiez l'adresse du proxy dans le fichier
/config/pip/pip.conf
du bucket de votre environnement. - Utiliser un dépôt Artifact Registry comme seule source
de packages. Pour ce faire, redéfinissez le paramètre
index-url
comme décrit. - Si votre stratégie de sécurité autorise l'accès à des adresses IP externes à partir de votre réseau VPC, vous pouvez activer l'installation de packages à partir de dépôts sur l'Internet public en configurant Cloud NAT.
- Placez les dépendances Python dans le dossier
/dags
du bucket de votre environnement pour les installer en tant que bibliothèques locales. Cette option n'est pas conseillée si l'arbre des dépendances est volumineux.
Installer dans un environnement d'adresse IP privée conformément aux restrictions d'emplacement des ressources
Garder votre projet en conformité avec les exigences de restriction d'emplacement des ressources qui interdisent l'utilisation de certains outils. En particulier, Cloud Build ne peut pas être utilisée pour l'installation du package, ce qui empêche l'accès direct des dépôts sur l'Internet public.
Pour installer des dépendances Python dans un tel environnement, suivez les instructions pour les environnements d'adresse IP privée sans accès à Internet.
Installer une dépendance Python dans un environnement d'adresse IP privée dans un périmètre VPC Service Controls
La protection de votre projet avec un périmètre VPC Service Controls entraîne des restrictions de sécurité supplémentaires. En particulier, Cloud Build ne peut pas être utilisé pour l'installation des packages, ce qui empêche l'accès direct aux dépôts sur l'Internet public.
Pour installer des dépendances Python pour un environnement d'adresse IP privée dans un périmètre, suivez les instructions pour les environnements d'adresse IP privée sans accès à Internet.
Étape suivante
- Résoudre les problèmes d'installation des packages
- Résoudre les problèmes liés aux mises à jour et aux mises à niveau