Visão geral dos repositórios virtuais

Este documento apresenta uma visão geral dos repositórios virtuais. Para instruções sobre como criar um repositório virtual, consulte Criar repositórios virtuais.

As cotas e limites do Artifact Registry se aplicam a repositórios virtuais.

Como funcionam os repositórios virtuais

Os repositórios virtuais funcionam como um ponto de acesso único para fazer o download, instalar ou implantar artefatos no mesmo formato a partir de um ou mais repositórios upstream. Um repositório upstream pode ser um repositório padrão ou remoto do Artifact Registry.

Os outros modos de repositório são:

  • Padrão: o modo de repositório padrão. Faça upload ou publique artefatos, como pacotes particulares, diretamente em repositórios padrão. É possível fazer o download diretamente de repositórios padrão individuais, mas o acesso a grupos de repositórios com um repositório virtual simplifica a configuração da ferramenta.
  • Remote (somente repositórios de pacotes de linguagem): uma extração por cache para artefatos em repositórios públicos, como o Maven Central ou o PyPI. Ele atua como um proxy para os repositórios públicos, para que você tenha mais controle sobre as dependências externas.

Casos de uso e benefícios

Configuração de cliente mais simples

Para uma tarefa que requer apenas acesso de leitura aos repositórios, você só precisa configurar um único repositório do Artifact Registry para acessar artefatos armazenados em vários repositórios upstream.

Exemplo:

  • Um repositório virtual para pacotes Maven pode exibir pacotes Java particulares de um repositório padrão do Artifact Registry e pacotes Java públicos de um repositório remoto que armazena pacotes públicos em cache do Maven Central.
  • Um repositório virtual pode disponibilizar pacotes Python particulares de vários repositórios padrão upstream de propriedade de equipes diferentes. Cada equipe tem acesso de gravação ao repositório upstream, mas faz o download de pacotes de outras equipes usando o repositório virtual.
Resolução de dependência mais segura

É possível atribuir uma prioridade aos repositórios upstream para ter mais controle sobre qual repositório o Artifact Registry escolhe quando um artefato solicitado está em mais de um repositório upstream.

Algumas ferramentas, como a pip em Python, não fornecem uma maneira de controlar a ordem de pesquisa quando uma combinação de repositórios privados e públicos é configurada no cliente. Esse tipo de configuração é vulnerável a um ataque de confusão de dependência, em que alguém faz upload de uma nova versão de um pacote com código inválido para um repositório público com o objetivo de induzir os clientes a escolher a versão incorreta.

É possível usar repositórios remotos e virtuais juntos para mitigar esse risco:

  1. Crie um repositório remoto como um proxy para o repositório público.
  2. Crie um repositório padrão para seus pacotes privados.
  3. Crie um repositório virtual configurado para priorizar o repositório padrão caso haja uma versão do mesmo pacote nos dois repositórios.
  4. Configure gerenciadores de pacotes e outras ferramentas para ler somente no repositório virtual, para que a lógica do cliente não envolva a seleção do repositório.

Para saber mais sobre outras práticas recomendadas de gerenciamento de dependências, consulte Gerenciamento de dependências.

Como os repositórios virtuais selecionam um repositório upstream

Cada repositório upstream precisa ter uma prioridade configurada. A prioridade é um número inteiro que atua como um peso, não uma classificação. Isso significa que repositórios com um valor de prioridade mais alto são priorizados sobre aqueles com valores de prioridade mais baixos.

Quando você solicita um artefato que está em vários repositórios upstream, o Artifact Registry usa a seguinte lógica de priorização:

  • O repositório com o valor mais alto é priorizado. Por exemplo, um valor de 10 é tratado como prioridade mais alta que um valor de 1.
  • Se vários repositórios upstream tiverem a mesma prioridade, o artefato poderá ser disponibilizado a partir de qualquer um desses repositórios.

Quando você configura diretamente um cliente para pesquisar um repositório virtual e outros repositórios, ele ainda pode fazer o download de artefatos de repositórios fora do Artifact Registry.

Por exemplo, se você configurar a ferramenta pip em Python para pesquisar no PyPI e em um repositório virtual, o download do pacote poderá ser feito diretamente do PyPI, porque o pip sempre escolherá a versão mais recente de um pacote, independentemente do repositório de origem. Se pip estiver configurado para pesquisar apenas o repositório virtual, será possível controlar a prioridade de todos os repositórios upstream, incluindo um repositório remoto upstream que atue como proxy para PyPI.

Formatos de repositório compatíveis

É possível criar repositórios virtuais para os seguintes formatos de repositório do Artifact Registry do Artifact Registry:

Pacotes de idiomas:

Pacotes do SO:

Se você não conhece o Artifact Registry, poderá usar os guias de início rápido para aprender sobre a configuração de repositórios padrão para esses formatos.

Limitações

Além das cotas e limitações do Artifact Registry, os repositórios virtuais têm as seguintes limitações:

  • Os repositórios upstream precisam estar na mesma região ou multirregião que o repositório virtual, mas podem estar em projetos diferentes do Google Cloud.
  • Os repositórios virtuais Maven não permitem definir a política de versão como snapshot ou lançamento.

Limitações adicionais se aplicam aos repositórios do Apt e do Yum durante o pré-lançamento:

  • Só é possível usar repositórios padrão como repositórios upstream.

Os repositórios padrão apt e Yum atualizam o índice de pacotes de maneira assíncrona depois que um pacote é importado, enviado ou excluído. No caso de repositórios pequenos, gerar o índice novamente pode levar vários segundos. No caso de repositórios maiores, a reindexação pode levar vários minutos ou mais. Após a conclusão da reindexação, a alteração no repositório fica visível para os clientes Apt e Yum.

A seguir