Praticar de graça

🐳Entenda o Amazon ECR

O ECR (Elastic Container Registry) é o armário das imagens de contêiner. Você constrói a imagem da sua aplicação na sua máquina (docker build), envia pro ECR (docker push), e o ECS ou o EKS baixa dali pra rodar. É como o S3, mas especializado em imagens Docker.

Pra que serve

Guardar de forma privada e segura as imagens que seus contêineres usam, integradas ao IAM e aos serviços de contêiner da AWS. Sem um registro, não tem de onde o ECS/EKS puxar o que executar.

Onde se usa no mundo real

Vocabulário

Repositório
onde as imagens de UMA aplicação ficam (com suas várias versões/tags).
Imagem
o pacote com a aplicação e tudo que ela precisa pra rodar. Construída fora da AWS (docker build).
URI do repositório
o endereço da imagem que o ECS/EKS usa: <conta>.dkr.ecr.<região>.amazonaws.com/nome.
get-login-password
a senha temporária que o docker usa pra autenticar no ECR.
💰 Como cobra: Você paga pelo armazenamento das imagens (GB/mês) e pela transferência. Guardar algumas imagens custa muito pouco.

Comandos que você aprende nesta trilha

Cada um deles roda de verdade no terminal do CLImb, com a mesma saída e as mesmas mensagens de erro que a AWS devolve.

aws ecr describe-repositories

aws ecr describe-repositories

aws ecr describe-repositories

aws ecr create-repository

aws ecr create-repository

aws ecr create-repository --repository-name loja-imagens

aws ecr get-login-password

aws ecr get-login-password

aws ecr get-login-password
aws ecr get-login-password | docker login --username AWS --password-stdin <conta>.dkr.ecr.<regiao>.amazonaws.com

aws ecr list-images

aws ecr list-images

aws ecr list-images --repository-name loja-imagens

aws ecr describe-images

USO

aws ecr describe-images --repository-name loja-imagens [--image-ids imageTag=v1.0]

aws ecr put-image-scanning-configuration

USO

aws ecr put-image-scanning-configuration --repository-name loja-imagens \
--image-scanning-configuration scanOnPush=true

aws ecr start-image-scan

USO

aws ecr start-image-scan --repository-name loja-imagens --image-id imageTag=v1.0

aws ecr describe-image-scan-findings

USO

aws ecr describe-image-scan-findings --repository-name loja-imagens \
--image-id imageTag=v1.2

aws ecr put-image-tag-mutability

USO

aws ecr put-image-tag-mutability --repository-name loja-imagens \
--image-tag-mutability IMMUTABLE

aws ecr start-lifecycle-policy-preview

USO

aws ecr start-lifecycle-policy-preview --repository-name loja-imagens \
--lifecycle-policy-text file://ciclo-imagens.json

aws ecr put-lifecycle-policy

USO

aws ecr put-lifecycle-policy --repository-name loja-imagens \
--lifecycle-policy-text file://ciclo-imagens.json

aws ecr delete-repository

aws ecr delete-repository

aws ecr delete-repository --repository-name loja-imagens [--force]

O que você pratica (18 atividades)

Cada atividade é um pedido de trabalho, do jeito que ele chega no dia a dia — você resolve digitando os comandos, não escolhendo alternativa.

O armário de imagens

Antes de rodar um contêiner na AWS, a imagem dele precisa estar guardada em algum lugar — esse lugar é o ECR. Comece listando os repositórios.

Crie o repositório

Crie o repositório loja-imagens (é onde a imagem da aplicação vai morar).

O repositório que vai te acompanhar até o fim

O time de pagamentos vai publicar a API de checkout em contêiner, e esse repositório é seu de agora até o fim da trilha: a cada coisa nova que você aprender, você volta e melhora ele. Crie ele seguindo a convenção da empresa, que separa por time: pagamentos/checkout-api. <small>(sim, com barra: nome de repositório no ECR pode ter prefixo de time)</small>

A senha do Docker

Pra enviar imagem, o Docker precisa se autenticar no ECR. Peça a senha temporária de login. <small>(na vida real você liga isso com | docker login)</small>

Quais imagens estão lá?

Liste as imagens do repositório loja-imagens.

O financeiro perguntou do ECR

A linha do ECR apareceu na fatura e ninguém sabe explicar. O list-images que você acabou de usar não ajuda: ele devolve tag e digest, e nenhum dos dois custa dinheiro. Traga o que realmente importa das imagens do loja-imagens.

Só me diga da v1.0

Você mostrou a lista na reunião e veio a pergunta certa: a v1.0, de sete meses atrás, ainda está lá? Repositório de verdade tem centenas de versões — traga só essa imagem, não o repositório inteiro.

Marco: o que tem dentro do checkout-api?

Antes de mexer no repositório do time de pagamentos, olhe o que já mora nele. Liste os detalhes do pagamentos/checkout-api e responda pra você mesmo: tem alguma imagem ali que ninguém sabe de onde veio?

Ninguém vai lembrar de varrer na mão

Uma imagem foi pro ar com uma falha conhecida do openssl e a explicação na reunião foi "esqueceram de varrer". Processo que depende de alguém lembrar não é processo. Faça o loja-imagens varrer sozinho a cada publicação.

E o que já estava lá dentro?

Você ligou a varredura automática — e o aviso na tela te contou uma coisa desconfortável: ela só vale pro que chegar depois. A v1.2 sobe pra produção amanhã e nunca foi varrida por ninguém. Peça a varredura dela, agora.

A v1.2 pode subir amanhã?

A varredura rodou. Agora a decisão é sua: leia o que ela encontrou na v1.2 e repare em quem é o pacote com o problema mais grave — isso muda completamente quem tem que consertar.

A v1.0 continua rodando em produção

Um serviço antigo ainda usa a v1.0, publicada há sete meses e nunca varrida. Varra e leia os achados dela — e compare com o que você viu na v1.2. A imagem não mudou nesse tempo; o que mudou foi o que o mundo descobriu sobre ela.

Marco: o checkout-api também não se varre sozinho

Volte pro repositório do projeto. Ligue a varredura automática nele e, já que ela não olha pra trás, mande varrer aquela imagem sem tag que você encontrou. <small>(sem tag, o único jeito de apontar pra ela é pelo imageDigest — pegue no describe-images)</small>

De onde saiu a imagem sem nome

Aquela órfã do checkout-api tem uma explicação simples: alguém publicou por cima da tag v2.0, o conteúdo antigo perdeu o nome e ficou lá, pagando armazenamento. Enquanto a tag puder se mexer, o número da versão não prova nada. Trave as tags do pagamentos/checkout-api.

Ensaie a limpeza antes de fazer

O time escreveu uma regra de limpeza automática e ela está no arquivo ciclo-imagens.jsonleia ele com cat antes, porque essa regra APAGA imagem. Depois rode o ensaio dela no loja-imagens: descubra o que ela levaria junto, sem aplicar nada. <small>(o CLI lê um arquivo do disco com o prefixo file://)</small>

Agora sim, deixe a limpeza no automático

O ensaio mostrou o que sai e você concorda com a lista. Aplique a política do ciclo-imagens.json no loja-imagens — a partir daí o ECR limpa sozinho, todo dia, sem depender de ninguém lembrar.

Marco: o checkout-api se limpa sozinho

Feche o repositório do projeto: ensaie a mesma política nele e depois aplique. Repare que o resultado do ensaio aqui é diferente do que deu no loja-imagens — e a diferença é exatamente aquela imagem órfã.

O armário não sai vazio

O laboratório do loja-imagens acabou: apague o repositório. Tente primeiro do jeito óbvio e leia o que voltar — o ECR não deixa você levar junto, sem querer, um repositório que ainda tem imagem dentro.

Continue por aqui

Ler explica. Digitar fixa. No CLImb você roda os comandos de verdade num terminal AWS simulado — o estado persiste entre eles, como na nuvem real.

As 3 primeiras atividades desta trilha são abertas; o resto faz parte do plano Pro.

Começar — 3 atividades grátis
Todas as lições · Praticar no terminal · Sobre