Instalar dependências do Python para o Cloud Composer

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Esta página descreve como instalar pacotes Python para seu ambiente do Cloud Composer.

Sobre pacotes PyPI pré-instalados e personalizados em imagens do Cloud Composer

As imagens do Cloud Composer contêm PyPI pré-instalado e personalizado pacotes.

  • Os pacotes PyPI pré-instalados são aqueles incluídos no a imagem do ambiente do Cloud Composer. Cada A imagem do Cloud Composer contém Pacotes PyPI que são específicos para sua versão do Cloud Composer e do Airflow.

  • Os pacotes PyPI personalizados podem ser instalados no seu ambiente em além dos pacotes pré-instalados.

.

Opções para gerenciar pacotes PyPI para ambientes do Cloud Composer

Opção Use se
Instalar usando o PyPI A maneira padrão de instalar pacotes no seu ambiente
Instalar a partir de um repositório com um endereço IP público O pacote está hospedado em um repositório de pacotes diferente do PyPI. Este repositório tem um endereço IP público
Instalar de um repositório do Artifact Registry O pacote está hospedado em um repositório do Artifact Registry.
Instalar de um repositório na rede do seu projeto Seu ambiente não tem acesso à Internet pública. O pacote está hospedado em um repositório de pacotes na rede do seu projeto.
Instalar como uma biblioteca local do Python O pacote não pode ser encontrado em PyPI, e a biblioteca não tem dependências externas, como dist-packages.
Instalar um plug-in O pacote fornece funcionalidades específicas do plug-in, como modificar pela interface da Web do Airflow.
PythonVirtualenvOperator Você não quer que o pacote seja instalado para todos os workers do Airflow ou a dependência entra em conflito com os pacotes pré-instalados. O pacote no PyPI e não tem dependências externas.
KubernetesPodOperator e Operadores do GKE Você precisa de dependências externas que não podem ser instaladas de pip. como dist-packages, ou estão em um servidor pip interno. Isso exige mais configuração e manutenção. Considere somente se outros não funcionam.

Antes de começar

  • Você precisa ter um papel que acione operações de atualização do ambiente. Além disso, a conta de serviço do ambiente precisa ter um papel com permissões suficientes para executar operações de atualização. Consulte Controle de acesso para mais informações.
  • Se o ambiente estiver protegido por um perímetro do VPC Service Controls, antes de instalar as dependências PyPI, conceder identidades de usuários adicionais com acesso a serviços que o perímetro de serviço protege e ativa o suporte para um PyPI particular. repositório de dados.
  • Os requisitos precisam seguir o formato especificado no PEP-508 em que cada requisito é especificado em letras minúsculas e consiste no pacote com especificadores de versão e extras opcionais.
  • As atualizações de dependência PyPI geram imagens Docker em Artifact Registry.

  • Se a atualização falhar por conta de um conflito de dependências, o ambiente continuará sendo executado com as dependências atuais. Se a operação for concluída, será possível usar as dependências recém-instaladas do Python nos DAGs.

  • Projetos em que A API Cloud Composer será ativada a partir de 29 de abril de 2024. A menos que sua organização modifique o constraints/cloudbuild.disableCreateDefaultServiceAccount política, novos projetos não vai provisionar a conta de serviço legada do Cloud Build sobre como ativar a API. Como o Cloud Build é usado por padrão como instalar pacotes PyPI personalizados no Cloud Composer ambiente, a instalação dos pacotes poderá falhar. Por padrão, o conta de serviço do ambiente de execução será usada. conceda todas as permissões necessárias para acessar você pacotes privados para essa conta de serviço. Se você quiser que seus builds com uma conta diferente, substitua o variável de ambiente COMPOSER_AGENT_BUILD_SERVICE_ACCOUNT com a conta de serviço escolhida. Essa conta de serviço precisa ser configurada para executar builds de acordo com a documentação do Cloud Build. e a conta de serviço do ambiente precisam ter os iam.serviceAccounts.actAs.

Ver a lista de pacotes PyPI

É possível conseguir a lista de pacotes para seu ambiente em vários formatos.

Ver pacotes pré-instalados

Para ver a lista de pacotes pré-instalados para seu ambiente, consulte a lista de pacotes para o Imagem do ambiente do Cloud Composer.

Ver todos os pacotes

Para ver todos os pacotes (pré-instalados e personalizados) no seu ambiente:

gcloud

O comando da CLI gcloud a seguir retorna o resultado: o comando python -m pip list para um worker do Airflow no seu ambiente. Use o argumento --tree para receber o resultado do comando python -m pipdeptree --warn.

gcloud beta composer environments list-packages \
    ENVIRONMENT_NAME \
    --location LOCATION

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;

Conferir pacotes PyPI personalizados

Console

  1. No console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do ambiente. A página Detalhes do ambiente é aberta.

  3. Acesse a guia Pacotes PyPI.

gcloud

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION \
  --format="value(config.softwareConfig.pypiPackages)"

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;

Instalar pacotes personalizados em um ambiente do Cloud Composer

Esta seção descreve métodos diferentes para instalar pacotes personalizados em seu de nuvem.

Instalar pacotes do PyPI

É possível instalar um pacote usando Índice de pacotes Python, se não tiver dependências ou conflitos com pacotes pré-instalados.

Para adicionar, atualizar ou excluir as dependências do Python no ambiente, faça o seguinte:

Console

  1. No console do Google Cloud, acesse a página Ambientes.

    Acessar "Ambientes"

  2. Na lista de ambientes, clique no nome do ambiente. A página Detalhes do ambiente é aberta.

  3. Acesse a guia Pacotes PyPI.

  4. Clique em Editar.

  5. Clique em Adicionar pacote.

  6. Na seção Pacotes PyPI, especifique nomes de pacotes, com opções especificadores de versão e extras.

    Exemplo:

    • scikit-learn
    • scipy, >=0.13.3
    • nltk, [machine_learning]
  7. Clique em Salvar.

gcloud

CLI gcloud tem vários benefícios para trabalhar com PyPI personalizado pacotes:

  • --update-pypi-packages-from-file substitui todas as configurações personalizadas existentes Pacotes PyPI com os pacotes especificados. Os pacotes que você não especificados são removidos.
  • --update-pypi-package atualiza ou instala um pacote.
  • --remove-pypi-packages remove os pacotes especificados.
  • --clear-pypi-packages remove todos os pacotes.

Requisitos de instalação usando um arquivo

O arquivo requirements.txt deve ter cada especificador de requisitos em um linha

Exemplo:

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

Atualize o ambiente e especifique o arquivo requirements.txt em o argumento --update-pypi-packages-from-file.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --update-pypi-packages-from-file requirements.txt

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;

Como instalar um pacote

Atualize seu ambiente e especifique o pacote, a versão e os extras no o argumento --update-pypi-package.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • PACKAGE_NAME pelo nome do pacote.
  • EXTRAS_AND_VERSION com a versão opcional e o especificador extras. Para omitir versões e extras, especifique um valor vazio.
.

Exemplo:

gcloud composer environments update example-environment \
    --location us-central1 \
    --update-pypi-package "scipy>=0.13.3"

Como remover pacotes

Atualize seu ambiente e especifique os pacotes que você quer excluir no argumento --remove-pypi-packages:

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
     --remove-pypi-packages PACKAGE_NAMES

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • PACKAGE_NAMES por uma lista de pacotes separada por vírgulas.

Exemplo:

gcloud composer environments update example-environment \
    --location us-central1 \
    --remove-pypi-packages scipy,scikit-learn

API

Crie uma solicitação de API environments.patch.

Nesta solicitação:

  1. No parâmetro updateMask, especifique a máscara:

    • Use a máscara config.softwareConfig.pypiPackages para substituir todas as já existentes pacotes com os pacotes especificados. Os pacotes que você não especificados serão excluídos.
    • Use config.softwareConfig.envVariables.PACKAGE_NAME para adicionar ou para atualizar um pacote específico. Para adicionar ou atualizar vários pacotes, especifique várias máscaras com vírgulas.
  2. No corpo da solicitação, especifique pacotes e valores para versões e extras:

    {
      "config": {
        "softwareConfig": {
          "pypiPackages": {
            "PACKAGE_NAME": "EXTRAS_AND_VERSION"
          }
        }
      }
    }
    

    Substitua:

    • PACKAGE_NAME pelo nome do pacote.
    • EXTRAS_AND_VERSION com a versão opcional e o especificador extras. Para omitir versões e extras, especifique um valor vazio.
    • Para adicionar mais de um pacote, adicione entradas extras para pacotes para pypiPackages.

Exemplo:

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

O bloco pypi_packages no bloco software_config especifica pacotes.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    software_config {

      pypi_packages = {
          PACKAGE_NAME = "EXTRAS_AND_VERSION"
      }

    }
  }
}

Substitua:

  • ENVIRONMENT_NAME pelo nome do ambiente
  • LOCATION pela região em que o ambiente está localizado;
  • PACKAGE_NAME pelo nome do pacote.
  • EXTRAS_AND_VERSION com a versão opcional e o especificador extras. Para omitir versões e extras, especifique um valor vazio.
  • Para adicionar mais de um pacote, adicione entradas extras para pacotes para pypi_packages.

Exemplo:

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]"
      }
    }
  }
}

Instalar pacotes de um repositório público

É possível instalar pacotes hospedados em outros repositórios que tenham um endereço IP público.

Os pacotes precisam ser configurados corretamente para que a ferramenta pip padrão possa instalá-los.

Para instalar a partir de um repositório de pacotes que tenha um endereço público:

  1. Crie um pip.conf. e inclua as seguintes informações no arquivo, se aplicável:

    • URL do repositório (no parâmetro index-url)
    • Acessar as credenciais do repositório
    • Opções de instalação do pip não padrão

    Exemplo:

    [global]
    index-url=https://example.com/
    
  2. (Opcional) Em alguns casos, talvez você queira buscar pacotes em várias repositórios, como quando o repositório público contém alguns arquivos os pacotes que deseja instalar e deseja instalar todos os outros pacotes do PyPI:

    1. Configure um repositório virtual do Artifact Registry.
    2. Adicionar configuração para vários repositórios (incluindo PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  3. Determine o URI do bucket do seu ambiente.

  4. Faça upload do arquivo pip.conf para o /config/pip/ no bucket do ambiente.

  5. Instale os pacotes usando um dos métodos disponíveis.

Instalar pacotes de um repositório do Artifact Registry

É possível armazenar pacotes em um repositório do Artifact Registry. em seu projeto e configure seu ambiente para fazer instalações a partir dele.

Configure papéis e permissões:

  1. A conta de serviço do seu ambiente precisa ter o iam.serviceAccountUser.

  2. Verifique se a conta de serviço do Cloud Build tem permissões para leitura do repositório do Artifact Registry.

  3. Caso seu ambiente tenha restringido o acesso a outros serviços na projeto, por exemplo, se você usar o VPC Service Controls:

    1. Atribua permissões para acessar o repositório do Artifact Registry para a conta de serviço do ambiente em vez conta de serviço do Cloud Build.

    2. Verifique se a conectividade com o repositório do Artifact Registry está configurados no projeto.

Para instalar pacotes PyPI personalizados de um repositório do Artifact Registry:

  1. Crie um pip.conf. e inclua as seguintes informações no arquivo, se aplicável:

    • URL do repositório do Artifact Registry (no parâmetro index-url)
    • Acessar as credenciais do repositório
    • Opções de instalação do pip não padrão

    Para um repositório do Artifact Registry, anexe /simple/ ao repositório. URL:

    [global]
    index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
    
  2. (Opcional) Em alguns casos, talvez você queira buscar pacotes em várias repositórios, como quando o repositório do Artifact Registry contém alguns pacotes específicos que você deseja instalar e deseja instalar Todos os outros pacotes do PyPI:

    1. Configure um repositório virtual do Artifact Registry.
    2. Adicionar configuração para vários repositórios (incluindo PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  3. Faça upload desse arquivo pip.conf para o /config/pip/ no bucket do ambiente. Por exemplo, gs://us-central1-example-bucket/config/pip/pip.conf.

  4. Instale os pacotes usando um dos métodos disponíveis.

Instalar pacotes de um repositório particular

É possível hospedar um repositório privado na rede do seu projeto e configurar seu para instalar pacotes Python a partir dele.

Configure papéis e permissões:

  1. A conta de serviço do ambiente do Cloud Composer precisa têm o papel iam.serviceAccountUser.

  2. Se você instalar pacotes PyPI personalizados de um repositório no arquivo e esse repositório não tem um endereço IP público:

    1. Atribua permissões para acessar esse repositório para o conta de serviço.

    2. Verifique se a conectividade com esse repositório está configurada no seu projeto.

Para instalar pacotes de um repositório privado hospedado na rede do seu projeto:

  1. Crie um pip.conf. e inclua as seguintes informações no arquivo, se aplicável:

    • Endereço IP do repositório na rede do seu projeto
    • Acessar as credenciais do repositório
    • Opções de instalação do pip não padrão

    Exemplo:

    [global]
    index-url=https://192.0.2.10/
    
  2. (Opcional) Em alguns casos, talvez você queira buscar pacotes em várias em repositórios específicos, como quando o repositório privado contém os pacotes que deseja instalar e deseja instalar todos os outros pacotes do PyPI:

    1. Configure um repositório virtual do Artifact Registry.
    2. Adicionar configuração para vários repositórios (incluindo PyPI, se necessário) e defina a ordem em que o pip pesquisa os repositórios.
    3. Especifique o URL do repositório virtual no parâmetro index-url.
  3. (Opcional) Nas versões 2.2.1 e posteriores do Cloud Composer, é possível use um certificado personalizado ao instalar pacotes de sua repositório de dados. Para fazer isso, siga estas etapas:

    1. Faça upload do arquivo do certificado /config/pip/ no bucket do ambiente.

    2. Em pip.conf, especifique o nome do arquivo do certificado no cert . Não mude a pasta /etc/pip/.

      Exemplo:

      [global]
      cert =/etc/pip/example-certificate.pem
      
  4. Faça upload do arquivo pip.conf para o /config/pip/ no bucket do ambiente. Por exemplo, gs://us-central1-example-bucket/config/pip/pip.conf.

  5. Instale os pacotes usando um dos métodos disponíveis.

Instalar uma biblioteca local do Python

Para instalar uma biblioteca local ou interna do Python, faça o seguinte:

  1. Coloque as dependências em um subdiretório no diretório dags/ no bucket do ambiente. Para importar um módulo de um , cada subdiretório no caminho do módulo deve conter um arquivo de marcador de pacote __init__.py.

    No exemplo a seguir, a dependência é coin_module.py

    dags/
      use_local_deps.py  # A DAG file.
      dependencies/
        __init__.py
        coin_module.py
    
  2. Importe a dependência do arquivo de definição do DAG.

    Exemplo:

from dependencies import coin_module

Usar pacotes que dependem de bibliotecas de objetos compartilhados

Alguns pacotes PyPI dependem de bibliotecas no nível do sistema. Embora o Cloud Composer não seja compatível com as bibliotecas do sistema, é possível usar as seguintes opções:

  • Use o KubernetesPodOperator. Defina a imagem do operador como um imagem de build. Se você encontrar pacotes que falham durante a instalação devido a para uma dependência do sistema não atendida, use esta opção.

  • Faça o upload das bibliotecas de objetos compartilhados no bucket do seu ambiente. Se o PyPI foram instalados com sucesso, mas falham no ambiente de execução, use esta opção.

    1. Encontrar manualmente as bibliotecas de objetos compartilhados para a dependência do PyPI (um arquivo .so).
    2. Faça upload das bibliotecas de objetos compartilhados para a pasta /plugins no seu bucket do seu ambiente de execução.
    3. Defina a seguinte variável de ambiente: LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
.

Instalar pacotes em ambientes de IP particular

Nesta seção, explicamos como instalar pacotes em ambientes de IP particular.

Dependendo de como você configura o projeto, o ambiente pode não ter acesso à Internet pública.

Ambiente de IP privado com acesso à Internet pública

Se o ambiente de IP particular puder acessar a Internet pública, será possível instalar pacotes usando opções para ambientes de IP público:

Ambiente de IP privado sem acesso à Internet

Se o ambiente de IP particular não tiver acesso à Internet pública, é possível instalar pacotes usando um dos seguintes métodos:

  • Use um repositório PyPI privado hospedado no em uma rede VPC.
  • Use uma VM de servidor proxy na rede do seu projeto para se conectar em um repositório PyPI na Internet pública. Especifique o endereço do proxy em o arquivo /config/pip/pip.conf no bucket do ambiente.
  • Use um repositório do Artifact Registry como a única origem. de pacotes. Para fazer isso, redefina o parâmetro index-url, conforme descrito.
  • Se a política de segurança permitir o acesso a endereços IP externo da rede VPC, é possível ativar a instalação de pacotes a partir de repositórios na Internet pública configurando o Cloud NAT.
  • Coloque as dependências do Python na pasta /dags do bucket do ambiente. para instalá-los como bibliotecas locais. Isso pode não ser um é uma boa opção quando a árvore de dependências é grande.

Instalar em um ambiente de IP particular com restrições de local de recursos

Manter seu projeto de acordo com os requisitos de restrição de localização de recursos proíbe o uso de algumas ferramentas. Especificamente, o Cloud Build não pode ser utilizada para instalação do pacote, impedindo o acesso direto a na Internet pública.

Para instalar dependências do Python nesse ambiente, siga as orientações para um ambiente de IP privado sem acesso à Internet.

Instalar uma dependência do Python em um ambiente de IP particular em um perímetro do VPC Service Controls

Como proteger seu projeto Perímetro do VPC Service Controls resulta em mais restrições de segurança. Especificamente, o Cloud Build não pode ser utilizada para instalação do pacote, impedindo o acesso direto a na Internet pública.

Para instalar dependências do Python em um ambiente de IP privado dentro de um perímetro, faça o seguinte: siga as orientações para ambientes de IP privado sem acesso à Internet.

A seguir