

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Execute um contêiner Docker da API web ASP.NET Core em uma instância Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

*Vijai Anand Ramalingam e Sreelaxmi Pai, Amazon Web Services*

## Resumo
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-summary"></a>

Esse padrão é para pessoas que estão começando a conteinerizar seus aplicativos na Nuvem da Amazon Web Services (AWS). Quando você começa a conteinerizar aplicativos na nuvem, geralmente não há plataformas de orquestração de contêineres configuradas. Esse padrão ajuda você a configurar rapidamente a infraestrutura na AWS para testar suas aplicações em contêineres sem precisar de uma infraestrutura elaborada de orquestração de contêineres.

A primeira etapa na jornada de modernização é transformar o aplicativo. Se for uma aplicação herdada do .NET Framework, você deve primeiro alterar o runtime para o ASP.NET Core. Faça o seguinte:
+ Crie a imagem de contêiner do Docker
+ Execute o contêiner do Docker usando a imagem criada
+ Valide a aplicação antes de implantá-la em qualquer plataforma de orquestração de contêiner, como Amazon Elastic Container Service (Amazon ECS) ou Amazon Elastic Kubernetes Service (Amazon EKS). 

Esse padrão abrange os aspectos de construção, execução e validação do desenvolvimento de aplicativos modernos em uma instância Linux do Amazon Elastic Compute Cloud EC2 (Amazon).

## Pré-requisitos e limitações
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Pré-requisitos **
+ Uma conta da [Amazon Web Services (AWS)](https://aws.amazon.com/account/) 
+ Um perfil do [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) com acesso suficiente ao IAM para criar recursos da AWS para esse padrão. 
+ [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) ou versão mais recente baixado e instalado
+ Um projeto do .NET Framework modernizado para o ASP.NET Core
+ Um GitHub repositório

**Versões do produto**
+ Visual Studio Community 2022 ou versão mais recente

## Arquitetura
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-architecture"></a>

**Arquitetura de destino**

Esse padrão usa um [ CloudFormation modelo da AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para criar a arquitetura altamente disponível mostrada no diagrama a seguir. Uma instância Amazon EC2 Linux é executada em uma sub-rede privada. O AWS Systems Manager Session Manager é usado para acessar a instância privada Amazon EC2 Linux e testar a API em execução no contêiner Docker.

![Um usuário acessando a instância Amazon EC2 Linux e testando a API em execução no contêiner do Docker.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Acessar a instância Linux por meio do Session Manager

## Ferramentas
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-tools"></a>

**Serviços da AWS**
+ [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): a AWS Command Line Interface (AWS CLI) é uma ferramenta de código aberto para interagir com serviços da AWS por meio de comandos no seu shell de linha de comando. Com configuração mínima, você pode executar comandos da AWS CLI que implementam funcionalidade equivalente àquela fornecida pelo Console de Gerenciamento da AWS baseado em navegador.
+ [Console de Gerenciamento da AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html): o Console de Gerenciamento da AWS é um aplicativo web que compreende e se refere a uma ampla coleção de consoles de serviço para gerenciar recursos da AWS. Quando você faz login pela primeira vez, vê a página inicial do console. A página inicial fornece acesso a todos os consoles de serviço e oferece um único local para acessar as informações necessárias para executar as tarefas da AWS relacionadas.
+ [Session Manager do AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html): o Session Manager é um recurso totalmente gerenciado do AWS Systems Manager. Com o Session Manager, você pode gerenciar suas instâncias do Amazon Elastic Compute Cloud (Amazon EC2). O Session Manager fornece gerenciamento de nós seguro e auditável sem a necessidade de abrir portas de entrada, manter bastion hosts ou gerenciar chaves SSH.

**Outras ferramentas**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/): o Visual Studio 2022 é um ambiente de desenvolvimento integrado (IDE).
+ [Docker](https://www.docker.com/): o Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.

**Código **

```
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
 WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj", "DemoNetCoreWebAPI/"]
RUN dotnet restore "DemoNetCoreWebAPI/DemoNetCoreWebAPI.csproj"
COPY . .
WORKDIR "/src/DemoNetCoreWebAPI"
RUN dotnet build "DemoNetCoreWebAPI.csproj" -c Release -o /app/build
 
FROM build AS publish
RUN dotnet publish "DemoNetCoreWebAPI.csproj" -c Release -o /app/publish
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DemoNetCoreWebAPI.dll"]
```

## Épicos
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-epics"></a>

### Desenvolver a API Web ASP.NET Core
<a name="develop-the-asp-net-core-web-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar uma API Web ASP.NET Core usando o Visual Studio. | Para criar um exemplo da ASP.NET Core Web API, faça o seguinte:1. Abra o Visual Studio 2022.<br />2. Selecione **Criar um novo projeto**.<br />3. Selecione o modelo de projeto **ASP.NET Core Web API** e escolha **Avançar**.<br />4. Para o nome do projeto, insira **DemoNetCoreWebAPI** e escolha **Avançar**.<br />5. Escolha **Criar**.<br />6. Para executar o projeto localmente, pressione F5.<br />7. Verifique se o endpoint padrão **WeatherForecast**da API está retornando os resultados usando o [Swagger](https://swagger.io/).<br />8. Abra o prompt de comando, navegue até a pasta do projeto .csproj e execute os comandos a seguir para enviar a nova API da web para o seu repositório. GitHub  <pre>git add --all<br />git commit -m "Initial Version"<br />git push</pre> | Desenvolvedor de aplicativos | 
| Crie um Dockerfile. | Para criar um novo Dockerfile, faça o seguinte:+ Crie o Dockerfile manualmente usando o Dockerfile de exemplo na seção *Código*. Com base nos requisitos, selecione a imagem base .NET apropriada. Para obter informações sobre imagens relacionadas a .NET e ASP.NET Core, consulte o [Docker hub](https://hub.docker.com/_/microsoft-dotnet/). <br />+ Crie o Dockerfile usando o Visual Studio e o [Docker Desktop](https://www.docker.com/products/docker-desktop). No explorador de soluções, clique com o botão direito do mouse no projeto e escolha **Adicionar** -> **Suporte a Docker**. Em **SO de destino**, selecione **Linux**. Certifique-se de que o novo Dockerfile esteja no mesmo caminho do arquivo de solução (.sln). <br />Para enviar as alterações ao seu GitHub repositório, execute o comando a seguir.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Desenvolvedor de aplicativos | 

### Configurar a instância Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure a infraestrutura. | Inicie o [ CloudFormation modelo da AWS](https://console.aws.amazon.com/cloudformation/home?region=us-east-2#/stacks/new?stackName=SSM-SSH-Demo&templateURL=https://aws-quickstart.s3.amazonaws.com/quickstart-examples/samples/session-manager-ssh/session-manager-example.yaml) para criar a infraestrutura, que inclui o seguinte: + Uma nuvem privada virtual (VPC), usando o [AWS VPC Quick Start](https://aws.amazon.com/quickstart/architecture/vpc/), com duas sub-redes públicas e duas privadas abrangendo duas zonas de disponibilidade.<br />+ O perfil do IAM necessário para habilitar o AWS Systems Manager.<br />+ Em uma das sub-redes privadas, uma instância de demonstração do Amazon Linux 2 com o SSM Agent mais recente. Embora essa instância não tenha nenhuma conectividade direta com a Internet, ela pode ser acessada com segurança usando o Session Manager do AWS Systems Manager sem a necessidade de um bastion host.O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).<br />Para saber mais sobre como acessar uma EC2 instância privada da Amazon usando o Session Manager sem precisar de um host bastion, consulte a postagem do blog [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Faça login na instância Amazon EC2 Linux. | Para se conectar à instância Amazon EC2 Linux na sub-rede privada, faça o seguinte:1. Abra o EC2 console da Amazon.       <br />2. No painel de navegação, escolha **Instâncias**.<br />3. Selecione a instância de demonstração do Amazon Linux 2 e escolha **Conectar**.O Amazon Linux 2 está se aproximando do fim do suporte. Para obter mais informações, consulte o [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).<br />4. Escolha **Session Manager**.<br />5. Escolha **Conectar** para abrir uma nova janela de terminal.<br />6. Execute o comando a seguir.<pre> sudo su</pre> | Desenvolvedor de aplicativos | 
| Instala e inicializa o Docker. | Para instalar e iniciar o Docker na instância Amazon EC2 Linux, faça o seguinte:1. Para instalar o Docker, execute o comando a seguir:<pre>yum install -y docker</pre><br />2. Para reiniciar o serviço Docker, execute o seguinte comando.<pre> service docker start</pre><br />3. Para verificar a instalação Docker, execute o comando a seguir.<pre>docker info</pre> | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Acesse o Git e clone o repositório. | Para instalar o Git na instância Amazon EC2 Linux e clonar o repositório GitHub, faça o seguinte.1. Para instalar o Git, execute o comando a seguir.<pre>yum install git -y</pre><br />2. Para clonar o repositório, execute o comando a seguir.<pre>git clone https://github.com/<username>/<repo-name>.git</pre><br />3. Para navegar até o Dockerfile, execute o comando a seguir.<pre>cd <repo-name>/DemoNetCoreWebAPI/</pre> | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Compile e execute o contêiner do Docker. | Para criar a imagem do Docker e executar o contêiner dentro da instância Amazon EC2 Linux, faça o seguinte:1. Para criar a imagem do Docker, excute o comando a seguir.<pre>docker build -t aspnetcorewebapiimage -f Dockerfile .</pre><br />2. Para visualizar todas as imagens do Docker, excute o comando a seguir.<pre>docker images</pre><br />3. Para criar e executar um contêiner, excute o comando a seguir.<pre>docker run -d -p 80:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage</pre> | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 

### Testar a API da web
<a name="test-the-web-api"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Testar a API da web usando o comando curl. | Para testar a API, Execute o comando a seguir.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre><br />Verifique a resposta da API.Você pode obter os comandos curl para cada endpoint do Swagger ao executá-lo localmente. | Desenvolvedor de aplicativos | 

### Limpar os recursos
<a name="clean-up-resources"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Exclua todos os recursos | Exclua a pilha para remover todos os recursos. Isso garante que você não seja cobrado por nenhum serviço que não esteja usando. | Administrador da AWS, AWS DevOps | 

## Recursos relacionados
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Conectar-se à instância do Linux no Windows usando PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Criar uma API Web com o ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-5.0&tabs=visual-studio)
+ [Toward a bastion-less world](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/)