Cette page explique comment installer des packages Python et comment se connecter à votre environnement Cloud Composer à partir de quelques applications courantes.
Les dépendances sont installées avec les dépendances Python existantes qui font partie de l'environnement de base.
Si votre environnement nécessite un package spécifique, nous vous recommandons d'installer explicitement le package pour éviter les problèmes liés aux modifications de package dans les versions d'image de Cloud Composer. Ne comptez pas sur les packages préinstallés dans la version de Cloud Composer en cours d'exécution dans votre environnement.
Options de gestion des dépendances
Si votre dépendance Python n'a aucune dépendance externe et n'est pas en conflit avec les dépendances de Cloud Composer, vous pouvez installer des dépendances Python à partir de l'index de package Python. Vous pouvez également installer une dépendance Python à partir d'un dépôt de packages privé.
Si vous avez d'autres exigences, vous trouverez d'autres options ci-dessous.
Option | Cas d'utilisation |
---|---|
Bibliothèque locale Python | Votre dépendance Python est introuvable dans l'index de packages Python et la bibliothèque ne comporte aucune dépendance externe, telle que dist-packages. |
Fonction plug-ins | Vous souhaitez utiliser des fonctionnalités spécifiques au plug-in, telles que la modification de l'interface Web Airflow. |
PythonVirtualenvOperator | Votre dépendance Python se trouve dans l'index de packages Python et ne comporte aucune dépendance externe. Toutefois, vous ne souhaitez pas que votre dépendance Python soit installée pour tous les nœuds de calcul. Sinon, la dépendance entre en conflit avec les dépendances requises pour Cloud Composer. |
KubernetesPodOperator | Vous avez besoin de dépendances externes ne pouvant pas être installées à partir du pip (telles que dist-packages) ou se trouvant sur un serveur pip interne. Cette option nécessite davantage de configuration et de maintenance et doit généralement être envisagée si les autres options ne fonctionnent pas. |
Avant de commencer
- L'autorisation suivante est requise pour installer des packages Python dans l'environnement Cloud Composer :
composer.environments.update
. Pour en savoir plus, consultez la page Contrôle des accès pour Cloud Composer. - 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.
- Lorsque vous installez des dépendances Python personnalisées à l'aide de l'API, tous les processus Cloud Composer s'exécutent avec des dépendances PyPI récemment installées.
- Les dépendances PyPI personnalisées peuvent provoquer des conflits avec les dépendances requises par Airflow, provoquant une instabilité.
- Avant d'effectuer le déploiement en production, nous vous recommandons de tester les packages PyPI localement dans un conteneur de nœud de calcul Airflow.
Afficher les packages Python installés
Pour afficher les packages Python installés dans votre environnement, procédez comme suit :
- Connectez-vous au cluster GKE correspondant à votre environnement.
- Connectez-vous à un pod. Pour accéder aux pods du cluster GKE, utilisez des commandes kubectl compatibles avec les espaces de noms.
Pour afficher tous les espaces de noms, utilisez
kubectl get pods --all-namespaces
. - Exécutez
pip freeze
.
Exemple :
gcloud container clusters get-credentials projects/composer-test-1/zones/us-central1-f/clusters/us-central1-1223232-gke --zone us-central1-f Fetching cluster endpoint and auth data. kubeconfig entry generated for us-central1-quickstart-f5da909c-gke.
~ (composer-test-1)$ kubectl exec -itn composer-1-7-2-airflow-1-9-0-0a9f265b airflow-worker-7858d4fb79-2dr9j -- /bin/bash ... ~ (composer-test-1)$ pip freeze absl-py==0.7.1 adal==1.2.0 asn1crypto==0.24.0 astor==0.8.0 attrs==19.1.0 autopep8==1.4.4 ...
Installer une dépendance Python à partir de PyPI
Votre dépendance Python ne doit pas comporter de dépendances externes ni être en conflit avec les dépendances de Cloud Composer pour installer des dépendances Python à partir de l'index de package Python.
Pour ajouter, mettre à jour ou supprimer les dépendances Python sur l'environnement, procédez comme suit :
Console
Spécifiez le nom du package et les spécificateurs de version comme indiqué :
"pi-python-client", "==1.1.post1"
"go-api-python-client", "==1.0.0.dev187"
Pour un package sans spécificateur de version, utilisez une chaîne vide pour la valeur, telle que "glob2", " "
.
Pour accéder aux dépendances Python d'un environnement, accédez à la page Dépendances PyPI en procédant comme suit :
Ouvrez la page Environnements dans la console Google Cloud Platform.
Cliquez sur le Nom de l'environnement pour lequel vous souhaitez installer, mettre à jour ou supprimer des dépendances Python.
Sélectionnez l'onglet Dépendances PyPI.
Cliquez sur le bouton Modifier.
Pour ajouter une dépendance, procédez comme suit :
Cliquez sur le bouton Ajouter une dépendance.
Saisissez le nom et la version de votre bibliothèque dans les champs Nom et Version.
Pour mettre à jour une dépendance existante, procédez comme suit :
Sélectionnez le champ Nom et/ou Version de la bibliothèque à mettre à jour.
Saisissez une nouvelle valeur.
Pour supprimer une dépendance, procédez comme suit :
Passez la souris sur le nom de la dépendance à supprimer.
Cliquez sur l'icône de corbeille qui s'affiche.
gcloud
Transmettez un fichier requirements.txt
à l'outil de ligne de commande gcloud
.
Formatez le fichier avec chaque spécificateur d'exigence sur une ligne distincte.
Exemple de fichier requirements.txt
:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Transmettez le fichier requirements.txt
à la commande environments.set-python-dependencies
pour définir les dépendances de votre installation.
gcloud composer environments update ENVIRONMENT-NAME \\ --update-pypi-packages-from-file requirements.txt \\ --location LOCATION
La commande prend fin une fois l'opération terminée. Pour éviter d'attendre, utilisez l'option --async
.
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.
rest
Utilisez la méthode projects.locations.environments.patch
, en spécifiant config.softwareConfig.pypiPackages
comme préfixe pour le paramètre de requête updateMask.
Installer une dépendance Python à partir d'un dépôt privé
Vous pouvez installer des packages hébergés dans des dépôts de packages privés disponibles sur l'Internet public. Les packages doivent être correctement configurés, c'est-à-dire qu'ils doivent pouvoir être installés par l'outil pip par défaut.
Pour effectuer l'installation à partir d'un dépôt de packages privé avec une adresse publique :
Créez un fichier pip.conf et faites-y figurer les informations suivantes, le cas échéant :
- Identifiants d'accès au dépôt
Options d'installation pip non définies par défaut
Exemple :
[global] extra-index-url=https://my-example-private-repo.com/
Importez le fichier pip.conf dans le bucket Cloud Storage de votre environnement et placez-le dans le dossier
/config/pip/
(par exemple, gs://us-central1-b1-6efannnn -bucket/config/pip/pip.conf).
Installer une dépendance Python dans un environnement d'adresse IP privée
Un environnement d'adresse IP privée restreint l'accès à l'Internet public. Par conséquent, l'installation de dépendances Python peut nécessiter des étapes supplémentaires.
Lors de l'installation de dépendances à partir d'un dépôt PyPI public, aucune configuration spéciale n'est requise. Vous pouvez suivre le processus normal décrit ci-dessus. Vous pouvez également demander des packages à partir d'un dépôt privé doté d'une adresse publique.
Vous pouvez également héberger un dépôt PyPI privé sur votre réseau VPC. Lors de l'installation de dépendances, Cloud Composer exécute l'opération dans le cluster GKE d'adresses IP privées qui héberge votre environnement, sans accéder à une adresse IP publique via Cloud Build.
Pour installer des packages à partir d'un dépôt privé hébergé sur votre réseau VPC, procédez comme suit :
Si le compte de service de votre environnement Cloud Composer ne dispose pas du rôle
project.editor
, accordez-lui le rôleiam.serviceAccountUser
.Spécifiez l'adresse IP privée du dépôt dans le fichier
pip.conf
importé dans le dossier/config/pip/
du bucket Cloud Storage.
Installer une dépendance Python 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é 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, vous devez suivre l'une des approches décrites ci-dessous pour un environnement d'adresse IP privée disposant d'un périmètre VPC-SC.
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 IP Composer privé dans un périmètre, vous disposez de plusieurs options :
- Utilisez un dépôt PyPI privé hébergé sur votre réseau VPC (comme décrit dans la section ci-dessus).
- Utilisez un serveur proxy dans votre réseau VPC 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 Cloud Storage. - Si votre stratégie de sécurité autorise l'accès à votre réseau VPC à partir d'adresses IP externes, vous pouvez l'activer en configurant Cloud NAT.
- Fournissez les dépendances Python dans le dossier
dags
du bucket Cloud Storage pour les installer en tant que bibliothèques locales. Cette option n'est peut-être pas une bonne option si l'arbre des dépendances est volumineux.
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 dossier
dags/
. 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 cet exemple, 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 Python 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 vous constatez des échecs à l'installation de certains packages en raison d'une dépendance système non satisfaite, utilisez cette option.
Importer les bibliothèques d'objets partagées dans le bucket Cloud Storage de votre environnement.
- 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
/home/airflow/gcs/plugins
. - Définissez la variable d'environnement Cloud Composer suivante :
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Si vos packages PyPI se sont correctement installés, mais échouent lors de l'exécution, utilisez cette option.
Se connecter à l'interface Web Flower
Flower est un outil Web permettant de travailler avec des clusters Celery. Flower est pré-installé dans votre environnement. Vous pouvez utiliser son interface utilisateur Web pour surveiller les nœuds de calcul Apache Airflow pour votre environnement.
Pour accéder à Flower, procédez comme suit :
Pour déterminer le cluster Kubernetes Engine, affichez votre environnement de la manière suivante :
gcloud composer environments describe ENVIRONMENT-NAME \ --location LOCATION
Le cluster est répertorié en tant que
gkeCluster
. La zone dans laquelle le cluster est déployé est répertoriée en tant quelocation
.Exemple :
gcloud composer environments describe environment-name --location us-central1 config: airflowUri: https://uNNNNe0aNNbcd3fff-tp.appspot.com dagGcsPrefix: gs://us-central1-may18-test-00a47695-bucket/dags gkeCluster: projects/example-project/zones/us-central1-a/clusters/us-central1-environment-name-00a47695-gke nodeConfig: diskSizeGb: 100 location: projects/example-project/zones/us-central1-a
Dans l'exemple, le cluster est
us-central1-environment-name-00a47695-gke
et la zone estus-central1-a
. Ces informations sont également disponibles sur la page Détails de l'environnement dans Cloud Console.Connectez-vous au cluster Kubernetes Engine de la manière suivante :
gcloud container clusters get-credentials CLUSTER_NAME \ --zone CLUSTER_ZONE
Exemple :
gcloud container clusters get-credentials us-central1-environment-name-00a47695-gke --zone us-central1-a Fetching cluster endpoint and auth data. kubeconfig entry generated for us-central1-environment-name-00a47695-gke.
Affichez les pods de nœuds de calcul et sélectionnez le module sur lequel exécuter Flower :
kubectl get pods --all-namespaces | grep worker
Exemple :
kubectl get pods --all-namespaces | grep worker airflow-worker-89696c45f-49rkb 2/2 Running 1 29d airflow-worker-89696c45f-gccmm 2/2 Running 1 29d airflow-worker-89696c45f-llnnx 2/2 Running 0 29d
Les noms des pods correspondent à l'expression régulière
"airflow-(worker|scheduler)-[-a-f0-9]+")
.Exécutez Flower sur le pod de nœuds de calcul :
kubectl exec -n NAMESPACE -it POD_NAME -c airflow-worker -- airflow flower
Exemple :
kubectl exec -n composer-1-6-0-airflow-1-10-1-9670c487 -it airflow-worker-89696c45f-llnnx / -c airflow-worker -- airflow flower [I 180601 20:35:55 command:139] Visit me at http://0.0.0.0:5555 [I 180601 20:35:55 command:144] Broker: redis://airflow-redis-service.default.svc.cluster.local:6379/0
Dans une session de terminal distincte, utilisez
kubectl
pour transférer un port de votre machine locale vers le pod exécutant l'UI Flower :kubectl -n NAMESPACE port-forward POD_NAME 5555
Exemple :
kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 port-forward airflow-worker-c5c4b58c7-zhmkv 5555 Forwarding from 127.0.0.1:5555 -> 5555
Pour accéder à l'interface utilisateur Web, accédez à
http://localhost:5555
dans votre navigateur local.
Installer SQLAlchemy pour accéder à la base de données Airflow
SQLAlchemy est une boîte à outils SQL pour Python et un mappeur objet-relationnel (ORM, Object Relational Mapper). Vous pouvez installer SQLAlchemy et l'utiliser pour accéder à l'instance Cloud SQL pour Cloud Composer. Lors de l'installation, Cloud Composer configure la variable d'environnement Airflow AIRFLOW__CORE__SQL_ALCHEMY_CONN
.
Pour installer SQLAlchemy, procédez comme suit :
Installez
sqlalchemy
dans votre environnement.gcloud composer environments update ENVIRONMENT-NAME / --location LOCATION / --update-pypi-package "sqlalchemy"
Pour déterminer le cluster Kubernetes Engine, affichez votre environnement de la manière suivante :
gcloud composer environments describe ENVIRONMENT-NAME / --location LOCATION
Connectez-vous au cluster Kubernetes Engine de la manière suivante :
gcloud container clusters get-credentials CLUSTER_NAME / --zone CLUSTER_LOCATION
Affichez les pods de nœuds de calcul et sélectionnez le pod auquel vous souhaitez vous connecter :
kubectl get pods --all-namespaces | grep worker
Connectez-vous en SSH au pod de nœud de calcul :
kubectl -n NAMESPACE exec -it POD_NAME -c airflow-worker -- /bin/bash
Exemple :
kubectl -n composer-1-6-0-airflow-1-10-1-9670c487 / exec -it airflow-worker-54c6b57789-66pnr -c airflow-worker -- /bin/bash airflow@airflow-worker-54c6b57789-66pnr:~$
Utilisez la bibliothèque
sqlalchemy
pour interagir avec la base de données Airflow :python import airflow.configuration as config config.conf.get('core', 'sql_alchemy_conn')