Cette page a été traduite par l'API Cloud Translation.
Switch to English

Installer des dépendances Python

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 :

  1. Connectez-vous au cluster GKE correspondant à votre environnement.
  2. 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.
  3. 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 :

  1. Ouvrez la page Environnements dans la console Google Cloud Platform.

    Ouvrir la page Environnements

  2. Cliquez sur le Nom de l'environnement pour lequel vous souhaitez installer, mettre à jour ou supprimer des dépendances Python.

  3. Sélectionnez l'onglet Dépendances PyPI.

  4. Cliquez sur le bouton Modifier.

  5. Pour ajouter une dépendance, procédez comme suit :

    1. Cliquez sur le bouton Ajouter une dépendance.

    2. Saisissez le nom et la version de votre bibliothèque dans les champs Nom et Version.

  6. Pour mettre à jour une dépendance existante, procédez comme suit :

    1. Sélectionnez le champ Nom et/ou Version de la bibliothèque à mettre à jour.

    2. Saisissez une nouvelle valeur.

  7. Pour supprimer une dépendance, procédez comme suit :

    1. Passez la souris sur le nom de la dépendance à supprimer.

    2. 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 :

  1. 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/
      

  2. 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 :

  1. Si le compte de service de votre environnement Cloud Composer ne dispose pas du rôle project.editor, accordez-lui le rôle iam.serviceAccountUser.

  2. 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 :

  1. Utilisez un dépôt PyPI privé hébergé sur votre réseau VPC (comme décrit dans la section ci-dessus).
  2. 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.
  3. 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.
  4. 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 :

  1. 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
    
  2. Importez la dépendance à partir du fichier de définition du DAG.

    Exemple :

    from dependencies import coin_module

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 :

  1. 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.

  2. Importer les bibliothèques d'objets partagées dans le bucket Cloud Storage de votre environnement.

    1. Recherchez manuellement les bibliothèques d'objets partagées pour la dépendance PyPI (un fichier .so).
    2. Importez les bibliothèques d'objets partagées dans /home/airflow/gcs/plugins.
    3. 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 :

  1. 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 que location.

    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 est us-central1-a. Ces informations sont également disponibles sur la page Détails de l'environnement dans Cloud Console.

  2. 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.
  3. 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]+").

  4. 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
  5. 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
  6. 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 :

  1. Installez sqlalchemy dans votre environnement.

    gcloud composer environments update ENVIRONMENT-NAME /
        --location LOCATION /
        --update-pypi-package "sqlalchemy"
    
  2. Pour déterminer le cluster Kubernetes Engine, affichez votre environnement de la manière suivante :

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION
  3. Connectez-vous au cluster Kubernetes Engine de la manière suivante :

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_LOCATION
  4. 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
  5. 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:~$

  6. 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')