Formação AWS

← Todos os artigos

Migrar uma aplicação .NET para a AWS: do GitHub à EC2

MigraçãoPor Henrylle Maia · 15 out 2026 · 7 min de leitura

A sua aplicação .NET Core roda só na sua máquina e você quer vê-la funcionando na AWS. Aqui eu levo uma aplicação assim para uma instância EC2, acessível pelo navegador na porta 80, sem mexer no código: SSH, git clone, .NET SDK e dotnet run.

O ponto de partida: o projeto já roda local, está publicado no GitHub e existe uma instância EC2 criada na AWS.

A meta: primeiro levar, depois desacoplar

A proposta do minicurso é romper a barreira de levar a sua aplicação para a AWS. Quebrar a aplicação nos vários serviços da nuvem, o que eu chamo de desacoplamento, vem depois que ela já está lá dentro. Então o primeiro passo é copiar o que você tem para uma máquina na nuvem e fazer funcionar do jeito que já era.

Neste modelo a nuvem é só o host. A aplicação, o banco de dados e os serviços integrados ficam todos dentro da mesma EC2, parecido com o que você tem local. A diferença é que, estando na AWS, você passa a ter à disposição os serviços dela para ir tirando as peças dali, uma de cada vez.

Antes de ligar: o que a instância custa parada

Deixei a instância parada de propósito, para mostrar um benefício natural da nuvem: o poder computacional só é cobrado enquanto a instância está ligada. Parada, o que continua cobrando é o disco de 10 GB que alocamos, em torno de 1 dólar por mês.

O painel da instância no console da EC2 com Instance state em stopped: parada, só o disco de 10 GB continua cobrando
O painel da instância no console da EC2 com Instance state em stopped: parada, só o disco de 10 GB continua cobrando

Quando liguei a instância, a cobrança pelo processamento voltou a correr, e ela é fracionada: você paga pelo tempo de uso, por segundo. Por isso fica barato montar cases, ambientes de desenvolvimento e ambientes de homologação.

O valor do disco é o da gravação, em 2019. Confira o preço atual na página do Amazon EBS antes de planejar.

1Conectar na instância por SSH

Com a instância ligada, copie o endereço público dela no console (o Public DNS). Eu já tinha colocado a chave PEM, baixada na aula anterior, na raiz do projeto, e conectei com ssh:

bash
ssh -i "sua-chave.pem" ec2-user@<DNS público da instância>

Troque sua-chave.pem pelo nome do arquivo que você baixou e o endereço pelo da sua instância. A máquina que abre é um Amazon Linux 2. Eu trabalhei com privilégio de administrador (sudo) para instalar os pacotes.

2Instalar o Git e clonar o projeto

O projeto está no GitHub, então o caminho é clonar. Na instância, o Git não vem instalado. Instale com o gerenciador de pacotes:

bash
yum install git

Eu estava com o sudo ativo na sessão, por isso rodei sem prefixo. Confirme a instalação e crie uma pasta para o projeto:

bash
mkdir projeto
cd projeto
git clone <URL HTTPS do seu repositório>

Entre na pasta que o clone criou. No meu caso, exemplo_migrando_para_aws. Eu disse na aula que deixaria o projeto de exemplo disponível para quem quiser clonar e testar.

3Instalar o .NET SDK

A aplicação é .NET Core, então a instância precisa do SDK. Na página de download da Microsoft, escolhi a distribuição CentOS 7 e rodei os dois comandos que ela mostra: o primeiro registra o repositório de pacotes da Microsoft, o segundo instala o SDK.

A página de download da Microsoft com CentOS 7 - x64 selecionado e os dois comandos: registrar o repositório e instalar o dotnet-sdk-3.0
A página de download da Microsoft com CentOS 7 - x64 selecionado e os dois comandos: registrar o repositório e instalar o dotnet-sdk-3.0
bash
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.0

Esses são os comandos da época da gravação, para o .NET Core 3.0. Pegue os da página da Microsoft para a versão e a tecnologia que você usa. A instalação na AWS é rápida. Com o SDK instalado, restaure as dependências dentro da pasta do projeto:

bash
dotnet restore

4Rodar na porta 80

Por padrão, o meu projeto sobe nas portas 5000 e 5001. Quero acessar pelo endereço da instância, na porta 80. O dotnet run --help mostra o parâmetro que resolve:

bash
dotnet run --urls http://<DNS público da instância>

Eu passei o DNS público da instância, sem porta, e a aplicação respondeu que estava escutando na 80. Na primeira tentativa esqueci o http:// na frente do endereço e o .NET recusou a URL como inválida; com o http://, subiu.

No terminal, a primeira tentativa falha com Invalid url; com o http:// na frente, a aplicação sobe em Now listening on: http://[::]:80 (DNS público e nome da máquina borrados)
No terminal, a primeira tentativa falha com Invalid url; com o http:// na frente, a aplicação sobe em Now listening on: http://[::]:80 (DNS público e nome da máquina borrados)

Abra http:// seguido do DNS público da instância. A aplicação aparece, rodando na AWS.

A aplicação de exemplo, com o título Seja bem-vindo, aberta no navegador pelo DNS público da EC2 (endereço borrado)
A aplicação de exemplo, com o título Seja bem-vindo, aberta no navegador pelo DNS público da EC2 (endereço borrado)

Para atualizar, o fluxo é o de sempre: faça a mudança, dê o push para o GitHub e, na instância, um pull no projeto.

Onde você chegou e o que vem depois

Neste cenário, a sua aplicação inteira está numa instância EC2: o código, o banco de dados e os demais serviços integrados a ela. Você usa a nuvem como host, e isso não é o modelo ideal para a nuvem. É o ponto de partida, e a partir dele você desacopla aos poucos:

O caminho da aula: o código sai do GitHub, é clonado na EC2, roda com o .NET SDK e responde no navegador pela porta 80GitHubcódigo do projetoAmazon EC2Amazon Linux 2.NET SDKdotnet run --urlsNavegadorporta 80 aberta
O caminho da aula: o código sai do GitHub, é clonado na EC2, roda com o .NET SDK e responde no navegador pela porta 80

A ordem que eu sugeri para ir quebrando a aplicação:

  • Banco de dados. Tire o banco de dentro da EC2 e use o serviço aderente ao seu banco, no caso o RDS.
  • Aplicação sem estado. Transforme a aplicação em stateless, para que ela possa ter escalabilidade.
  • Balanceamento e escala. Coloque um load balancer e o auto scaling na frente.

Cada um desses é assunto de outro tópico. A próxima aula do minicurso mostra um cenário simples para você ter uma prévia do custo que a sua aplicação teria na AWS, porque muita gente acha que a nuvem custa caro.

Checklist

  • A chave PEM está fora do repositório, com *.pem no .gitignore.
  • A instância está ligada e você copiou o DNS público dela.
  • Você conectou por SSH como ec2-user.
  • O Git está instalado e o projeto foi clonado numa pasta da instância.
  • O .NET SDK foi instalado com os comandos da página da Microsoft para a sua versão.
  • O dotnet restore terminou sem erro.
  • O security group libera a porta 80 de entrada.
  • O dotnet run --urls com o DNS público sobe a aplicação e ela abre no navegador.

Levar a aplicação como ela está é o passo que destrava os outros. Só depois de rodar na AWS faz sentido decidir o que desacoplar primeiro.

O que os alunos dizem

  • “Eu queria voltar para a área técnica, mas aprender AWS sozinho só me deixava frustrado.”

    William Santos, Tech Lead

    Ver depoimento
  • “Eu sempre fugi da AWS. Achava complicado, distante da minha rotina de dev. Mas só a primeira aula do Bootcamp já mudou tudo: usei o conteúdo para resolver um problema real de um cliente e fui contratado por causa disso.”

    André Scherrer, Engenheiro de Software

    Ver depoimento
  • “Só quando coloquei a mão na massa com a Formação AWS é que avancei de verdade. Essa prática me levou ao próximo nível”

    Caio, Desenvolvedor (Dev)

    Ver depoimento

Formação AWS

Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.

Agende uma conversa

Prefere assistir?

A aula completa (13 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

Leia também

Compartilhe este post