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 os limites do Artifact Registry se aplicam aos repositórios virtuais.
Como funcionam os repositórios virtuais
Os repositórios virtuais atuam como um único ponto de acesso para baixar, instalar ou implantar artefatos no mesmo formato de um ou mais repositórios upstream. Um repositório upstream pode ser um repositório padrão ou remoto do Artifact Registry.
Casos de uso e benefícios
- Configuração de cliente mais simples
Para tarefas que exigem apenas acesso de leitura a repositórios, basta 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 veicular pacotes Java particulares de um repositório padrão do Artifact Registry e pacotes Java públicos de um repositório remoto que armazena em cache pacotes públicos do Maven Central.
- Um repositório virtual pode veicular pacotes Python particulares de vários repositórios padrão upstream pertencentes a 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ências 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
pipdo Python, não oferecem 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 ruim para um repositório público e engana os clientes para que escolham a versão ruim.É possível usar repositórios remotos e virtuais juntos para mitigar esse risco:
- Crie um repositório remoto como um proxy para o repositório público.
- Crie um repositório padrão para seus pacotes particulares.
- Crie um repositório virtual configurado para priorizar seu repositório padrão se uma versão do mesmo pacote existir nos dois repositórios.
- Configure gerenciadores de pacotes e outras ferramentas para ler apenas do repositório virtual, para que a lógica do cliente não esteja envolvida na 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 funciona como uma ponderação, não como uma classificação. Isso significa que os repositórios com um valor numérico de prioridade mais alto são priorizados em relação aos repositórios 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 de maior prioridade do que um valor de1. - Se vários repositórios upstream tiverem a mesma prioridade, o artefato poderá ser veiculado de qualquer um deles.
Também recomendamos incluir a versão do artefato na solicitação. Assim, o cliente retorna o repositório upstream de maior prioridade que contém a versão do artefato solicitada. Se você não especificar a versão do artefato, o cliente poderá retornar a versão mais recente, independente da prioridade do repositório.
Quando você configura um cliente diretamente 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 do Python para pesquisar o PyPI e um repositório virtual, seu pacote poderá ser baixado diretamente do PyPI porque pip sempre vai escolher a versão mais recente de um pacote, independente do repositório de origem. Se pip estiver configurado para pesquisar apenas o repositório
virtual, você poderá controlar a prioridade de todos os repositórios upstream,
incluindo um repositório remoto upstream que atua como um proxy para o PyPI.
Formatos de repositório compatíveis
É possível criar repositórios virtuais para os seguintes formatos de repositório do Artifact Registry:
Pacotes de idioma:
Pacotes do SO:
Se você não conhece o Artifact Registry, use os guias de início rápido para aprender a configurar 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:
- Como os repositórios virtuais não armazenam dados, eles aparecem vazios ao executar o
gcloud artifacts docker images liste ao visualizar o repositório no console do Google Cloud . - Os repositórios upstream padrão do Artifact Registry precisam estar na mesma região ou multirregião que o repositório virtual, mas podem estar em projetos Google Cloud diferentes.
Os repositórios virtuais do Maven não permitem definir a política de versão como snapshot ou release.
Os repositórios upstream do Apt e do Yum precisam ser repositórios padrão do Artifact Registry.
Os repositórios padrão do Apt e do Yum atualizam o índice de pacotes de forma assíncrona depois que um pacote é importado, enviado ou excluído. Para repositórios pequenos, a regeneração do índice pode levar vários segundos. Para repositórios maiores, a reindexação pode levar vários minutos ou mais. Depois que a reindexação for concluída, a mudança no repositório vai ficar visível para os clientes Apt e Yum.
Outros modos de repositório
Os outros modos de repositório são:
- Padrão: o modo de repositório padrão. Você faz upload ou publica artefatos, como pacotes particulares, diretamente em repositórios padrão. Embora seja possível fazer o download diretamente de repositórios padrão individuais, acessar grupos de repositórios com um repositório virtual simplifica a configuração da ferramenta.
- Remoto: um repositório que atua como um proxy para uma fonte upstream, armazenando pacotes em cache no Artifact Registry depois que eles são baixados da fonte upstream pela primeira vez. Na próxima vez que você solicitar a mesma versão do pacote, o Artifact Registry vai fornecer a cópia em cache.
- Conector (prévia): um repositório que atua como um proxy para uma fonte upstream, mas não armazena artefatos em cache no Artifact Registry. Em vez disso, todas as solicitações são feitas à origem upstream. Os repositórios de conectores são úteis se você precisar de capacidade de auditoria completa da fonte upstream ou tiver políticas que impeçam o armazenamento em cache de artefatos.
A seguir
- Criar repositórios virtuais.
- Leia a visão geral do repositório para saber mais sobre os repositórios do Artifact Registry.