Olá! Bem-vindo à nossa próxima lição.
Na lição anterior, analisamos as limitações da camada gratuita do Render, entendendo por que, apesar de excelente para prototipagem, ela pode não ser adequada para aplicações de produção de longo prazo. Isso nos prepara para a transição para um ambiente de nuvem mais robusto e configurável.
Hoje, damos o primeiro passo prático no ecossistema da Amazon Web Services (AWS). Antes de podermos implantar nossa aplicação .NET Aspire no Amazon Elastic Container Service (ECS), precisamos de um local seguro e integrado para armazenar nossas imagens de contêiner. O objetivo desta lição é, portanto, configurar um repositório Amazon ECR (Elastic Container Registry), construir e enviar uma imagem de contêiner de um dos seus serviços Aspire para ele. Este processo é fundamental para qualquer fluxo de trabalho de implantação de contêineres na AWS.
1. O Papel do Amazon ECR no Ecossistema da AWS
Quando você constrói uma imagem Docker localmente, ela existe apenas na sua máquina. Para que um serviço de orquestração na nuvem como o Amazon ECS ou Kubernetes possa usá-la, a imagem precisa estar em um registro de contêiner que o serviço possa acessar. Enquanto o Docker Hub é um registro público popular, para aplicações corporativas ou privadas, você usará um registro privado. O Amazon ECR é a solução gerenciada da AWS para isso.

O ECR não é apenas um local para armazenar arquivos; ele se integra profundamente com o restante da AWS, oferecendo gerenciamento de acesso via IAM (Identity and Access Management), varredura de vulnerabilidades e alta disponibilidade.
Para uma visão geral conceitual do ECR e de como ele se encaixa com o ECS, que exploraremos em breve, assista ao trecho a seguir.
Easily Deploy Your .NET Applications With Amazon ECS and Fargate
O vídeo "Easily Deploy Your .NET Applications With Amazon ECS and Fargate" de Milan Jovanović oferece uma excelente introdução ao ECR e ECS, explicando seus papéis.
Assista do timestamp 02:53 a 05:48. Concentre-se em entender o que é o ECR e por que ele é o primeiro passo necessário antes de podermos usar o ECS para executar nossos contêineres.
Para complementar, o artigo a seguir de Steve Gordon fornece uma ótima definição textual.
.NET on AWS: Pushing a .NET Docker Image to Amazon ECR
O artigo ".NET on AWS: Pushing a .NET Docker Image to Amazon ECR" de Steve Gordon reforça os conceitos. Ler esta seção inicial consolidará sua compreensão.
Leia a seção "What is Amazon ECR?" e a introdução da seção "Creating and Storing Images for .NET Services using Amazon ECR". Isso lhe dará uma base sólida sobre o propósito do serviço.
2. O Fluxo de Trabalho Prático: Publicando sua Imagem
Agora, vamos ao processo passo a passo para enviar a imagem de um dos serviços do seu projeto .NET Aspire (por exemplo, o apiservice) para o ECR.
Pré-requisitos: AWS CLI
Para interagir com os serviços da AWS a partir do seu terminal, você precisará do AWS Command Line Interface (CLI). Assumo que você já o tenha instalado e configurado com suas credenciais de acesso (aws configure). Se não, siga o guia de instalação oficial da AWS antes de prosseguir. Suas credenciais devem ter permissões para criar e gerenciar repositórios ECR.
O Processo Completo em Ação
O vídeo e o artigo que já mencionamos demonstram o fluxo de trabalho exato que vamos seguir. Você pode usá-los como um guia visual e textual passo a passo.
Easily Deploy Your .NET Applications With Amazon ECS and Fargate
Este segmento do vídeo de Milan Jovanović demonstra todo o processo prático: criar o repositório, autenticar, construir, marcar (tag) e enviar (push) a imagem.
Assista do timestamp 05:48 a 09:34. Acompanhe atentamente cada comando executado no terminal. Este é o coração da nossa lição prática.
A seguir, detalharemos cada uma dessas etapas com referências textuais, para que você possa executá-las no seu próprio ritmo.
Passo 1: Criar um Repositório no ECR
Primeiro, precisamos criar um "espaço" no ECR para armazenar as imagens do nosso serviço. Cada repositório geralmente corresponde a uma aplicação ou a um microsserviço.
Você pode fazer isso de várias maneiras (Console, CLI, Infraestrutura como Código). Para começar, o AWS Management Console é o mais visual.
.NET on AWS: Pushing a .NET Docker Image to Amazon ECR
O artigo de Steve Gordon mostra como criar o repositório usando o console da AWS.
Siga as instruções na seção "Creating an Amazon Elastic Container Registry". Crie um repositório para o seu serviço de API, por exemplo, nomeando-o como my-aspire-project/apiservice para manter uma boa organização.
Depois de criar seu repositório, selecione-o e clique no botão "View push commands". A AWS fornece uma lista de comandos exatos que você precisa executar, o que é extremamente útil. Vamos seguir essas etapas.
Passo 2: Autenticar o Docker com o ECR
Sua CLI do Docker local não tem permissão para acessar seu registro ECR privado por padrão. Você precisa obter um token de autenticação temporário da AWS e usá-lo para fazer login.
O comando fornecido pela AWS (passo 1 em "View push commands") faz exatamente isso de uma maneira elegante. Dado seu background em engenharia e programação, você apreciará a mecânica:
aws ecr get-login-password --region <sua-regiao> | docker login --username AWS --password-stdin <id-da-sua-conta>.dkr.ecr.<sua-regiao>.amazonaws.com
aws ecr get-login-password ...: Este comando usa o AWS CLI para solicitar um token de autenticação de curta duração ao serviço ECR.|(pipe): O resultado do primeiro comando (o token) é redirecionado como entrada padrão (stdin) para o próximo comando.docker login ...: Este comando autentica o Docker. A flag--password-stdininstrui o Docker a ler a senha (o token) da entrada padrão, em vez de solicitá-la interativamente.
Execute este comando no seu terminal. Você deve receber uma mensagem "Login Succeeded".
Passo 3: Construir e Marcar (Tag) sua Imagem Docker
Agora, vá para o diretório raiz do seu projeto .NET Aspire. Você já tem um Dockerfile para seus serviços.
-
Construa a Imagem:
Use o comandodocker buildque você já conhece. Certifique-se de que o contexto do build (.no final) está correto e especifique o caminho para oDockerfiledo seu serviço. Por exemplo:docker build -t apiservice:latest -f ./MyAspireApp.ApiService/Dockerfile . -
Marque a Imagem para o ECR:
O Docker precisa saber para qual registro remoto enviar a imagem. Para isso, você deve criar uma nova tag para a imagem que construiu, usando o URI completo do seu repositório ECR. O formato é:<aws_account_id>.dkr.ecr.<region>.amazonaws.com/<repository_name>:<tag>Use o comando
docker tag(passo 3 em "View push commands"):docker tag apiservice:latest <id-da-sua-conta>.dkr.ecr.<sua-regiao>.amazonaws.com/my-aspire-project/apiservice:latestIsso não cria uma nova imagem, apenas anexa um novo "rótulo" à imagem existente
apiservice:latest.
Passo 4: Enviar (Push) a Imagem para o ECR
Com a imagem devidamente marcada, o último passo é enviá-la para o ECR usando o comando docker push:
docker push <id-da-sua-conta>.dkr.ecr.<sua-regiao>.amazonaws.com/my-aspire-project/apiservice:latest
O Docker enviará as camadas da imagem para o seu repositório. Dependendo do tamanho da imagem e da sua conexão, isso pode levar alguns minutos. Após a conclusão, você pode atualizar a página do seu repositório no Console da AWS e verá sua imagem listada!
Teste seu entendimento!
Suponha que você precise enviar uma imagem de contêiner para a AWS. Os detalhes são:
- Nome da imagem local:
meu-worker:1.0 - ID da conta AWS:
987654321098 - Região da AWS:
sa-east-1(São Paulo) - Nome do repositório ECR:
payroll/processing-service
Qual seria a sequência exata de comandos docker tag e docker push para realizar essa tarefa, após a autenticação bem-sucedida?
Show answer
A sequência correta de comandos seria:
-
Tag Command:
docker tag meu-worker:1.0 987654321098.dkr.ecr.sa-east-1.amazonaws.com/payroll/processing-service:1.0(Nota: É uma boa prática usar a mesma tag de versão,
1.0, no repositório remoto.) -
Push Command:
docker push 987654321098.dkr.ecr.sa-east-1.amazonaws.com/payroll/processing-service:1.0
Conclusão
Parabéns! Você acaba de dominar uma habilidade essencial para a implantação de aplicações .NET na AWS. Você moveu com sucesso uma imagem de contêiner do seu ambiente de desenvolvimento local para um registro privado, seguro e gerenciado na nuvem.
Principais Pontos:
- Amazon ECR é o registro de contêiner privado e gerenciado da AWS, essencial para armazenar imagens Docker antes da implantação.
- O fluxo de trabalho principal consiste em criar um repositório, autenticar sua CLI do Docker via AWS CLI, construir a imagem, marcar (tag) a imagem com o URI completo do ECR e, finalmente, enviar (push).
- O comando
aws ecr get-login-password ... | docker login ...é o método seguro e padrão para autenticação. - A marcação correta da imagem é crucial, pois informa ao Docker o destino exato do envio.
Próxima Lição:
Agora que nossa imagem está na AWS, o próximo passo é provisionar a infraestrutura necessária para executá-la. Em vez de criar recursos manualmente pelo console, aprenderemos a defini-los como código, uma prática conhecida como Infraestrutura como Código (IaC). Na próxima lição, você será introduzido aos princípios do IaC e começará a usar o Terraform para escrever sua primeira configuração, definindo a rede base (VPC, Subnets) na AWS que hospedará nossos contêineres.