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 un PyPI préinstallé et personnalisé packages.
Les packages PyPI préinstallés sont des packages inclus dans l'image Cloud Composer de votre environnement. Chaque image Cloud Composer contient des packages PyPI 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 de gestion des packages PyPI pour les environnements Cloud Composer
Option | Utiliser si |
---|---|
Installer à partir de PyPI | 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 dépôt 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 |
Impossible de trouver le package 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 de 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 qui ne peuvent pas être installées à partir de pip .
tels que dist-packages , ou qui se trouvent 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 les dépendances PyPI, vous devez accorder des identités d'utilisateur supplémentaires avec un accès aux services qui sont protégés par le périmètre de service et activer la compatibilité pour un dépôt PyPI privé.
- 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.
Afficher la liste des packages PyPI
Vous pouvez obtenir la liste des packages pour 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 pour 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
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 où 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 où se trouve l'environnement.
Installer des packages personnalisés dans un environnement Cloud Composer
Cette section décrit 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 ne comporte aucune dépendance externe ni conflit 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 PyPI packages (Packages PyPI), indiquez les noms des packages. des spécificateurs de version et des extras.
Exemple :
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Cliquez sur Enregistrer.
gcloud
La CLI gcloud propose plusieurs arguments pour travailler avec des paquets PyPI personnalisés :
--update-pypi-packages-from-file
remplace tous les paramètres personnalisés existants Packages PyPI avec les packages spécifiés. Les packages que vous ne que vous spécifiez 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 où 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écifiez plusieurs masques avec 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. Pour omettre les versions et les extras, spécifiez 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
packages.
resource "google_composer_environment" "example" {
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" {
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 disposant d'une adresse IP publique.
Les packages doivent être correctement configurés pour que l'outil pip
par défaut puisse l'installer.
Pour effectuer une installation à partir d'un dépôt de packages disposant d'une adresse publique:
Créez un fichier pip.conf et faites-y figurer 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 répertoire
/config/pip/
. dans le 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 a autorisations de lecture à partir de votre dépôt Artifact Registry.
Si votre environnement a restreint l'accès à d'autres services dans votre par exemple, si vous utilisez VPC Service Controls:
Attribuez des autorisations d'accès à votre dépôt Artifact Registry au compte de service de l'environnement au lieu du 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éez un fichier pip.conf et faites-y figurer 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
non définies par défaut
Pour un dépôt Artifact Registry, ajoutez
/simple/
au dépôt URL:[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 récupérer des packages à partir de plusieurs tels que lorsque votre dépôt Artifact Registry contient certains packages spécifiques que vous voulez installer et que vous voulez installer tous les autres packages de PyPI:
- Configurez un dépôt virtuel Artifact Registry.
- Ajoutez une configuration pour plusieurs dépôts (y compris PyPI, si nécessaire) et définissez 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 qui disposent 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 pour les ressources de service géré.
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éer un fichier pip.conf et incluez-y 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
.
Importez le 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 des paquets à l'aide de 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 sous-répertoire, chaque sous-répertoire du chemin d'accès au module doit contenir un fichier de marqueur 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éfinir l'image de l'opérateur sur une image personnalisée créer une image. 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 votre PyPI les packages ont bien été installés, mais échouent au moment 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 IP privés
Cette section explique comment installer des packages dans des environnements IP privés.
Selon la configuration de votre projet, votre environnement peut ne pas avoir accès à Internet public.
Environnement d'adresse IP privée 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 d'adresse IP privée sans accès à Internet
Si votre environnement IP privé n'a pas accès à l'Internet public, vous pouvez installer des packages de l’une des manières suivantes:
- Utilisez un dépôt PyPI privé hébergé dans le répertoire réseau.
- 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. Indiquez l'adresse du proxy dans
le fichier
/config/pip/pip.conf
dans le bucket de votre environnement. - Utilisez 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 IP privé soumis à des 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é 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 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é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 environnement IP privé à l'intérieur d'un périmètre, suivez les instructions pour les environnements IP privés 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