

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Ejecute un contenedor Docker de la API web de ASP.NET Core en una instancia de Amazon Linux EC2
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance"></a>

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

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

Este patrón es para personas que están empezando a colocar en contenedores sus aplicaciones en la nube de Amazon Web Services (AWS). Cuando empiezaa a colocar aplicaciones en contenedores en la nube, normalmente no hay ninguna plataforma de orquestación de contenedores configurada. Este patrón le ayuda a configurar rápidamente la infraestructura en AWS para probar sus aplicaciones en contenedores sin necesidad de una infraestructura compleja de orquestación de contenedores.

El primer paso en el proceso de modernización es transformar la aplicación. Si se trata de una aplicación antigua de .NET Framework, primero debe cambiar el tiempo de ejecución a ASP.NET Core. A continuación, proceda del modo siguiente:
+ Cree la imagen del contenedor de Docker
+ Ejecute el contenedor de Docker con la imagen compilada
+ Valide la aplicación antes de implementarla en cualquier plataforma de orquestación de contenedores, como Amazon Elastic Container Service (Amazon ECS) o Amazon Elastic Kubernetes Service (Amazon EKS). 

Este patrón cubre los aspectos de creación, ejecución y validación del desarrollo de aplicaciones modernas en una instancia Linux de Amazon Elastic Compute Cloud (Amazon EC2).

## Requisitos previos y limitaciones
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-prereqs"></a>

**Requisitos previos **
+ Una [cuenta de Amazon Web Services (AWS) activa](https://aws.amazon.com/account/) 
+ Un [rol de AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) con acceso suficiente para crear recursos de AWS para este patrón 
+ Se descargó e instaló [Visual Studio Community 2022](https://visualstudio.microsoft.com/downloads/) o posterior
+ Un proyecto de .NET Framework modernizado a ASP.NET Core
+ Un GitHub repositorio

**Versiones de producto**
+ Visual Studio Community 2022 o posterior

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

**Arquitectura de destino**

Este patrón utiliza una [ CloudFormation plantilla de 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 crear la arquitectura de alta disponibilidad que se muestra en el siguiente diagrama. Se lanza una instancia de Amazon EC2 Linux en una subred privada. El administrador de sesiones de AWS Systems Manager se utiliza para acceder a la instancia privada de Amazon EC2 Linux y para probar la API que se ejecuta en el contenedor de Docker.

![\[Un usuario que accede a la instancia de Amazon EC2 Linux y prueba la API que se ejecuta en el contenedor de Docker.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/512e61b2-10ba-43be-bbd8-2bdc597c3de3/images/9c5206f6-32b1-47be-9037-360c0bff713c.png)


1. Acceso a la instancia de Linux a través de Session Manager

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

**Servicios de AWS**
+ [Interfaz de la línea de comandos de AWS](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html): la Interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto que le permite interactuar con los servicios de AWS mediante comandos en su shell de línea de comandos. Con una configuración mínima, puede utilizar comandos de CLI de AWS que implementen una funcionalidad equivalente a la que ofrece la consola de administración de AWS basada en navegador.
+ [Consola de administración de AWS](https://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/learn-whats-new.html): la consola de administración de AWS es una aplicación web que engloba y hace referencia a un amplio conjunto de consolas de servicios para la administración de recursos de AWS. La primera vez que inicie sesión, verá la página de inicio de la consola. La página de inicio proporciona acceso a la consola de cada servicio y ofrece un único lugar para acceder a la información que necesita para realizar sus tareas relacionadas con AWS.
+ [Administrador de sesiones de AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager.html): el administrador de sesiones es una funcionalidad de AWS Systems Manager totalmente gestionada. Con Session Manager, puede gestionar sus instancias de Amazon Elastic Compute Cloud (Amazon EC2). El administrador de sesiones proporciona una administración de nodos segura y auditable sin necesidad de abrir puertos de entrada, mantener los hosts bastiones ni administrar las claves SSH.

**Otras herramientas**
+ [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/): Visual Studio 2022 es un entorno de desarrollo integrado (IDE).
+ [Docker](https://www.docker.com/): Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

**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"]
```

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

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un ejemplo de API web de ASP.NET Core con Visual Studio. | Para crear una API web de ASP.NET Core de ejemplo, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones | 
| Cree un Dockerfile. | Para crear un archivo Dockerfile, realice una de las siguientes acciones:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para enviar los cambios a tu GitHub repositorio, ejecuta el siguiente comando.<pre>git add --all<br />git commit -m "Dockerfile added"<br />git push</pre> | Desarrollador de aplicaciones | 

### Configurar la instancia de Amazon EC2 Linux
<a name="set-up-the-amazon-ec2-linux-instance"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure la infraestructura. | Lance la [ CloudFormation plantilla de 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 crear la infraestructura, que incluye lo siguiente: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)Para obtener más información sobre cómo acceder a una EC2 instancia privada de Amazon mediante el Administrador de sesiones sin necesidad de un host bastión, consulta la entrada del [blog Hacia un mundo sin bastiones](https://aws.amazon.com/blogs/infrastructure-and-automation/toward-a-bastion-less-world/). | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Inicie sesión en la instancia de Amazon EC2 Linux. | Para conectarse a la instancia de Amazon EC2 Linux en la subred privada, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones | 
| Instale e inicie Docker. | Para instalar e iniciar Docker en la instancia de Amazon EC2 Linux, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Instale GitHub y clone el repositorio. | Para instalar Git en la instancia de Amazon EC2 Linux y clonar el repositorio desde GitHub ella, haz lo siguiente.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 
| Cree y ejecute el contenedor de Docker. | Para compilar la imagen de Docker y ejecutar el contenedor dentro de la instancia de Amazon EC2 Linux, haga lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) | Desarrollador de aplicaciones, administrador de AWS, AWS DevOps | 

### Pruebe la API web
<a name="test-the-web-api"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Pruebe la API web con el comando curl. | Para probar la API web, ejecute el siguiente comando.<pre>curl -X GET "http://localhost/WeatherForecast" -H  "accept: text/plain"</pre>Verifique la respuesta de la API.Si usa Swagger de forma local, puede obtener los comandos curl de cada punto de conexión. | Desarrollador de aplicaciones | 

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


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Elimine todos los recursos. | Eliminar la pila para eliminar todos los recursos. Esto asegura que no se le cobre por ningún servicio que no utilice. | Administrador de AWS, AWS DevOps | 

## Recursos relacionados
<a name="run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance-resources"></a>
+ [Conectarse a la instancia de Linux desde Windows mediante PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html)
+ [Crear una API web con 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/)