

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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos | 
| Crie um Dockerfile. | Para criar um novo Dockerfile, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)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: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desenvolvedor de aplicativos | 
| Instala e inicializa o Docker. | Para instalar e iniciar o Docker na instância Amazon EC2 Linux, faça o seguinte:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | 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.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | 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:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | 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>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/)