Installer des dépendances Python pour Cloud Composer

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Cette page explique comment installer des packages Python pour votre 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 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 paquets 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 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 sont disponibles dans PyPI et ne présentent 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.

  • 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 exécuter des builds conformément à la documentation Cloud Build, et l'autorisation iam.serviceAccounts.actAs doit être accordée au compte de service de l'environnement.

  • Projets pour lesquels l'API Cloud Composer est activée le 29 avril 2024 ou après Sauf si votre organisation remplace la règle constraints/cloudbuild.disableCreateDefaultServiceAccount, les nouveaux projets ne provisionneront pas l'ancien compte de service Cloud Build lors de 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 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 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 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

  1. Dans la console Google Cloud, accédez à la page Environnements.

    Accéder à la page Environnements

  2. Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.

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

  1. Dans la console Google Cloud, accédez à la page Environnements.

    Accéder à la page Environnements

  2. Dans la liste des environnements, cliquez sur le nom de votre environnement. La page Détails de l'environnement s'ouvre.

  3. Accédez à l'onglet Packages PyPI.

  4. Cliquez sur Modifier.

  5. Cliquez sur Ajouter un package.

  6. 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]
  7. 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 packages PyPI personnalisés existants par 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 dans laquelle se trouve l'environnement.

Installer un package

Mettez à jour votre environnement et 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 dans laquelle se trouve l'environnement.
  • PACKAGE_NAME par le nom du package.
  • EXTRAS_AND_VERSION par le spécificateur facultatif de version et d'extras. À omettre les versions et les extras, spécifier 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 où 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 :

  1. 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écifiez pas 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.
  2. 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 par le spécificateur facultatif de version et d'extras. À 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 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 dans laquelle 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 disposant d'une adresse IP publique.

Les packages doivent être correctement configurés pour que l'outil pip par défaut puisse les installer.

Pour effectuer l'installation à partir d'un dépôt de packages disposant d'une adresse publique :

  1. 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/
    
  2. (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:

    1. Configurez un dépôt virtuel Artifact Registry.
    2. 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.
    3. Spécifiez l'URL du dépôt virtuel dans le paramètre index-url.
  3. Déterminez l'URI du bucket de votre environnement.

  4. Importez le fichier pip.conf dans le répertoire /config/pip/. dans le bucket de votre environnement.

  5. Installez les packages en utilisant 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 l'installer à partir de celui-ci.

Configurez les rôles et les autorisations :

  1. Le compte de service de votre environnement doit disposer du rôle iam.serviceAccountUser.

  2. Assurez-vous que le compte de service Cloud Build a autorisations de lecture à partir de votre dépôt Artifact Registry.

  3. Si votre environnement a restreint l'accès à d'autres services dans votre par exemple, si vous utilisez VPC Service Controls:

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

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

  1. 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 autres que celles 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/
    
  2. (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 :

    1. Configurez un dépôt virtuel Artifact Registry.
    2. 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.
    3. Spécifiez l'URL du dépôt virtuel dans le paramètre index-url.
  3. 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.

  4. Installez des paquets à l'aide de 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 pour installer des packages Python à partir de celui-ci.

Configurez les rôles et les autorisations :

  1. Le compte de service de votre environnement Cloud Composer doit qui disposent du rôle iam.serviceAccountUser.

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

    1. Attribuez des autorisations d'accès à ce dépôt pour les ressources de service géré.

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

  1. 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/
    
  2. (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:

    1. Configurez un dépôt virtuel Artifact Registry.
    2. 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.
    3. Spécifiez l'URL du dépôt virtuel dans le paramètre index-url.
  3. (Facultatif) À partir de la version 2.2.1 de Cloud Composer, vous pouvez : utiliser un certificat personnalisé lorsque vous installez des packages à partir de votre un dépôt de clés. Pour ce faire :

    1. Importez le fichier de certificat dans le /config/pip/ dans le bucket de votre environnement.

    2. Dans pip.conf, spécifiez le nom du fichier de certificat dans le fichier cert . Ne modifiez pas le dossier /etc/pip/.

      Exemple :

      [global]
      cert =/etc/pip/example-certificate.pem
      
  4. 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.

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

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

    Exemple :

from dependencies import coin_module

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 vos packages PyPI se sont correctement installés, mais échouent lors de l'exécution, utilisez cette option.

    1. Rechercher manuellement les bibliothèques d'objets partagées pour la dépendance PyPI (fichier .so).
    2. Importez les bibliothèques d'objets partagées dans le dossier /plugins du bucket de votre environnement.
    3. 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 paquets dans des environnements d'adresses IP privées.

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 IP privé peut accéder à l'Internet public, vous pouvez Installez des packages à l'aide d'options pour les environnements IP publics:

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é sur le réseau de votre projet.
  • Utilisez une VM du serveur proxy du réseau de votre projet pour vous connecter vers 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 aux adresses IP externes réseau VPC, vous pouvez autoriser 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. Il ne s'agit peut-être pas est une bonne option si l'arborescence des dépendances est grande.

Installer dans un environnement d'adresse IP privée 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 IP privé 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 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