Tutorial: Implementación de una aplicación ASP.NET Core con Elastic Beanstalk - AWS Elastic Beanstalk

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.

Tutorial: Implementación de una aplicación ASP.NET Core con Elastic Beanstalk

En este tutorial, explicará el proceso de creación de una nueva aplicación de ASP.NET Core e implementarla en ella. AWS Elastic Beanstalk

En primer lugar, usará la herramienta de línea de comandos dotnet del SDK de .NET Core para generar una aplicación básica de línea de comandos de .NET Core, instalar las dependencias, compilar el código y ejecutar las aplicaciones localmente. A continuación, creará la clase Program.cs predeterminada y añadirá una clase Startup.cs de ASP.NET y archivos de configuración para crear una aplicación que sirva solicitudes HTTP con ASP.NET e IIS.

Finalmente, Elastic Beanstalk usa un manifiesto de implementación para configurar las implementaciones de aplicaciones de .NET Core, aplicaciones personalizadas y varias aplicaciones de .NET Core o MSBuild en un único servidor. Para implementar una aplicación de .NET Core en un entorno de Windows Server, tendrá que añadir un archivo del sitio a un paquete de código fuente de la aplicación con un manifiesto de implementación. El comando dotnet publish genera clases compiladas y dependencias que puede empaquetar con un archivo web.config para crear un archivo del sitio. El manifiesto de implementación indica a Elastic Beanstalk la ruta en la que debe ejecutarse el sitio y se puede usar para configurar grupos de aplicación y ejecutar varias aplicaciones en diferentes rutas.

El código fuente está disponible aquí: .zip dotnet-core-windows-tutorial

Requisitos previos

Este tutorial utiliza el SDK de .NET Core para generar una aplicación básica de .NET Core, ejecutarla localmente y crear un paquete implementable.

Requisitos
  • .NET Core (x64) 1.0.1, 2.0.0 o posterior

Para instalar el SDK de .NET Core
  1. Descargue el instalador desde microsoft.com/net/core. Elija Windows. Elija Download .NET SDK.

  2. Ejecute el instalador y siga las instrucciones.

Este tutorial utiliza una herramienta ZIP de línea de comandos para crea un paquete de código fuente que puede implementar en Elastic Beanstalk. Para utilizar el comando zip en Windows, puede instalar UnxUtils, una colección ligera de herramientas útiles de línea de comandos como zip y ls. Otra opción es usar el Explorador de Windows u otra herramienta ZIP para crear archivos de paquetes de código fuente.

Para instalar UnxUtils
  1. Descargar UnxUtils.

  2. Extraiga el archivo en un directorio local. Por ejemplo, C:\Program Files (x86).

  3. Agregue la ruta de los binarios en la variable de usuario Windows PATH. Por ejemplo, C:\Program Files (x86)\UnxUtils\usr\local\wbin.

    1. Pulse la tecla de Windows y, a continuación, escriba environment variables.

    2. Elija Edit environment variables for your account (Editar las variables de entorno de esta cuenta).

    3. Elija PATH y, a continuación, Edit (Editar).

    4. Añada rutas al campo Variable value (Valor de la variable), separadas por punto y coma. Por ejemplo: C:\item1\path;C:\item2\path

    5. Elija OK (Aceptar) dos veces para aplicar la nueva configuración.

    6. Cierre las ventanas del símbolo del sistema en ejecución y, a continuación, vuelva a abrir una ventana del símbolo del sistema.

  4. Abra una nueva ventana del símbolo del sistema y ejecute el comando zip comando para comprobar que funciona.

    > zip -h Copyright (C) 1990-1999 Info-ZIP Type 'zip "-L"' for software license. ...

Generar un proyecto de .NET Core

Utilice la herramienta de línea de comandos dotnet para generar un nuevo proyecto C# .NET Core y ejecutarlo localmente. La aplicación de .NET Core predeterminada es una herramienta de línea de comandos que imprime Hello World! y termina.

Para generar un nuevo proyecto de .NET Core
  1. Abra una nueva ventana de símbolo del sistema y desplácese hasta la carpeta de su usuario.

    > cd %USERPROFILE%
  2. Utilice el comando dotnet new para generar un nuevo proyecto de .NET Core.

    C:\Users\username> dotnet new console -o dotnet-core-tutorial Content generation time: 65.0152 ms The template "Console Application" created successfully. C:\Users\username> cd dotnet-core-tutorial
  3. Utilice el comando dotnet restore para instalar las dependencias.

    C:\Users\username\dotnet-core-tutorial> dotnet restore Restoring packages for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj... Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.props. Generating MSBuild file C:\Users\username\dotnet-core-tutorial\obj\dotnet-core-tutorial.csproj.nuget.g.targets. Writing lock file to disk. Path: C:\Users\username\dotnet-core-tutorial\obj\project.assets.json Restore completed in 1.25 sec for C:\Users\username\dotnet-core-tutorial\dotnet-core-tutorial.csproj. NuGet Config files used: C:\Users\username\AppData\Roaming\NuGet\NuGet.Config C:\Program Files (x86)\NuGet\Config\Microsoft.VisualStudio.Offline.config Feeds used: https://api.nuget.org/v3/index.json C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
  4. Utilice el comando dotnet run para compilar y ejecutar la aplicación localmente.

    C:\Users\username\dotnet-core-tutorial> dotnet run Hello World!

Lance un entorno de Elastic Beanstalk

Utilice la consola de Elastic Beanstalk para lanzar un entorno de Elastic Beanstalk. En este ejemplo, lanzará con una plataforma.NET. Después de lanzar y configurar el entorno, puede implementar nuevo código fuente en cualquier momento.

Para lanzar un entorno (consola)
  1. Abra la consola de Elastic Beanstalk mediante este enlace preconfigurado: console.aws.amazon.com/elasticbeanstalk/home#/ newApplication?applicationName=Tutorials &EnvironmentType= LoadBalanced

  2. En Platform (Plataforma), seleccione la plataforma y la ramificación de plataforma que coincidan con el idioma utilizado por la aplicación.

  3. En Application code (Código de aplicación), seleccione Sample application (Aplicación de muestra).

  4. Elija Review and launch (Revisar y lanzar).

  5. Revise las opciones disponibles. Elige la opción disponible que quieras usar y, cuando estés listo, elige Create app (Crear aplicación).

Se tarda alrededor de diez minutos en crear el entorno. Durante este tiempo, puede actualizar el código fuente.

Actualizar el código fuente

Cambie la aplicación predeterminada a aplicación web que utiliza ASP.NET e IIS.

  • ASP.NET es la plataforma de sitios web de .NET.

  • IIS es el servidor web que ejecuta la aplicación en las instancias de Amazon EC2 de su entorno de Elastic Beanstalk.

Los ejemplos de código fuente que se muestran a dotnet-core-tutorial-sourcecontinuación están disponibles aquí: .zip

nota

El siguiente procedimiento muestra cómo convertir el código del proyecto en aplicación web. Para simplificar el proceso, puede generar el proyecto como aplicación web desde el principio. En la sección anterior Generar un proyecto de .NET Core, modifique el comando del paso dotnet new con el siguiente comando.

C:\Users\username> dotnet new web -o dotnet-core-tutorial -n WindowsSampleApp
Para añadir compatibilidad con ASP.NET e IIS al código
  1. Copie Program.cs en su directorio de aplicaciones para que se ejecute como un constructor de hosts web.

    ejemplo c:\users\username\dotnet-core-tutorial\ Program.cs
    namespace Microsoft.AspNetCore.Hosting; using WindowsSampleApp; public static class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args).UseStartup<Startup>(); }
  2. Añada Startup.cs para ejecutar un sitio web de ASP.NET.

    ejemplo c:\users\username\dotnet-core-tutorial\ Startup.cs
    namespace WindowsSampleApp { public class Startup { public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", () => "Hello World from Elastic Beanstalk"); }); } } }
  3. Añada WindowsSampleApp.csproj que incluye middleware de IIS e incluye el archivo web.config desde el resultado de dotnet publish.

    nota

    El siguiente ejemplo se ha desarrollado con .NET Core Runtime 2.2.1. Es posible que tenga que modificar los valores de los atributos TargetFramework o Version de los elementos PackageReference para que coincidan con la versión de .NET Core Runtime que utiliza en sus proyectos personalizados.

    ejemplo c:\users\username\dotnet-core-tutorial\ WindowsSampleApp .csproj
    <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <RollForward>LatestMajor</RollForward> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <RootNamespace>WindowsSampleApp</RootNamespace> </PropertyGroup> </Project>

A continuación, instale las nuevas dependencias y ejecute el sitio web de ASP.NET localmente.

Para ejecutar el sitio web localmente
  1. Utilice el comando dotnet restore para instalar las dependencias.

  2. Utilice el comando dotnet run para compilar y ejecutar la aplicación localmente.

  3. Abra localhost:5000 para ver el sitio.

Para ejecutar la aplicación en un servidor web, debe agrupar el código fuente compilado con un archivo de configuración web.config y las dependencias del runtime. La herramienta dotnet proporciona un comando publish que recopila estos archivos en un directorio en función de la configuración de dotnet-core-tutorial.csproj.

Para crear el sitio web
  • Utilice el comando dotnet publish para enviar el código compilado y las dependencias a una carpeta con el nombre site.

    C:\users\username\dotnet-core-tutorial> dotnet publish -o site

Para implementar la aplicación en Elastic Beanstalk, empaquete el archivo del sitio con un manifiesto de implementación. Esto indica a Elastic Beanstalk cómo ejecutarla.

Para crear un paquete de código fuente
  1. Añada los archivos de la carpeta a un archivo ZIP.

    nota

    Si utiliza una utilidad ZIP diferente, asegúrese de añadir todos los archivos a la carpeta raíz del archivo ZIP resultante. Esto es necesario para una implementación correcta de la aplicación en su entorno de Elastic Beanstalk.

    C:\users\username\dotnet-core-tutorial> cd site C:\users\username\dotnet-core-tutorial\site> zip ../site.zip * adding: dotnet-core-tutorial.deps.json (164 bytes security) (deflated 84%) adding: dotnet-core-tutorial.dll (164 bytes security) (deflated 59%) adding: dotnet-core-tutorial.pdb (164 bytes security) (deflated 28%) adding: dotnet-core-tutorial.runtimeconfig.json (164 bytes security) (deflated 26%) adding: Microsoft.AspNetCore.Authentication.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Authentication.Core.dll (164 bytes security) (deflated 57%) adding: Microsoft.AspNetCore.Connections.Abstractions.dll (164 bytes security) (deflated 51%) adding: Microsoft.AspNetCore.Hosting.Abstractions.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Hosting.dll (164 bytes security) (deflated 60%) adding: Microsoft.AspNetCore.Hosting.Server.Abstractions.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Http.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.AspNetCore.Http.dll (164 bytes security) (deflated 55%) adding: Microsoft.AspNetCore.Http.Extensions.dll (164 bytes security) (deflated 50%) adding: Microsoft.AspNetCore.Http.Features.dll (164 bytes security) (deflated 50%) adding: Microsoft.AspNetCore.HttpOverrides.dll (164 bytes security) (deflated 49%) adding: Microsoft.AspNetCore.Server.IISIntegration.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Core.dll (164 bytes security) (deflated 63%) adding: Microsoft.AspNetCore.Server.Kestrel.dll (164 bytes security) (deflated 46%) adding: Microsoft.AspNetCore.Server.Kestrel.Https.dll (164 bytes security) (deflated 44%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll (164 bytes security) (deflated 56%) adding: Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll (164 bytes security) (deflated 51%) adding: Microsoft.AspNetCore.WebUtilities.dll (164 bytes security) (deflated 55%) adding: Microsoft.Extensions.Configuration.Abstractions.dll (164 bytes security) (deflated 48%) adding: Microsoft.Extensions.Configuration.Binder.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Configuration.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.EnvironmentVariables.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.Configuration.FileExtensions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.DependencyInjection.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.DependencyInjection.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.FileProviders.Abstractions.dll (164 bytes security) (deflated 46%) adding: Microsoft.Extensions.FileProviders.Physical.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.FileSystemGlobbing.dll (164 bytes security) (deflated 49%) adding: Microsoft.Extensions.Hosting.Abstractions.dll (164 bytes security) (deflated 47%) adding: Microsoft.Extensions.Logging.Abstractions.dll (164 bytes security) (deflated 54%) adding: Microsoft.Extensions.Logging.dll (164 bytes security) (deflated 48%) adding: Microsoft.Extensions.ObjectPool.dll (164 bytes security) (deflated 45%) adding: Microsoft.Extensions.Options.dll (164 bytes security) (deflated 53%) adding: Microsoft.Extensions.Primitives.dll (164 bytes security) (deflated 50%) adding: Microsoft.Net.Http.Headers.dll (164 bytes security) (deflated 53%) adding: System.IO.Pipelines.dll (164 bytes security) (deflated 50%) adding: System.Runtime.CompilerServices.Unsafe.dll (164 bytes security) (deflated 43%) adding: System.Text.Encodings.Web.dll (164 bytes security) (deflated 57%) adding: web.config (164 bytes security) (deflated 39%) C:\users\username\dotnet-core-tutorial\site> cd ../
  2. Añada un manifiesto de implementación que apunte al archivo del sitio.

    ejemplo c:\users\username\\ .json dotnet-core-tutorial aws-windows-deployment-manifest
    { "manifestVersion": 1, "deployments": { "aspNetCoreWeb": [ { "name": "test-dotnet-core", "parameters": { "appBundle": "site.zip", "iisPath": "/", "iisWebSite": "Default Web Site" } } ] } }
  3. Utilice el comando zip para crear un paquete de código fuente denominado dotnet-core-tutorial.zip.

    C:\users\username\dotnet-core-tutorial> zip dotnet-core-tutorial.zip site.zip aws-windows-deployment-manifest.json adding: site.zip (164 bytes security) (stored 0%) adding: aws-windows-deployment-manifest.json (164 bytes security) (deflated 50%)

Implementar la aplicación

Implemente el paquete de código fuente en el entorno de Elastic Beanstalk creado.

Puede descargar el paquete fuente aquí: .zip dotnet-core-tutorial-bundle

Para implementar un paquete de código fuente
  1. Abra la consola de Elastic Beanstalk y, en la lista Regiones, seleccione su. Región de AWS

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. En la página de información general del entorno, elija Upload and deploy (Cargar e implementar).

  4. Utilice el cuadro de diálogo en pantalla para cargar el paquete de código fuente.

  5. Elija Deploy (Implementar).

  6. Cuando se complete la implementación, seleccione la URL del para abrir el sitio web en una nueva pestaña.

La aplicación simplemente escribe Hello from ASP.NET Core! en la respuesta y termina de ejecutarse.

El lanzamiento de un entorno crea los siguientes recursos:

  • Instancia de EC2: una máquina virtual de Amazon Elastic Compute Cloud (Amazon EC2) configurada para ejecutar aplicaciones web en la plataforma que elija.

    Cada plataforma ejecuta un conjunto específico de software, archivos de configuración y scripts compatibles con una determinada versión de lenguaje, marco de trabajo y contenedor web (o una combinación de estos). La mayoría de las plataformas utilizan Apache o nginx como un proxy inverso que se sitúa delante de la aplicación web, reenvía las solicitudes a esta, administra los recursos estáticos y genera registros de acceso y errores.

  • Instance security group (Grupo de seguridad de la instancia): grupo de seguridad de Amazon EC2 configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente del balanceador de carga llegue a la instancia EC2 en la que se ejecuta la aplicación web. De forma predeterminada, el tráfico no está permitido en otros puertos.

  • Balanceador de carga: balanceador de carga de Elastic Load Balancing configurado para distribuir solicitudes a las instancias que se ejecutan en la aplicación. Los balanceadores de carga también permiten que las instancias no estén expuestas directamente a Internet.

  • Grupo de seguridad del balanceador de carga: grupo de seguridad de Amazon EC2 configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente de Internet llegue al balanceador de carga. De forma predeterminada, el tráfico no está permitido en otros puertos.

  • Grupo de Auto Scaling: grupo de Auto Scaling configurado para reemplazar una instancia si termina o deja de estar disponible.

  • Bucket de Amazon S3: ubicación de almacenamiento para el código fuente, los registros y otros artefactos que se crean al utilizar Elastic Beanstalk.

  • CloudWatch Alarmas de Amazon: dos CloudWatch alarmas que monitorean la carga de las instancias de su entorno y que se activan si la carga es demasiado alta o demasiado baja. Cuando se activa una alarma, en respuesta, el grupo de Auto Scaling aumenta o reduce los recursos.

  • AWS CloudFormation pila: Elastic AWS CloudFormation Beanstalk se utiliza para lanzar los recursos de su entorno y propagar los cambios de configuración. Los recursos se definen en una plantilla que puede verse en la consola deAWS CloudFormation.

  • Nombre de dominio: nombre de dominio que direcciona el tráfico a la aplicación web con el formato subdominio.región.elasticbeanstalk.com.

    nota

    Para aumentar la seguridad de las aplicaciones de Elastic Beanstalk, el dominio elasticbeanstalk.com está registrado en la lista de sufijos públicos (PSL). Para mayor seguridad, se recomienda que utilice cookies con un prefijo __Host- en caso de que necesite configurar cookies confidenciales en el nombre de dominio predeterminado de sus aplicaciones de Elastic Beanstalk. Esta práctica le ayudará a defender su dominio contra intentos de falsificación de solicitudes entre sitios (CSRF). Para obtener más información, consulte la página de configuración de cookies en la red de desarrolladores de Mozilla.

Todos estos recursos los administra Elastic Beanstalk. Cuando termina su entorno, Elastic Beanstalk termina todos los recursos que este contiene.

nota

El bucket de Amazon S3 que crea Elastic Beanstalk se comparte entre los entornos y no se elimina durante la terminación del entorno. Para obtener más información, consulte Usar Elastic Beanstalk con Amazon S3.

Limpieza

Cuando termine de trabajar con Elastic Beanstalk, puede terminar su entorno. Elastic Beanstalk AWS cancela todos los recursos asociados al entorno, como las instancias de Amazon EC2, las instancias de bases de datos, los balanceadoresde carga, los grupos de seguridad y las alarmas.

Para terminar su entorno de Elastic Beanstalk
  1. Abra la consola de Elastic Beanstalk y, en la lista Regiones, seleccione su. Región de AWS

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. Elija Actions (Acciones) y, a continuación, Terminate Environment (Terminar el entorno).

  4. Utilice el cuadro de diálogo en pantalla para confirmar la terminación del entorno.

Con Elastic Beanstalk, puede crear fácilmente un nuevo entorno para su aplicación en cualquier momento.

Pasos siguientes

A medida que siga desarrollando la aplicación, es probable que desee administrar los entornos e implementar su aplicación sin tener que crear manualmente un archivo .zip y cargarlo en la consola de Elastic Beanstalk. La interfaz de línea de comandos de Elastic Beanstalk (EB CLI easy-to-use ) proporciona comandos para crear, configurar e implementar aplicaciones en entornos de Elastic Beanstalk desde la línea de comandos.

Si usa Visual Studio para desarrollar su aplicación, también puede usarlo AWS Toolkit for Visual Studio para implementar cambios, administrar sus entornos de Elastic Beanstalk y administrar otros recursos. AWS Para obtener más información, consulte El AWS Toolkit for Visual Studio.

Para el desarrollo y las pruebas, tal vez desee utilizar la funcionalidad de Elastic Beanstalk para añadir una instancia de base de datos administrada directamente a su entorno. Para obtener instrucciones acerca de cómo configurar una base de datos dentro del entorno, consulte Añadir una base de datos al entorno de Elastic Beanstalk.

Por último, si pretende utilizar su aplicación en un entorno de producción, configure un nombre de dominio personalizado para su entorno y habilite HTTPS para las conexiones seguras.