Descripción general de los repositorios virtuales

En este documento, se proporciona una descripción general de los repositorios virtuales. Para obtener instrucciones sobre cómo crear un repositorio virtual, consulta Crea repositorios virtuales.

Las cuotas y los límites de Artifact Registry se aplican a los repositorios virtuales.

Cómo funcionan los repositorios virtuales

Los repositorios virtuales actúan como un único punto de acceso para descargar, instalar o implementar artefactos en el mismo formato desde uno o más repositorios ascendentes. Un repositorio upstream puede ser un repositorio remoto o estándar de Artifact Registry.

Los otros modos de repositorio son los siguientes:

  • Estándar: El modo de repositorio predeterminado. Puedes subir o publicar artefactos como paquetes privados directamente en los repositorios estándar. Aunque puedes descargar directamente desde repositorios estándar individuales, acceder a grupos de repositorios con un repositorio virtual simplifica la configuración de las herramientas.
  • Remote (solo repositorios de paquetes de lenguajes): Una extracción a través de la caché de artefactos en repositorios públicos, como Maven Central o PyPI. Actúa como un proxy para los repositorios públicos, de manera que tengas más control sobre las dependencias externas.

Casos de uso y beneficios

Configuración de cliente más simple

Para las tareas que solo requieren acceso de lectura a los repositorios, solo debes configurar un único repositorio de Artifact Registry para acceder a los artefactos almacenados en varios repositorios upstream.

Por ejemplo:

  • Un repositorio virtual para paquetes de Maven puede entregar paquetes privados de Java desde un repositorio estándar de Artifact Registry y paquetes de Java públicos desde un repositorio remoto que almacena en caché paquetes públicos de Maven Central.
  • Un repositorio virtual puede entregar paquetes privados de Python desde varios repositorios estándar ascendentes que son propiedad de diferentes equipos. Cada equipo tiene acceso de escritura a su repositorio upstream, pero descarga paquetes de otros equipos mediante el repositorio virtual.
Resolución de dependencias más segura

Puedes asignar una prioridad a los repositorios ascendentes para tener más control sobre el repositorio que Artifact Registry elige cuando un artefacto solicitado está en más de un repositorio upstream.

Algunas herramientas, como la herramienta pip de Python, no proporcionan una forma de controlar el orden de búsqueda cuando se configura una combinación de repositorios privados y públicos en el cliente. Este tipo de configuración es vulnerable a un ataque de confusión de dependencias, en el que alguien sube una versión nueva de un paquete con código incorrecto a un repositorio público para engañar a los clientes para que elijan la versión incorrecta.

Puedes usar repositorios remotos y virtuales juntos para mitigar este riesgo:

  1. Crea un repositorio remoto como un proxy para el repositorio público.
  2. Crea un repositorio estándar para tus paquetes privados.
  3. Crea un repositorio virtual configurado para priorizar el repositorio estándar si existe una versión del mismo paquete en ambos repositorios.
  4. Configura administradores de paquetes y otras herramientas para leer solo desde el repositorio virtual, de modo que la lógica del cliente no implique la selección del repositorio.

Si quieres obtener más información sobre otras prácticas recomendadas para la administración de dependencias, consulta Administración de dependencias.

Cómo seleccionan los repositorios virtuales un repositorio upstream

Cada repositorio upstream debe tener una prioridad configurada. La prioridad es un número entero que actúa como un peso, no como una clasificación. Esto significa que los repositorios con un valor de prioridad más alto tienen prioridad sobre los repositorios con valores de prioridad más bajos.

Cuando solicitas un artefacto que se encuentra en varios repositorios ascendentes, Artifact Registry usa la siguiente lógica de priorización:

  • Se prioriza el repositorio con el valor más alto. Por ejemplo, un valor de 10 se trata como una prioridad más alta que un valor de 1.
  • Si varios repositorios ascendentes tienen la misma prioridad, el artefacto se puede entregar desde cualquiera de esos repositorios.

Cuando configuras directamente un cliente para que busque en un repositorio virtual y repositorios adicionales, es posible que el cliente siga descargando artefactos de repositorios fuera de Artifact Registry.

Por ejemplo, si configuras la herramienta pip de Python para buscar en PyPI y en un repositorio virtual, tu paquete puede descargarse directamente desde PyPI, ya que pip siempre elegirá la versión más reciente de un paquete, sin importar el repositorio del que provenga. Si pip está configurado para buscar solo en el repositorio virtual, puedes controlar la prioridad de todos los repositorios ascendentes, incluido un repositorio remoto ascendente que actúa como proxy para PyPI.

Formatos compatibles de repositorio

Puedes crear repositorios virtuales para los siguientes formatos de repositorio de Artifact Registry en Artifact Registry:

Paquetes de idiomas:

Paquetes de SO:

Si es la primera vez que usas Artifact Registry, puedes usar las guías de inicio rápido a fin de aprender a configurar repositorios estándar para estos formatos.

Limitaciones

Además de las cuotas y limitaciones de Artifact Registry, los repositorios virtuales tienen las siguientes limitaciones:

  • Los repositorios upstream deben estar en la misma región o multirregión que el repositorio virtual, pero pueden estar en diferentes proyectos de Google Cloud.
  • Los repositorios virtuales de Maven no permiten configurar la política de versiones para realizar una instantánea o lanzar.

Se aplican limitaciones adicionales a los repositorios Apt y Yum durante la versión preliminar:

  • Solo puedes usar repositorios estándar como repositorios ascendentes.

Los repositorios estándar de Apt y Yum actualizan el índice de paquetes de forma asíncrona después de que se importa, sube o borra un paquete. En el caso de los repositorios pequeños, la regeneración del índice puede tardar varios segundos. Para repositorios más grandes, la reindexación puede tardar varios minutos o más. Una vez que se completa la reindexación, el cambio en el repositorio es visible para los clientes Apt y Yum.

¿Qué sigue?