Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1
En esta página, se describe cómo instalar paquetes de Python para tu entorno de Cloud Composer.
Acerca de los paquetes en Cloud Composer
En esta sección, se explica cómo funcionan los paquetes de PyPI en Cloud Composer.
Paquetes de PyPI preinstalados y personalizados en imágenes de Cloud Composer
Las imágenes de Cloud Composer contienen paquetes de PyPI preinstalados y personalizados.
Los paquetes de PyPI preinstalados son paquetes que se incluyen en la imagen de Cloud Composer de tu entorno. Cada imagen de Cloud Composer contiene paquetes de PyPI específicos para tu versión de Cloud Composer y Airflow.
Los paquetes PyPI personalizados son paquetes que puedes instalar en tu entorno, además de los paquetes preinstalados.
Opciones para administrar paquetes de PyPI para entornos de Cloud Composer
Opción | Usa si |
---|---|
Cómo instalar desde PyPI | La forma predeterminada de instalar paquetes en tu entorno |
Cómo instalar desde un repositorio con una dirección IP pública | El paquete se aloja en un repositorio de paquetes que no es PyPI. Este repositorio tiene una dirección IP pública |
Cómo instalar desde un repositorio de Artifact Registry | El paquete se aloja en un repositorio de Artifact Registry |
Cómo instalar desde un repositorio en la red de tu proyecto | Tu entorno no tiene acceso a Internet pública. El paquete se aloja en un repositorio de paquetes en la red de tu proyecto. |
Instala como una biblioteca local de Python |
No se puede encontrar el paquete en PyPI, y la biblioteca no tiene dependencias externas, como dist-packages . |
Cómo instalar un complemento | El paquete proporciona funcionalidad específica del complemento, como la modificación de la interfaz web de Airflow. |
PythonVirtualenvOperator | No quieres que el paquete se instale en todos los trabajadores de Airflow o que la dependencia entre en conflicto con los paquetes preinstalados. El paquete se puede encontrar en PyPI y no tiene dependencias externas. |
KubernetesPodOperator y operadores de GKE |
Necesitas dependencias externas que no se pueden instalar desde pip , como dist-packages , o que se encuentran en un servidor PIP interno. Esta opción requiere más configuración y mantenimiento. Considera esta opción solo si las demás no funcionan. |
Antes de comenzar
Debes tener una función que pueda activar las operaciones de actualización del entorno. Además, la cuenta de servicio del entorno debe tener un rol que tenga suficientes permisos para realizar operaciones de actualización.
Si tu entorno está protegido por un perímetro de Controles del servicio de VPC, antes de instalar las dependencias de PyPI, debes otorgar identidades de usuario adicionales con acceso a los servicios que el perímetro de servicio protege y habilitar la compatibilidad para un repositorio privado de PyPI.
Los requisitos deben seguir el formato especificado en PEP-508 donde cada requisito se especifica en minúsculas y consta del nombre del paquete con extras opcionales y especificadores de versión.
Las actualizaciones de dependencia de PyPI generan imágenes de Docker en Artifact Registry.
Si un conflicto de dependencia hace que la actualización falle, tu entorno continuará ejecutándose con las dependencias existentes. Si la operación tiene éxito, puedes comenzar a usar las dependencias de Python recién instaladas en tus DAG.
Cómo ver la lista de paquetes de PyPI
Puedes obtener la lista de paquetes de tu entorno en varios formatos.
Cómo ver los paquetes preinstalados
Para ver la lista de paquetes preinstalados de tu entorno, consulta la lista de paquetes de la imagen de Cloud Composer de tu entorno.
Ver todos los paquetes
Para ver todos los paquetes (preinstalados y personalizados) de tu entorno, haz lo siguiente:
gcloud
El siguiente comando de la CLI de gcloud muestra el resultado del comando python -m pip list
para un trabajador de Airflow en tu entorno.
Puedes usar el argumento --tree
para obtener el resultado del comando python -m pipdeptree --warn
.
gcloud beta composer environments list-packages \
ENVIRONMENT_NAME \
--location LOCATION
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.
Cómo ver paquetes personalizados de PyPI
Console
En la consola de Google Cloud, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre de tu entorno. Se abrirá la página Detalles del entorno.
Ve a la pestaña PyPI Packages.
gcloud
gcloud composer environments describe ENVIRONMENT_NAME \
--location LOCATION \
--format="value(config.softwareConfig.pypiPackages)"
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.
Instala paquetes personalizados en un entorno de Cloud Composer
En esta sección, se describen diferentes métodos para instalar paquetes personalizados en tu ambiente.
Instala paquetes de PyPI
Se puede instalar un paquete desde el índice de paquetes de Python si no tiene dependencias externas ni entra en conflicto con los paquetes preinstalados.
Haz lo siguiente para agregar, actualizar o borrar las dependencias de Python de tu entorno:
Console
En la consola de Google Cloud, ve a la página Entornos.
En la lista de entornos, haz clic en el nombre de tu entorno. Se abrirá la página Detalles del entorno.
Ve a la pestaña Paquetes de PyPI.
Haz clic en Editar.
Haz clic en Agregar paquete.
En la sección Paquetes de PyPI, especifica los nombres de los paquetes, con especificadores de versión y extras opcionales.
Por ejemplo:
scikit-learn
scipy
,>=0.13.3
nltk
,[machine_learning]
Haz clic en Guardar.
gcloud
La CLI de gcloud tiene varios argumentos para trabajar con paquetes PyPI personalizados:
--update-pypi-packages-from-file
reemplaza todos los paquetes PyPI personalizados existentes por los paquetes especificados. Se quitarán los paquetes que no especifiques.--update-pypi-package
actualiza o instala un paquete.--remove-pypi-packages
quita los paquetes especificados.--clear-pypi-packages
quita todos los paquetes.
Cómo instalar requisitos desde un archivo
El archivo requirements.txt
debe tener cada especificador de requisitos en una línea independiente.
Por ejemplo:
scipy>=0.13.3
scikit-learn
nltk[machine_learning]
Actualiza tu entorno y especifica el archivo requirements.txt
en el argumento --update-pypi-packages-from-file
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-packages-from-file requirements.txt
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.
Cómo instalar un paquete
Actualiza tu entorno y especifica el paquete, la versión y los elementos adicionales en el argumento --update-pypi-package
.
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--update-pypi-package PACKAGE_NAMEEXTRAS_AND_VERSION
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.PACKAGE_NAME
por el nombre del paquete.EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir las versiones y los elementos adicionales, especifica un valor vacío.
Ejemplo:
gcloud composer environments update example-environment \
--location us-central1 \
--update-pypi-package "scipy>=0.13.3"
Cómo quitar paquetes
Actualiza tu entorno y especifica los paquetes que deseas borrar en el argumento --remove-pypi-packages
:
gcloud composer environments update ENVIRONMENT_NAME \
--location LOCATION \
--remove-pypi-packages PACKAGE_NAMES
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.PACKAGE_NAMES
por una lista de paquetes separados por comas.
Ejemplo:
gcloud composer environments update example-environment \
--location us-central1 \
--remove-pypi-packages scipy,scikit-learn
API
Realiza una solicitud a la API de environments.patch
.
En esta solicitud, realiza lo siguiente:
En el parámetro
updateMask
, especifica la máscara:- Usa la máscara
config.softwareConfig.pypiPackages
para reemplazar todos los paquetes existentes por los paquetes especificados. Se borrarán los paquetes que no especifiques. - Usa
config.softwareConfig.envVariables.PACKAGE_NAME
para agregar o actualizar un paquete específico. Para agregar o actualizar varios paquetes, especifica varias máscaras con comas.
- Usa la máscara
En el cuerpo de la solicitud, especifica los paquetes y los valores de las versiones y los extras:
{ "config": { "softwareConfig": { "pypiPackages": { "PACKAGE_NAME": "EXTRAS_AND_VERSION" } } } }
Reemplaza lo siguiente:
PACKAGE_NAME
por el nombre del paquete.EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir las versiones y los elementos adicionales, especifica un valor vacío.- Para agregar más de un paquete, agrega entradas adicionales para los paquetes a
pypiPackages
.
Ejemplo:
// 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
El bloque pypi_packages
en el bloque software_config
especifica los paquetes.
resource "google_composer_environment" "example" {
name = "ENVIRONMENT_NAME"
region = "LOCATION"
config {
software_config {
pypi_packages = {
PACKAGE_NAME = "EXTRAS_AND_VERSION"
}
}
}
}
Reemplaza lo siguiente:
ENVIRONMENT_NAME
por el nombre del entorno.LOCATION
por la región en la que se encuentra el entorno.PACKAGE_NAME
por el nombre del paquete.EXTRAS_AND_VERSION
con el especificador opcional de versión y extras. Para omitir las versiones y los elementos adicionales, especifica un valor vacío.- Para agregar más de un paquete, agrega entradas adicionales para los paquetes a
pypi_packages
.
Ejemplo:
resource "google_composer_environment" "example" {
name = "example-environment"
region = "us-central1"
config {
software_config {
pypi_packages = {
scipy = ">=1.10.3"
scikit-learn = ""
nltk = "[machine_learning]"
}
}
}
}
Instala paquetes desde un repositorio público
Puedes instalar paquetes alojados en otros repositorios que tengan una dirección IP pública.
Los paquetes deben estar configurados correctamente para que la herramienta pip
predeterminada pueda instalarlos.
Para realizar la instalación desde un repositorio de paquetes que tiene una dirección pública, sigue estos pasos:
Crea un archivo pip.conf y, además, incluye la siguiente información en el archivo, si corresponde:
- URL del repositorio (en el parámetro
index-url
) - Credenciales de acceso del repositorio
- Opciones de instalación de
pip
no predeterminadas
Ejemplo:
[global] index-url=https://example.com/
- URL del repositorio (en el parámetro
(Opcional) En algunos casos, es posible que desees recuperar paquetes de varios repositorios, por ejemplo, cuando el repositorio público contiene algunos paquetes específicos que deseas instalar y deseas instalar todos los demás paquetes de PyPI:
- Configura un repositorio virtual de Artifact Registry.
- Agrega la configuración de varios repositorios (incluidos PyPI, si es necesario)
y define el orden en que
pip
busca los repositorios. - Especifica la URL del repositorio virtual en el parámetro
index-url
.
Sube el archivo pip.conf a la carpeta
/config/pip/
en el bucket de tu entorno.Instala paquetes con uno de los métodos disponibles.
Instala paquetes desde un repositorio de Artifact Registry
Puedes almacenar paquetes en un repositorio de Artifact Registry en tu proyecto y configurar tu entorno para instalar desde él.
Configura roles y permisos:
Asegúrate de que la cuenta de servicio de Cloud Build tenga permisos para leer desde tu repositorio de Artifact Registry.
Otorga permisos adicionales para instalar paquetes de los repositorios de Artifact Registry a la cuenta de servicio de tu entorno, como se describe en Control de acceso.
Si tu entorno tiene acceso restringido a otros servicios de tu proyecto, por ejemplo, si usas Controles del servicio de VPC, haz lo siguiente:
Asigna permisos de acceso al repositorio de Artifact Registry a la cuenta de servicio del entorno en lugar de a la cuenta de servicio de Cloud Build.
Asegúrate de que la conectividad al repositorio de Artifact Registry esté configurada en tu proyecto.
Para instalar paquetes de PyPI personalizados desde un repositorio de Artifact Registry, sigue estos pasos:
Crea un archivo pip.conf y, además, incluye la siguiente información en el archivo, si corresponde:
- URL del repositorio de Artifact Registry (en el parámetro
index-url
) - Credenciales de acceso del repositorio
- Opciones de instalación de
pip
no predeterminadas
Para un repositorio de Artifact Registry, agrega
/simple/
a la URL del repositorio:[global] index-url = https://us-central1-python.pkg.dev/example-project/example-repository/simple/
- URL del repositorio de Artifact Registry (en el parámetro
(Opcional) En algunos casos, es posible que desees recuperar paquetes de varios repositorios, por ejemplo, cuando tu repositorio de Artifact Registry contiene algunos paquetes específicos que deseas instalar y deseas instalar todos los demás paquetes de PyPI:
- Configura un repositorio virtual de Artifact Registry.
- Agrega la configuración de varios repositorios (incluidos PyPI, si es necesario)
y define el orden en que
pip
busca los repositorios. - Especifica la URL del repositorio virtual en el parámetro
index-url
.
Sube este archivo pip.conf a la carpeta
/config/pip/
en el bucket de tu entorno. Por ejemplo:gs://us-central1-example-bucket/config/pip/pip.conf
.Instala paquetes con uno de los métodos disponibles.
Instala paquetes desde un repositorio privado
Puedes alojar un repositorio privado en la red de tu proyecto y configurar tu entorno para instalar paquetes de Python desde él.
Configura roles y permisos:
Si instalas paquetes de PyPI personalizados desde un repositorio en la red de tu proyecto y este repositorio no tiene una dirección IP pública, haz lo siguiente:
Asigna permisos de acceso a este repositorio a la cuenta de servicio del ambiente.
Asegúrate de que la conectividad a este repositorio esté configurada en tu proyecto.
Otorga permisos adicionales para instalar paquetes de repositorios privados en la cuenta de servicio de tu entorno, como se describe en Control de acceso.
Para instalar paquetes desde un repositorio privado alojado en la red de tu proyecto, sigue estos pasos:
Crea un archivo pip.conf y, además, incluye la siguiente información en el archivo, si corresponde:
- Dirección IP del repositorio en la red de tu proyecto
- Credenciales de acceso del repositorio
- Opciones de instalación de
pip
no predeterminadas
Ejemplo:
[global] index-url=https://192.0.2.10/
(Opcional) En algunos casos, es posible que desees recuperar paquetes de varios repositorios, por ejemplo, cuando el repositorio privado contiene algunos paquetes específicos que deseas instalar y deseas instalar todos los demás paquetes de PyPI:
- Configura un repositorio virtual de Artifact Registry.
- Agrega la configuración de varios repositorios (incluidos PyPI, si es necesario)
y define el orden en que
pip
busca los repositorios. - Especifica la URL del repositorio virtual en el parámetro
index-url
.
Sube el archivo pip.conf a la carpeta
/config/pip/
en el bucket de tu entorno. Por ejemplo:gs://us-central1-example-bucket/config/pip/pip.conf
.Instala paquetes con uno de los métodos disponibles.
Instala una biblioteca local de Python
Para instalar una biblioteca interna o local de Python, sigue estos pasos:
Coloca las dependencias dentro de un subdirectorio en la carpeta
dags/
del bucket de tu entorno. Para importar un módulo desde un subdirectorio, cada uno de los subdirectorios de la ruta del módulo debe contener un archivo de marcador de paquete__init__.py
.En el siguiente ejemplo, la dependencia es
coin_module.py
:dags/ use_local_deps.py # A DAG file. dependencies/ __init__.py coin_module.py
Importa la dependencia desde el archivo de definición de DAG.
Por ejemplo:
Usa paquetes que dependen de bibliotecas de objetos compartidos
Algunos paquetes de PyPI dependen de las bibliotecas a nivel del sistema. Si bien Cloud Composer no es compatible con las bibliotecas del sistema, puedes usar las siguientes opciones:
Utiliza KubernetesPodOperator. Establece la imagen del operador en una imagen de compilación personalizada. Si experimentas paquetes que fallan durante la instalación debido a una dependencia no satisfecha del sistema, usa esta opción.
Sube las bibliotecas de objetos compartidos al bucket de tu entorno. Si tus paquetes de PyPI se instalaron correctamente, pero fallan en el entorno de ejecución, usa esta opción.
- Busca manualmente las bibliotecas de objetos compartidos para la dependencia de PyPI (un archivo .so).
- Sube las bibliotecas de objetos compartidos a la carpeta
/plugins
en el bucket de tu entorno. - Establece la siguiente variable de entorno:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/airflow/gcs/plugins
Instala paquetes en entornos de IP privada
Según cómo configures tu proyecto, es posible que tu entorno no tenga acceso a Internet público.
Entorno de IP privada con acceso a Internet público
Si tu entorno de IP privada puede acceder a Internet público, puedes instalar paquetes con las opciones para entornos de IP pública:
- Instala desde PyPI. En este caso, no se requiere una configuración especial. Sigue el procedimiento que se describe en Cómo instalar un paquete desde PyPI.
- Instala desde un repositorio con una dirección IP pública. Sigue el procedimiento que se describe en Cómo instalar un paquete desde un repositorio privado.
- Instalar desde un repositorio de PyPI privado alojado en la red de tu proyecto
Entorno de IP privada sin acceso a Internet
Si tu entorno de IP privada no tiene acceso a Internet público, puedes instalar paquetes de una de las siguientes maneras:
- Usar un repositorio de PyPI privado alojado en la red de tu proyecto
- Usa una VM de servidor proxy en la red de tu proyecto para conectarte a un repositorio de PyPI en la Internet pública. Especifica la dirección del proxy en el archivo
/config/pip/pip.conf
en el bucket de tu entorno. - Usa un repositorio de Artifact Registry como la única fuente de paquetes. Para ello, redefine el parámetro
index-url
, como se describe. - Si tu política de seguridad permite el acceso a direcciones IP externas desde tu red de VPC, puedes habilitar la instalación de paquetes desde repositorios en la Internet pública configurando Cloud NAT.
- Coloca las dependencias de Python en la carpeta
/dags
del bucket de tu entorno para instalarlas como bibliotecas locales. Esta podría no ser una buena opción si el árbol de dependencias es grande.
Instala en un entorno de IP privada con restricciones de ubicación de recursos
Mantener tu proyecto alineado con los requisitos de la Restricción de ubicación de recursos prohíbe el uso de algunas herramientas. En particular, Cloud Build no se puede usar para la instalación de paquetes, lo que evita el acceso directo a los repositorios en la Internet pública.
Para instalar dependencias de Python en un entorno de este tipo, sigue las instrucciones para entornos de IP privada sin acceso a Internet.
Instala una dependencia de Python en un entorno de IP privada en un perímetro de Controles del servicio de VPC
Proteger tu proyecto con un perímetro de Controles del servicio de VPC genera más restricciones de seguridad. En particular, Cloud Build no se puede usar para la instalación de paquetes, lo que evita el acceso directo a los repositorios en la Internet pública.
Para instalar dependencias de Python para un entorno de IP privada dentro de un perímetro, sigue las instrucciones para entornos de IP privada sin acceso a Internet.
¿Qué sigue?
- Soluciona problemas relacionados con la instalación de paquetes
- Soluciona problemas de actualizaciones