

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:1. Open Visual Studio 2022.<br />2. Elija **Crear un proyecto nuevo**.<br />3. Seleccione la plantilla de proyecto de la **API web de ASP.NET Core** y elija **Siguiente**.<br />4. Para el nombre del proyecto, ingresa **DemoNetCoreWebAPI** y selecciona **Siguiente**.<br />5. Seleccione **Crear**.<br />6. Para ejecutar el proyecto localmente, presione F5.<br />7. Compruebe que el punto final de la **WeatherForecast**API predeterminado devuelva los resultados mediante [Swagger](https://swagger.io/).<br />8. Abra la línea de comandos, vaya a la carpeta del proyecto .csproj y ejecute los siguientes comandos para enviar la nueva API web a su repositorio. GitHub  <pre>git add --all<br />git commit -m "Initial Version"<br />git push</pre> | Desarrollador de aplicaciones | 
| Cree un Dockerfile. | Para crear un archivo Dockerfile, realice una de las siguientes acciones:+ Cree el archivo Dockerfile manualmente usando el Dockerfile de ejemplo de la sección *Código*. Según los requisitos, seleccione la imagen base de .NET adecuada. Para obtener información sobre las imágenes relacionadas con .NET y ASP.NET Core, consulte [Centro Docker](https://hub.docker.com/_/microsoft-dotnet/). <br />+ Cree el archivo Dockerfile con Visual Studio y [Escritorio Docker](https://www.docker.com/products/docker-desktop). En el explorador de soluciones, haga clic con el botón derecho del proyecto y seleccione **Agregar** -> **Soporte Docker**. Para **OS de destino**, seleccione **Linux**. Asegúrese de que el nuevo Dockerfile esté en la misma ruta que el archivo de la solución (.sln). <br />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: + Una nube privada virtual (VPC), que utiliza la [Introducción a VPC de AWS](https://aws.amazon.com/quickstart/architecture/vpc/), con dos subredes públicas y dos subredes privadas que abarcan dos zonas de disponibilidad.<br />+ El rol de IAM necesario para habilitar AWS Systems Manager.<br />+ En una de las subredes privadas, una instancia de demostración de Amazon Linux 2 con el agente SSM más reciente. Aunque esta instancia no tiene conectividad directa desde Internet, se puede acceder a ella de forma segura mediante el administrador de sesiones de AWS Systems Manager sin necesidad de un host bastión.Se acerca el fin de la compatibilidad de Amazon Linux 2. Para obtener más información, consulte [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).<br />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:1. Abre la EC2 consola de Amazon.       <br />2. En el panel de navegación, seleccione **Instances (Instancias)**.<br />3. Seleccione la instancia de demostración de Amazon Linux 2 y elija **Conectarse**.Se acerca el fin de la compatibilidad de Amazon Linux 2. Para obtener más información, consulte [Amazon Linux 2 FAQs](https://aws.amazon.com/amazon-linux-2/faqs/).<br />4. Elija **Session Manager**.<br />5. Elija **Conectarse** para abrir una nueva ventana de terminal.<br />6. Ejecute el comando siguiente.<pre> sudo su</pre> | Desarrollador de aplicaciones | 
| Instale e inicie Docker. | Para instalar e iniciar Docker en la instancia de Amazon EC2 Linux, haga lo siguiente:1. Para instalar Docker, ejecute el siguiente comando.<pre>yum install -y docker</pre><br />2. Para iniciar el servicio Docker, ejecute el comando siguiente.<pre> service docker start</pre><br />3. Para verificar la instalación de Docker, ejecute el siguiente comando.<pre>docker info</pre> | 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.1. Para instalar Git, ejecute el siguiente comando.<pre>yum install git -y</pre><br />2. Para clonar el repositorio, ejecute el siguiente comando.<pre>git clone https://github.com/<username>/<repo-name>.git</pre><br />3. Para ir al Dockerfile, ejecute el siguiente comando.<pre>cd <repo-name>/DemoNetCoreWebAPI/</pre> | 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:1. Para crear la imagen de Docker, ejecute el siguiente comando.<pre>docker build -t aspnetcorewebapiimage -f Dockerfile .</pre><br />2. Para ver todas las imágenes de Docker, ejecute el siguiente comando.<pre>docker images</pre><br />3. Para crear y ejecutar el contenedor, ejecute el siguiente comando.<pre>docker run -d -p 80:80 --name aspnetcorewebapicontainer aspnetcorewebapiimage</pre> | 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><br />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/)