Ir ao conteúdo

Utilizando ECR como Cache Repository para imagens públicas

O gerenciamento eficiente de imagens é essencial para implantações fluídas e ciclos de desenvolvimento contínuo, e confiar apenas no Docker Hub para baixar imagens públicas pode levar a limitação de pedidos e downloads mais lentos.

O Amazon Elastic Container Registry (ECR) oferece uma solução robusta, servindo como um repositório de cache para imagens públicas de repositórios públicos como Docker Hub, GitHub Container Registry e outros. O uso do ECR não só melhora o desempenho e a confiabilidade no download de imagens, mas também oferece recursos avançados de segurança e integração com os serviços da AWS. Na postagem de hoje, vamos explorar como configurar e utilizar o Amazon ECR como um repositório de cache para simplificar seus processos de gerenciamento de imagens de container.

Visão geral da solução

O Amazon Elastic Container Registry (ECR) é um repositório de imagens Docker totalmente gerenciado que simplifica o armazenamento, o gerenciamento e a implantação de imagens de container de forma segura e confiável. Nesta solução, usaremos o ECR como repositório de cache para imagens de repositórios públicos originalmente armazenadas no Docker Hub, eliminando a necessidade de trabalho manual, e permitindo termos acesso a vantages como:

  • Melhor desempenho no processo de download das imagens e maiores limites na quantidade de downloads.
  • Segurança aprimorada com suporte para scan das imagens para detectar vulnerabilidade, bem como acesso privado utilizando AWS Private Link
  • Alta disponibilidade de um serviço gerenciado que oferece replicação entre regiões
  • Integração transparente com serviços AWS como ECS, EKS, App Runner e Code Pipeline.

Pre-requisitos

Passo a passo

Passo 1: Criando as credenciais no DockerHub

Va até https://app.docker.com/ > Account Settings > Personal Access Tokens > Create access token com a permissão Read-only.

Ref: https://docs.docker.com/security/for-developers/access-tokens/

Passo 2: Criar um segredo no AWS Secrets Manager

ECR utiliza segredos armazenados em AWS Secrets Manager para autenticar no Docker Hub. O segredo deve conter o prefixo ecr-pullthroughcache/, caso contrário, o ECR não o encontrará no processo de sincronização das imagens. Para criar um novo segredo, utilize o comando a seguir:

aws secretsmanager create-secret \
    --name ecr-pullthroughcache/<SECRET_NAME> \
    --secret-string '{"username": "<USERNAME>", "accessToken": "<PAT>" }'

Passo 3: Configurar a regra de Cache

A funcionalidade regra de cache permite que você configure a integração do ECR com o repositório público. Neste passo, iremos definir a URL utilizada para sincronizar as imagen, o segredo criado no último passo, e o prefixo que utilizaremos para o nome dos repositórios das imagens. Usando AWS CLI, você pode criar uma regra de cache seguindo este exemplo:

aws ecr create-pull-through-cache-rule \
    --ecr-repository-prefix <ECR_REPO_PREFIX> \
    --upstream-registry-url registry-1.docker.io \
    --credential-arn arn:aws:secretsmanager:us-east-1:<AWS_ACCOUNT_ID>:secret:ecr-pullthroughcache/<SECRET_ARN>

Para validar se a regra está funcional, rode o comando a seguir:

aws ecr validate-pull-through-cache-rule \
     --ecr-repository-prefix <ECR_REPO_PREFIX> \
     --region <AWS_REGION>

A resposta deverá conter a propriedade isValid: true, como na imagem:

Passo 4: Autenticando no ECR e baixando as imagens

Neste momento, temos tudo configurado para começar a baixar imagens publicas utilizando o repositório do ECR. Para isto, devemos autenticar no ECR com o comando a seguir:

aws ecr get-login-password \
    --region <AWS_REGION> | \
    docker login --username AWS \
    --password-stdin <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com

Com o login concluído com sucesso, você pode executar os comandos de docker pull apontando para a imagem púbica:

## Use /library/ for Docker Hub Offical images 
docker pull <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPO_PREFIX>/library/<IMAGE_NAME>:<IMAGE_TAG>

## OR use /<repository_name> for non official images
docker pull <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<ECR_REPO_PREFIX>/<REPOSITORY_NAME>/<IMAGE_NAME>:<IMAGE_TAG>

Assim que o download da imagem estiver concluído, você verá um novo repositório criado no console com o prefixo configurado anteriormente, e o nome da imagem que você acabou de baixar:

Demonstração completa:

Conclusão

Utilizar ECR como repositório de cache para imagens Docker pode representar uma grande melhoria no processo de gestão de imagens, com melhoras em performance, segurança e disponibilidade. Com fácil configuração e sem custo adicional (além do custo normal do ECR), o recurso torna-se indispensável se você utiliza imagens públicas diariamente.


Descubra mais sobre contains(cloud)

Assine para receber nossas notícias mais recentes por e-mail.

Publicado emAWS

Seja o primeiro a comentar

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *