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 des PyPI préinstallés et personnalisés packages.

  • 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 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 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 l'interface Web Airflow.
PythonVirtualenvOperator Vous ne souhaitez pas que le package soit installé pour tous les nœuds de calcul Airflow. la dépendance est 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. Ce nécessite davantage de configuration et de maintenance. Pensez-y uniquement si d'autres 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'un PyPI privé 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 se compose du package avec des extras 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.

  • 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. Comme Cloud Build est utilisé par défaut Installer des packages PyPI personnalisés dans 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. Si vous souhaitez que vos compilations pour l'exécuter avec un autre compte, vous pouvez ignorer COMPOSER_AGENT_BUILD_SERVICE_ACCOUNT variable d'environnement avec 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 Autorisation iam.serviceAccounts.actAs sur ce contenu.

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 gcloud CLI 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 dans laquelle 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 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

  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 gcloud CLI propose plusieurs options pour utiliser des PyPI personnalisés. packages:

  • --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

Le fichier requirements.txt doit contenir chaque spécificateur d'exigences sur une ligne.

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

  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é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.
  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 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. à 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 une 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 autres que celles 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. 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. 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 effectuer des installations à partir de celui-ci.

Configurez les rôles et les autorisations:

  1. Le compte de service de votre environnement doit disposer 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és dans votre projet.

Pour installer des packages PyPI personnalisés à partir d'un dépôt Artifact Registry:

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

    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 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 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é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 autres que celles 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 répertoire /config/pip/. dans le 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 depuis 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
    
  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 votre PyPI ont été installés avec succès, mais échouent au moment 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 de votre bucket de l'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 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 IP privé peut accéder à l'Internet public, vous pouvez Installez des packages à l'aide d'options pour les environnements IP publics:

Environnement IP privé 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 du serveur proxy du réseau de votre projet pour vous connecter vers 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.
  • 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é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 un environnement IP privé sans accès à Internet.

Installer une dépendance Python dans un environnement d'adresses IP privées dans un périmètre VPC Service Controls

Protéger 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