Cargas de trabajo de .NET en Amazon ECS y AWS Fargate

MÓDULO 2

Módulo 2: herramientas para desarrolladores de contenedores de .NET en AWS

 MÓDULO DE APRENDIZAJE

AWS proporciona herramientas gratuitas y conjuntos de herramientas de entornos de desarrollo integrados que ayudan a crear y desplegar aplicaciones .NET Framework en contenedores en Amazon ECS, Amazon ECR y AWS Fargate. Además de la consola de administración de AWS, las integraciones con Visual Studio, JetBrains Rider, Visual Studio Code y la CLI de dotnet brindan flexibilidad para elegir las herramientas adecuadas para cumplir con los requisitos de desarrollo e integración continua y despliegue de integración y entrega continuas (CI/CD)

En este módulo, aprenderá a trabajar con Amazon ECS, AWS Fargate y Amazon ECR mediante el kit de herramientas de AWS para Visual Studio y, en la línea de comandos, mediante las extensiones CLI de dotnet.

 Tiempo de realización

60 minutos 

despliegue de aplicaciones .NET en contenedores de AWS con Visual Studio

El kit de herramientas de AWS para Visual Studio es una extensión de uso gratuito para Visual Studio en Windows (no es compatible con Visual Studio para Mac). El kit de herramientas proporciona una ventana de exploración de varios servicios de AWS, incluidos los servicios de contenedores y los asistentes que ayudan a crear y publicar aplicaciones en la nube de AWS. Estos asistentes permiten el despliegue de aplicaciones .NET y .NET Framework en AWS Elastic Beanstalk, Amazon ECS y ECR, AWS Fargate y AWS App Runner desde Visual Studio (este curso se centra en el despliegue en ECS/ECR y Fargate).

Instale el kit de herramientas desde el mercado de Visual Studio, https://marketplace.visualstudio.com/vs. Hay dos versiones compatibles disponibles para Visual Studio que se ejecutan en Windows:

El kit de herramientas se puede instalar en Visual Studio y se ejecuta en su máquina de desarrollo local y también en las imágenes de Visual Studio incluidas en la licencia proporcionadas por Amazon Elastic Compute Cloud (EC2). Estas imágenes son una solución ideal para escenarios de desarrollo que requieren el uso ocasional de Visual Studio sin necesidad de compromisos de licencia a largo plazo.

Una vez que haya instalado el kit de herramientas, necesitará un conjunto de credenciales para permitir el acceso a los servicios de AWS en su nombre. Estos se denominan perfiles de credenciales, y el conjunto de herramientas lo guiará a través del proceso en caso de que sea necesario crearlos. Sin embargo, si ha utilizado anteriormente herramientas como la CLI de AWS o las AWS Tools para PowerShell en su máquina, el kit de herramientas detectará automáticamente los perfiles de credenciales que se utilizan con ellas y los incluirá en la lista desplegable Perfil: en la parte superior de la ventana de herramientas del Explorador de AWS.

Si esta ventana no se ve, utilice el elemento Explorador de AWS del menú Ver del IDE para mostrarla. Seleccione un perfil de credenciales (o cree uno) y, a continuación, seleccione una región de AWS de la región: presione control y la flecha hacia abajo en la ventana del explorador para comenzar.

Trabajar con Amazon ECS y Amazon ECR desde la vista del Explorador de AWS

Tras seleccionar un perfil de credenciales y una región en el explorador, podrá acceder a sus recursos en Amazon ECS y Amazon ECR desde Visual Studio. En la ventana del Explorador de AWS, tras expandir el elemento Amazon Elastic Container Service en el explorador y sus dos subelementos, clústeres y repositorios, podrá trabajar con los clústeres y repositorios existentes en su registro privado de ECR que pertenezcan a la región que haya seleccionado. El kit de herramientas no permite trabajar con su registro público de ECR.

Revise cada uno de los elementos siguientes para obtener más información sobre las funciones disponibles en los menús contextuales del grupo Clústeres, de cada clúster, del grupo de Repositorios y de cada repositorio que se muestra en la vista del Explorador.

Menú contextual de clústeres

El menú contextual del grupo Clústeres ofrece las siguientes opciones:

  • Actualizar: actualiza la colección de clústeres que se muestra en el Explorador.

Menú contextual de clústeres

El menú contextual de cada clúster desplegado que se muestra en el Explorador ofrece opciones para:

  • Ver los detalles del clúster (abre una nueva ventana de documento).
  • Eliminar el clúster.

No se puede eliminar un clúster cuando tiene tareas en ejecución. Para eliminar las tareas de un clúster, primero se utiliza la opción del menú Ver para abrir la vista de detalles de un clúster y, a continuación, se selecciona Editar en la vista y se establece el valor de las tareas deseadas en 0. Una vez agotadas todas las tareas en ejecución, elimine el clúster mediante el botón Eliminar de la vista o la entrada del menú contextual. La vista de los detalles del clúster se muestra a continuación:

Menú contextual de repositorios

El menú contextual del grupo Repositorios ofrece opciones para:

  • Crear repositorio: abre una ventana de diálogo para introducir el nombre del nuevo repositorio. Tenga en cuenta que los nuevos repositorios solo se pueden crear en su registro privado.
  • Actualizar: actualiza la colección de repositorios que se muestra en el Explorador.

Menú contextual de repositorios

El menú contextual de un repositorio que aparece en el grupo Repositorios ofrece opciones para:

  • Ver: abre una nueva ventana de documento con las imágenes contenidas en el repositorio. Los comandos específicos necesarios para enviar imágenes a este repositorio también se pueden ver aquí
  • Eliminar: abre una ventana de diálogo para confirmar la eliminación del repositorio. Opcionalmente, el kit de herramientas puede eliminar todas las imágenes contenidas en el repositorio antes de eliminar el repositorio en sí (los repositorios que no estén vacíos no se pueden eliminar).

despliegue en Amazon ECS y Amazon ECR desde Visual Studio

Además de trabajar con clústeres y repositorios en el Explorador de AWS, el kit de herramientas ofrece dos opciones de despliegue para ayudarlo a desplegar sus aplicaciones e imágenes de contenedores en Amazon ECS, AWS Fargate y Amazon ECR. Ambas opciones están disponibles en el menú contextual del proyecto de su aplicación en Solution Explorer: Publicar en AWS y Publicar contenedor en AWS (versión anterior).

En las secciones siguientes se describen cada una de estas opciones y cuándo puede optar por utilizarlas.

Publicar en AWS

Publicar en AWS permite el despliegue de aplicaciones .NET en Amazon ECS con AWS Fargate, AWS App Runner y máquinas virtuales en AWS Elastic Beanstalk. También se puede utilizar para publicar imágenes de contenedores en Amazon ECR. Además de ofrecer el despliegue de varios servicios, desde un único portal IDE, Publicar en AWS también ofrece:

  • La capacidad de crear proyectos de despliegue personalizados para una aplicación. Los proyectos de despliegue personalizados permiten la creación de recursos de AWS adicionales durante la despliegue y configuraciones de experiencia de usuario de despliegue personalizadas. Al registrar el proyecto de despliegue en el control de código fuente, junto con la aplicación, todos los equipos de desarrollo tienen acceso a la misma configuración personalizada y a los mismos recursos de despliegue aplicables a la aplicación cuando la despliegan desde Visual Studio.
  • Una experiencia de línea de comandos de dotnet, disponible tras instalar el paquete AWS.Deploy.Tools desde NuGet. La experiencia de línea de comandos muestra las mismas opciones, incluidas las que se agregan mediante proyectos de despliegue personalizados. El uso de la herramienta de línea de comandos se explica más adelante en esta sección. Al desplegarlas en los servicios de contenedores de AWS, no es necesario que las aplicaciones tengan un Dockerfile preexistente; si es necesario, se genera un Dockerfile.

Nota: Publicar en AWS solo admite aplicaciones .NET; no admite el despliegue de aplicaciones que usen .NET Framework.

Nota: el despliegue en AWS App Runner se analiza en otro curso, cargas de trabajo .NET en AWS App Runner.

Publicar en AWS tiene un par de instalaciones obligatorios y si falta alguna se lo indicará. El AWS Cloud Deployment Kit (CDK) se utiliza para aprovisionar y configurar los recursos de AWS para respaldar el despliegue de la aplicación. El CDK requiere que Node.js esté instalado. Abra en un navegador https://nodejs.org/en/ e instale la última versión compatible a largo plazo (LTS) o la versión actual de Node.js. Una vez instalado Node.js, abra una consola de comandos y ejecute el comando npm install -g aws-cdk para instalar el CDK. Una vez instalados estos dos requisitos previos, se pueden realizar despliegues mediante Publicar en AWS.

Comience a Publicar en AWS desde el menú contextual del proyecto de la aplicación en Solution Explorer. Se analiza la aplicación y se muestran varias opciones de despliegue, denominadas recetas. En el caso de las aplicaciones que ya están configuradas con un Dockerfile, primero se muestran las recetas para desplegar la aplicación en Amazon ECS con AWS Fargate o para enviar una imagen de contenedor a Amazon ECR. Para las aplicaciones que aún no están configuradas con un Dockerfile, estas opciones se muestran para las aplicaciones web y API web de ASP.NET Core (incluido Blazor Server) y las aplicaciones de consola.

Nota: si la aplicación ya se desplegó (en cualquier servicio), la interfaz de usuario de publicación ofrecerá volver a desplegarla primero en los destinos existentes. Si esto ocurre, seleccione la opción de la pestaña Publicar en un nuevo destino para realizar un nuevo despliegue, en lugar de volver a repetirlo.

La siguiente captura de pantalla muestra las recetas disponibles, en el momento de escribir este artículo, para una aplicación web ASP.NET Core 6. Si hay algún proyecto de despliegue personalizado disponible para la aplicación, aparecerá por encima de las recetas proporcionadas por AWS. En la captura de pantalla, se selecciona la receta para publicar en Amazon ECS mediante AWS Fargate. El panel de la derecha muestra las opciones de despliegue predeterminadas para esa receta.

Como mínimo, se requiere un nombre de aplicación; el nombre del proyecto se usa de forma predeterminada. En función de la aplicación, es posible seleccionar el botón Publicar e iniciar el despliegue inmediatamente. Sin embargo, si la aplicación realiza llamadas a los servicios de AWS, será necesario proporcionar una función personalizada que contenga los permisos que permitan a la aplicación acceder a los servicios y a las API de servicios. Seleccione el botón Editar configuración para especificar, si es necesario, un rol para la aplicación y cualquier cambio de infraestructura que desee antes del despliegue. Por ejemplo, se pueden realizar cambios en la memoria y la CPU de las tareas, la configuración de la red, el equilibrio de carga y los requisitos de escalado. La siguiente captura de pantalla muestra algunas de las opciones disponibles para la receta seleccionada. Las categorías de la izquierda (Computación, Permisos, VPC, etc.) ilustran el rango de opciones que se pueden especificar para el despliegue.
Los contenedores de Windows de Fargate pueden ejecutar aplicaciones .NET Framework y .NET. Fargate admite actualmente dos versiones de Windows Server para aplicaciones: Windows Server 2019 Full y Windows Server 2019 Core. Sea cual sea la versión que utilice, AWS administra las licencias del sistema operativo Windows por usted.

Una vez configuradas las opciones necesarias, seleccione el botón Publicar para iniciar el despliegue.

Para la aplicación web ASP.NET Core de ejemplo que se muestra arriba, Publicar en AWS realizará varios pasos que se pueden seguir en el resultado del registro de despliegue:

  1. La imagen del contenedor se crea mediante un Dockerfile existente o un Dockerfile generado automáticamente.
  2. La autenticación se realiza en su registro privado de Amazon ECR y la imagen se envía a un repositorio. De forma predeterminada, se usa un repositorio con el mismo nombre que el despliegue de la aplicación, pero se puede seleccionar otro repositorio antes de comenzar a publicar, editando la configuración de despliegue (el nombre del repositorio se encuentra en la configuración de la categoría Creación de proyectos).
  3. Se genera un proyecto CDK temporal en el que se definen los recursos necesarios para respaldar el despliegue, por ejemplo, la definición de la tarea, la configuración del clúster, la configuración de la red y otros ajustes.
  4. Por último, el proyecto CDK se usa para desplegar una pila de AWS CloudFormation para lanzar y configurar los recursos, y la aplicación desplegada en esos recursos.

Cuando se completa el despliegue, en la ventana se muestra información resumida sobre la pila de CloudFormation, junto con un URL de la aplicación desplegada (si se desplegó como un servicio). Al hacer clic en la URL, se abre un navegador en la aplicación desplegada.

Despliegue desde canalizaciones de integración y entrega continuas (CI/CD)

Publicar en AWS en Visual Studio está diseñado para desarrolladores que realizan iteraciones en una aplicación sin necesidad de salir del IDE. Para la automatización de CI/CD o para que la usen desarrolladores que no trabajan en un sistema Windows, AWS proporciona una versión de línea de comandos que amplía la CLI de dotnet. Esta herramienta está disponible en NuGet, en el paquete AWS.Deploy.Tools.

Para instalarla, abra un shell de línea de comandos y ejecute el comando:

dotnet tool install -g aws.deploy.tools

Una vez instalada, vea las opciones de comando de nivel superior ejecutando:

dotnet aws

Para iniciar un despliegue desde la carpeta que contiene el proyecto de la aplicación, ejecute:

dotnet aws deploy

Hay ayuda adicional disponible sobre la herramienta y todos sus comandos en la función de ayuda.

Más adelante en este módulo, en la sección titulada despliegue de contenedores .NET en AWS desde la línea de comandos, se analizará con más detalles la despliegue de aplicaciones en contenedores en AWS mediante la extensión dotnet CLI de AWS.Deploy.Tools, incluido su uso en la automatización de CI/CD.

Eliminar los despliegues de contenedores realizados con Publicar en AWS

Los despliegues de aplicaciones realizadas con Publicar en AWS son simplemente pilas de AWS CloudFormation. Puede eliminar un despliegue de las siguientes maneras:

  • Navegue hasta el panel de CloudFormation en la consola de administración de AWS y elimine la pila asociada.
  • En Visual Studio, expanda la entrada de AWS CloudFormation en el explorador de AWS, seleccione la pila y elija Eliminar en el menú contextual de la pila.
  • Desde un shell de línea de comandos, con el paquete AWS.Tools.Deploy instalado, ejecute el comando dotnet aws delete-deployment.

También desde un shell de línea de comandos, puede usar el comando remove-CFNStack de AWS Tools para PowerShell o el comando aws cloudformation delete-stack de la CLI de AWS para eliminar las pilas que representan una aplicación basada en contenedores desplegados.

Resumen

Publicar en AWS ofrece un mecanismo fácil de usar y ampliable para desplegar aplicaciones.NET adecuadas para ejecutarse en un contenedor en AWS, sin necesidad de tener amplios conocimientos de AWS ni siquiera del desarrollo en la nube. Las recetas integradas y personalizables permiten a los desarrolladores desplegar y volver a desplegar aplicaciones cómodamente durante el desarrollo desde Visual Studio a Amazon ECS con AWS Fargate y otros servicios basados en contenedores. Publicar en AWS es la opción recomendada para desplegar aplicaciones web y API web de ASP.NET Core, incluido Blazor del lado del servidor, en contenedores de AWS.

Publicar un contenedor en AWS

Publicar un contenedor en AWS es el enfoque original basado en asistentes para desplegar aplicaciones .NET en contenedores en AWS desde Visual Studio. El asistente, que ahora se considera un enfoque heredado, todavía se admite en Visual Studio al momento, pero es posible que se elimine en una versión futura.

En comparación con Publicar en AWS, Publicar un contenedor en AWS tiene las siguientes características y restricciones:

  • Solo admite el despliegue en Amazon ECS (con o sin AWS Fargate). Publicar en AWS también es compatible con AWS App Runner y con servicios de máquinas virtuales como AWS Elastic Beanstalk
  • Admite el despliegue de aplicaciones web y API web de ASP.NET Core y aplicaciones de consola en contenedores. Esto es similar al que ofrece Publicar en AWS.
  • Requiere que ya exista un Dockerfile en la aplicación. A diferencia de Publicar en AWS, un Dockerfile no se genera automáticamente. Si el proyecto de la aplicación no contiene un Dockerfile, la opción de publicar el contenedor en ECS no se muestra en el menú contextual del proyecto.
  • No depende del kit de desarrollo en la nube de AWS ni de Node.js.
  • El despliegue no se puede modificar más allá de la configuración disponible en el asistente. Los proyectos de despliegue personalizados, como los que ofrece Publicar en AWS, no están disponibles.
  • Se puede usar con una extensión de herramienta CLI de dotnet, Amazon.ECS.Tools, disponible en NuGet. Mediante un sencillo archivo de configuración en formato JSON, aws-ecs-tools-defaults.json, los ajustes de configuración elegidos en el asistente se pueden compartir con una experiencia de línea de comandos, empezando por ejecutar dotnet ecs en un shell de línea de comandos. La opción de línea de comandos es adecuada para desarrolladores que no pueden usar Visual Studio o el kit de herramientas de AWS, o para despliegues automatizados en un sistema de CI/CD.

Nota: el asistente contiene un banner en el que se recomienda cambiar a la nueva experiencia de Publicar en AWS. En algún momento en el futuro, el asistente heredado se eliminará del conjunto de herramientas.

El asistente rellenará previamente los campos de credenciales y región de AWS en función de las selecciones actuales en la ventana del Explorador de AWS. De forma predeterminada, la configuración de lanzamiento de un proyecto se despliega en un repositorio que lleva el nombre del proyecto, que se creará cuando sea necesario.

El menú desplegable Objetivo de despliegue que está al pie de la página contiene cuatro opciones posibles:

  • El Servicio en un clúster de ECS es adecuado para aplicaciones que necesitan ejecutarse las 24 horas del día, los 7 días de la semana, por ejemplo, una aplicación web o, posiblemente, una API web.
  • Ejecutar tarea en un clúster de ECS es adecuado para el código de aplicación que se ejecuta una vez y luego sale, por ejemplo, una aplicación basada en consola. Una vez finalizada la tarea, se puede volver a ejecutar manualmente según sea necesario.
  • La tarea programada en un clúster de ECS es adecuada para tareas que se ejecutan periódicamente antes de salir. Los ejemplos incluyen los procesos por lotes o los trabajos de ETL nocturnos.
  • Al enviar solo la imagen de Docker a Amazon Elastic Container Registry, se crea la imagen del contenedor de la aplicación, se autentifica en su registro privado y la envía a un repositorio del registro privado. No se admiten los repositorios de su registro público.

Una vez elegido el objetivo adecuado, el botón Siguiente pasa a una página en la que se define la configuración de inicio. Los datos seleccionados aquí y en las páginas siguientes se auto completan en una definición de tarea.

Al elegir Crear un clúster vacío para el campo Clúster de ECS, se bloquea al asistente en un despliegue mediante AWS Fargate. Para realizar el despliegue en Amazon ECS sin usar AWS Fargate, primero debe crear los recursos de clúster necesarios con otras herramientas, como la consola de administración de AWS, y luego seleccionar el clúster existente en el asistente.

Si se seleccionó el servicio en un clúster de ECS al inicio del asistente, en la página siguiente se solicita la cantidad de tareas (instancias de contenedor) que se van a ejecutar (el valor predeterminado es 1) y el porcentaje mínimo y máximo de tareas que el servicio debe mantener. Para usar un servicio existente, seleccione su nombre aquí o defina el nombre del nuevo servicio que se va a crear. Si se seleccionó Tarea en un clúster de ECS, se le pedirá que establezca la cantidad de tareas y que asigne un nombre al grupo de tareas. La siguiente captura de pantalla muestra la opción de Servicio en un clúster de ECS al desplegar una aplicación web.

Si el objetivo del despliegue es un servicio, la página siguiente del asistente permite configurar un equilibrador de carga de aplicación, que incluye una página de comprobación de estado. De forma predeterminada, no hay ningún equilibrador de carga configurado. Para los objetivos de despliegue basados en tareas, la página del equilibrador de carga no se muestra, ya que los contenedores que componen la tarea se ejecutan una vez y salen.

La página de configuración final del asistente contiene más opciones que se incluirán en la definición de la tarea, como usar una definición de tarea existente o crear una nueva. Aquí también seleccione el rol de IAM para el código de la aplicación (función de tarea) si la aplicación realiza llamadas a los servicios de AWS, y la función de ejecución que asumirá Amazon ECS al conceder acceso a sus imágenes de registro privadas y a otros recursos necesarios para aprovisionar recursos durante el despliegue. Por último, especifique el puerto del contenedor que debe exponerse y cualquier variable de entorno adicional.

Una vez completados todos los ajustes, al seleccionar Publicar se inicia el despliegue. Al igual que la nueva funcionalidad Publicar en AWS, en el kit de herramientas se explicarán una serie de pasos para completar el despliegue. Estos pasos se pueden seguir en la salida de progreso del asistente o en el panel Amazon Web Services de la ventana de salida del IDE.

  1. Se creará la aplicación y se creará la imagen del contenedor.
  2. La autenticación se realiza en su registro privado de Amazon ECR y la imagen se envía a un repositorio. El nombre del repositorio que se va a utilizar se especificó en la primera página del asistente y, de forma predeterminada, el nombre del proyecto.
  3. Se aprovisionan y configuran los clústeres y otros recursos adecuados a la configuración elegida en el asistente.

Una vez que se completa el aprovisionamiento de recursos para el clúster, el kit de herramientas abre una vista de clúster. Aquí puede supervisar el progreso de las tareas que comienzan a ejecutarse para cumplir con el número especificado en el asistente y, en el caso de los servicios, encontrar la URL para acceder a la aplicación desplegada si se seleccionó un equilibrador de carga durante el asistente.

Despliegue en contenedores desde canalizaciones de CI/CD

El asistente Publicar contenedor en AWS de Visual Studio está diseñado para desarrolladores que realizan iteraciones en una aplicación dentro de su IDE. Para la automatización de CI/CD o para que lo usen desarrolladores que no trabajan en un sistema Windows, AWS proporciona un paquete de herramientas NuGet, Amazon.ecs.Tools, que amplía la CLI de dotnet. Para instalar esta herramienta, abra un shell de línea de comandos y ejecute el comando:

instalación de la herramienta dotnet -g Amazon.ecs.tools.

Para comenzar después de la instalación, para ver las opciones de comando de nivel superior, ejecute el comando:

dotnet ecs

Para iniciar un despliegue, desde la carpeta de proyectos de la aplicación, ejecute:

dotnet ecs deploy

Hay ayuda adicional disponible sobre la herramienta y todos sus comandos en la función de ayuda.

Para las aplicaciones que se desplegaron anteriormente con el asistente en Visual Studio, la configuración seleccionada en el asistente está disponible de forma predeterminada en un archivo de texto con formato JSON, aws-ecs-tols-defaults.json. Este archivo se encuentra en el directorio del proyecto de la aplicación. La herramienta de línea de comandos leerá estos ajustes y podrá anularlos según sea necesario.

Más adelante en este módulo, en la sección titulada despliegue de contenedores .NET en AWS desde la línea de comandos, se analizará con más detalles el despliegue de aplicaciones en contenedores en AWS mediante la extensión dotnet CLI de Amazon.ECS.Tools, incluido su uso en la automatización de CI/CD.

Eliminar los despliegues realizados con Publicar contenedor en AWS

Para eliminar los despliegues realizados con el asistente Publicar contenedor en AWS, utilice uno de los siguientes métodos:

  • En la consola de administración de AWS, navegue hasta el panel de ECS, seleccione el clúster en la lista que se muestra y elija Eliminar clúster en la vista de detalles del clúster.
  • En Visual Studio, abra la vista de clúster de la aplicación desplegada, elija Editar y establezca el recuento de tareas deseadas en 0. Una vez que no se esté ejecutando ninguna tarea, seleccione Eliminar en la vista de clústeres o en el menú contextual de la entrada del clúster en la vista del Explorador de AWS para eliminar el clúster.
  • Una vez que se haya eliminado el clúster, es posible que también desee eliminar el repositorio que contiene las imágenes utilizadas durante el despliegue.

Una vez que se haya eliminado el clúster, es posible que también desee eliminar el repositorio que contiene las imágenes utilizadas durante el despliegue.

Nota: la extensión de línea de comandos de Amazon.ecs.tools no admite la eliminación de despliegues.

Resumen

Publicar un contenedor en AWS ofrece un enfoque basado en asistentes para desplegar aplicaciones en Amazon ECS (con o sin AWS Fargate) y Amazon ECR. A diferencia de Publicar en AWS, Publicar un contenedor en ECS solo admite Amazon ECS, AWS Fargate y Amazon ECR como objetivos de despliegue. Además, las opciones de despliegue se limitan a las que se proporcionan en el asistente o en su equivalente en la línea de comandos y no se pueden personalizar. Publicar en AWS es la herramienta de reemplazo preferida para el despliegue de aplicaciones .NET en AWS. Sin embargo, para aquellos equipos que no puedan adoptar la nueva experiencia, el asistente y la extensión de línea de comandos más antiguos siguen siendo compatibles y están disponibles para su uso.

Despliegue de contenedores .NET en AWS desde la línea de comandos

AWS proporciona dos herramientas de línea de comandos gratuitas para trabajar con aplicaciones.NET en contenedores. Ambos se distribuyen en NuGet y amplían la experiencia de la CLI de dotnet con comandos adicionales que permiten el despliegue de aplicaciones .NET en Amazon ECS, AWS Fargate y Amazon ECR. Estas extensiones de la CLI de dotnet no admiten el despliegue de aplicaciones de .NET Framework.

Nota: al momento en el que se escribe este artículo, aunque los proyectos de despliegue personalizados se pueden usar tanto desde la línea de comandos como desde Visual Studio, solo se pueden crear con la herramienta de línea de comandos.

AWS.Deploy.Tools

El paquete AWS.Deploy.Tools de NuGet es el equivalente en línea de comandos de Publicar en AWS en Visual Studio en Windows. La versión de línea de comandos, que se puede usar en las plataformas Windows, macOS y Linux, expone las mismas recetas de despliegue disponibles en Visual Studio. Esto incluye la capacidad de seleccionar proyectos de despliegue personalizados definidos para una aplicación. El paquete se mantiene como un proyecto de código abierto en GitHub.

Nota: al momento en el que se escribe este artículo, aunque los proyectos de despliegue personalizados se pueden usar tanto desde la línea de comandos como desde Visual Studio, solo se pueden crear con la herramienta de línea de comandos.

Para instalar el paquete, abra un shell de línea de comandos y ejecute el comando:

dotnet tool install -g aws.deploy.tools

Periódicamente se publican nuevas versiones. Para actualizarlas, ejecute el comando:

dotnet tool update -g aws.deploy.tools

Al igual que Publicar en AWS en Visual Studio, el paquete AWS.Deploy.Tools depende de Node.js y del AWS Cloud Development Kit, así que asegúrese de instalarlos también.

Tras la instalación, para comprobar que la instalación se realizó correctamente y ver las opciones de comando de nivel superior disponibles, ejecute:

dotnet aws

Para iniciar un despliegue en la línea de comandos, desde la carpeta que contiene el archivo de proyecto de la aplicación (archivo.csproj), ejecute el comando:

dotnet aws deploy

Se analiza la aplicación y se muestra un conjunto de recetas de despliegue numeradas entre las que puede seleccionar. En la siguiente captura de pantalla, la herramienta ha completado el análisis de una aplicación que actualmente no tiene un Dockerfile y recomienda su despliegue en máquinas virtuales en AWS Elastic Beanstalk. Sin embargo, esto se puede cambiar introduciendo el número de receta deseado, en este caso 3, para desplegarlo como contenedores con AWS Fargate. Se creará un Dockerfile durante el despliegue y se agregará al proyecto.

Una vez seleccionada la receta, una serie de mensajes recopilan la información necesaria, como el nombre del despliegue (que por defecto es el nombre del proyecto, pero se puede cambiar). Otros ajustes opcionales se pueden ajustar mediante submenús numerados.

En la captura de pantalla anterior, pulsar ‘4’ permitiría seleccionar un rol de IAM personalizado para que la aplicación lo asuma cuando se ejecute, en lugar de que el despliegue cree un rol nuevo y vacío. Las opciones avanzadas adicionales para configurar el despliegue están disponibles al ingresar ‘más’.

Una vez que esté satisfecho con la configuración, al pulsar la tecla Intro se iniciará el despliegue. En los escenarios en los que la aplicación no necesita especificar un rol personalizado y los valores predeterminados propuestos son aceptables, basta con presionar la tecla Intro dos veces, una para confirmar el nombre de despliegue predeterminado y otra para iniciar el despliegue de la aplicación.

Al igual que el despliegue desde Visual Studio, si se ha seleccionado una receta de contenedor, se genera un Dockerfile si es necesario, la imagen se crea y se envía a Amazon ECR (la herramienta autentifica por usted) y se crea un proyecto de CDK para aprovisionar la infraestructura, que luego se despliega en AWS CloudFormation. Los eventos y otra información de estado del despliegue se repiten en la terminal. Por último, se genera la URL del punto de conexión de la aplicación junto con otra información resumida, como los nombres del clúster y del servicio.

El redespliegue de aplicaciones también se admite en la línea de comandos. Cuando dotnet aws deploy se ejecuta en la carpeta de un proyecto que se ha desplegado anteriormente, primero enumerará los despliegues existentes para seleccionarlos, seguido de la opción de seleccionar una receta para un nuevo despliegue.

Despliegue en contenedores desde canalizaciones de CI/CD

AWS.Deploy.Tools se puede utilizar desde procesos de integración y entrega continuos. Sin embargo, en estos escenarios, las indicaciones pueden resultar problemáticas. Para deshabilitar las solicitudes, agregue el switch --silent to your command.

Con las indicaciones deshabilitadas, la herramienta no puede recopilar la configuración de despliegue cuando se ejecuta. Para proporcionar todos los ajustes obligatorios y opcionales, especifíquelos en un archivo de texto con formato JSON y proporcione el nombre del archivo, con una ruta opcional, al comando de despliegue con la opción --apply:

dotnet aws deploy --apply settings.json –-silent

La creación de un archivo de configuración está fuera del alcance de este curso. Hay un enlace a la definición del archivo en el repositorio de GitHub de la herramienta en la sección titulada Creación de un archivo de configuración de despliegue en el repositorio de GitHub de AWS .NET.

Creación de proyectos de despliegue personalizados

Si bien no es el tema de este curso, ni se analiza con más detalle, tenga en cuenta que puede crear proyectos de despliegue personalizados para sus aplicaciones .NET en contenedores. La creación de un proyecto de despliegue personalizado le permite agregar infraestructura adicional u otros activos para respaldar la aplicación desplegada y personalizar el entorno de versión ejecutable. Los proyectos de despliegue personalizados se pueden registrar en el control de código fuente, junto con la aplicación, y compartirlos con todo el equipo de desarrollo, lo que garantiza que todos los desplieguen con la misma configuración y personalizaciones, independientemente de si se despliegan desde Visual Studio o en la línea de comandos.

Consulte https://aws.github.io/aws-dotnet-deploy/docs/deployment-projects/cdk-project/ para obtener más información sobre el uso de proyectos de despliegue personalizados con Publicar en AWS en Visual Studio o AWS.Deploy.Tools en la línea de comandos.

Eliminar despliegues de contenedores realizados con AWS.Deploy.Tools

Los despliegues de aplicaciones realizadas con AWS.Deploy.Tools y Publicar en AWS en Visual Studio se pueden eliminar fácilmente cuando se trabaja en la línea de comandos ejecutando el comando:

dotnet aws delete-deployment deployment-name

Sustituya el nombre del despliegue por el nombre de la pila de AWS CloudFormation que se creó para la despliegue.

Amazon.ECS.Tools

El paquete Amazon.ecs.tools de NuGet es el equivalente en línea de comandos de Publicar un contenedor en AWS en Visual Studio. El paquete se puede usar en las plataformas Windows, macOS y Linux y se mantiene como un proyecto de código abierto en GitHub. Ese repositorio incluye otras dos extensiones de CLI de dotnet que se utilizan para el despliegue en AWS Lambda y AWS Elastic Beanstalk.

Para ver las opciones de comando de nivel superior, ejecute el comando:

dotnet ecs

Todos los comandos tienen ayuda adicional, a la que se puede acceder mediante el switch help.

Para iniciar un despliegue, primero decida si la desplegará en un servicio (se ejecuta de forma continua), en una tarea (se ejecuta una vez y se cierra) o en una tarea programada (se ejecuta periódicamente y sale después de cada ejecución). También puede crear la imagen y enviarla a un repositorio de su registro privado de Amazon ECR. Para el sitio web de ejemplo que se utiliza en este curso, la opción adecuada es un servicio en funcionamiento continuo. Al especificar el comando deploy-service con el switch --help se enumeran todas las configuraciones que puede aplicar.

Una vez insertada la imagen, se le pedirá que introduzca el tipo de lanzamiento, EC2 o FARGATE. Para los tipos de lanzamiento de EC2, ya debe haber creado la infraestructura de clústeres necesaria. El tipo de lanzamiento de FARGATE no requiere ningún aprovisionamiento previo, pero sí especificar la CPU y la memoria para la tarea. Consulte https://docs.thinkwithwp.com/AmazonECS/latest/userguide/task_definition_parameters.html para obtener las combinaciones de valores válidas más recientes, que difieren ligeramente entre los tipos de contenedores de Linux y Windows.

En la captura de pantalla siguiente, se seleccionó FARGATE como tipo de lanzamiento, con 512 MiB de memoria y la correspondiente CPU de 256 (.25 vCPU). La herramienta también ha solicitado valores para los nombres de los clústeres y servicios antes de completar el despliegue. Una vez introducidos y validados estos valores, se solicita el despliegue y se cierra el comando.

Nota: a diferencia de Publicar en AWS y AWS.Deploy.Tools, descritos anteriormente en este módulo, los comandos de Amazon.ECS.Tools no esperan a que finalice el despliegue. Tendrá que visitar la consola de administración o usar la vista de clúster de Visual Studio para obtener datos como la URL de la aplicación desplegada.

El archivo de configuración escrito por este despliegue se muestra en la captura de pantalla siguiente. En términos generales, es similar a lo que se escribiría para un despliegue iniciada desde Visual Studio (la versión IDE escribe un poco más de configuración). Este archivo se puede registrar en un repositorio de código fuente, junto con el código de la aplicación, y se puede usar tanto con Visual Studio en Windows como en despliegues de línea de comandos en Windows, macOS y Linux. Se puede seleccionar manualmente un archivo de configuración mucho más extenso para proporcionar valores para todas las opciones de la línea de comandos. Para mayor comodidad, los nombres de las opciones corresponden a las teclas del archivo de configuración.

Despliegue en contenedores desde canalizaciones de CI/CD

Amazon.ecs.tools se puede utilizar desde canalizaciones de integración y entrega continuos. Sin embargo, en estos escenarios, las indicaciones pueden resultar problemáticas. Para deshabilitar las solicitudes, agregue el switch --disable-interactive a su comando.

Con las indicaciones deshabilitadas, la herramienta no puede recopilar la configuración de despliegue cuando se ejecuta. Para proporcionar todos los ajustes obligatorios y opcionales, especifíquelos en el archivo de configuración en formato JSON y proporcione el nombre del archivo, con una ruta opcional, al comando de despliegue con la opción --config-file

Eliminar despliegues de contenedores realizados con Amazon.ECS.Tools

Amazon.ECS..Tools no admite la eliminación de aplicaciones contenedoras desplegadas desde la línea de comandos. Para eliminar un despliegue, utilice una de las siguientes opciones.

  • En la consola de administración de AWS, navegue hasta el panel de ECS, seleccione el clúster en la lista que se muestra y elija Eliminar clúster en la vista de detalles del clúster.
  • En Visual Studio, abra la vista de clúster de la aplicación desplegada, elija Editar y establezca el recuento de tareas deseadas en 0. Una vez que no se esté ejecutando ninguna tarea, seleccione Eliminar en la vista de clústeres o en el menú contextual de la entrada del clúster en la vista del Explorador de AWS para eliminar el clúster.


Una vez que se haya eliminado el clúster, es posible que también desee eliminar el repositorio que contiene las imágenes utilizadas durante el despliegue

despliegue de contenedores.NET en AWS desde Azure DevOps

Para desplegar aplicaciones .NET en Amazon ECS y AWS Fargate desde las canalizaciones de Azure DevOps, está disponible la opción de utilizar las extensiones de la CLI dotnet de AWS.Deploy.Tools o Amazon.ECS.Tools, descritas anteriormente en este módulo. En ambos casos, instale la herramienta como se muestra durante la canalización y, a continuación, ejecute los comandos de despliegue adecuados en una tarea de shell, utilizando los archivos de configuración de ajustes para proporcionar los ajustes obligatorios y opcionales, junto con las opciones --silent (AWS.Deploy.Tools) o -disable-interactive- (Amazon.ECS.Tools) para suprimir las solicitudes.

Como alternativa, para los escenarios en los que la compilación solo necesite insertar o extraer imágenes en un repositorio de su registro privado de Amazon ECR, la extensión AWS Tools para Azure DevOps contiene dos tareas que pueden resultarle útiles.

Las herramientas se pueden instalar desde el mercado de Azure DevOps. Una vez instalado y configurado con las credenciales de servicio, agregue las tareas Amazon ECR Push o Amazon ECR Pull a su proceso de creación. A continuación se muestra una captura de pantalla de los ajustes disponibles en el comando push.

Estas tareas hacen que la configuración de una operación push o pull para una imagen creada anteriormente en la canalización sea sencilla y conveniente, y gestionan el proceso de autorización necesario en el repositorio por usted. Las herramientas se mantienen como un proyecto de código abierto en GitHub, y en la guía del usuario encontrará más información sobre la configuración posterior a la instalación y las tareas individuales de las herramientas.

Pruebas de conocimientos

Ya completó el módulo 2, Herramientas de desarrollo de contenedores de .NET en AWS. La siguiente prueba le permitirá verificar lo que aprendió hasta ahora.

1. ¿En qué servicios publica la herramienta Publicar en AWS? (seleccione dos)

a. Lambda

b. ECS

c. EC2

d. ECR

2. ¿Cuáles son los dos requisitos previos necesarios para utilizar la herramienta Publicar en AWS?

a. C# y Node.js

b. CDK y Node.js

c. Python y CDK

d. Python y Node.js

3. ¿En qué sistemas operativos se puede usar el paquete AWS.Deploy.Tools?

a. Windows

b. macOS

c. Linux

d. Todos los anteriores

Respuestas: 1-b y d, 2-b, 3-d

Conclusión

En este módulo, aprendió sobre algunas de las herramientas gratuitas disponibles en AWS para Visual Studio, la CLI de .NET y la línea de comandos en Windows, macOS y Linux, para desplegar contenedores e imágenes de contenedores en Amazon ECS, Amazon ECS en AWS Fargate y Amazon ECR.

¿Le resultó útil esta página?

Laboratorio práctico