.NET Workloads on AWS App Runner

MÓDULO 1

Módulo 1: Contenedores y computación sin servidor en AWS

 MÓDULO DE APRENDIZAJE

Información general

AWS App Runner es un servicio de computación de AWS totalmente administrado que facilita a los desarrolladores la implementación rápida de aplicaciones web y API, a escala y sin necesidad de experiencia previa en infraestructura.

Objetivos de aprendizaje

En este módulo, podrá:

  • Obtener información sobre los contenedores y la computación sin servidor.
  • Examinar los servicios de computación de AWS que admiten contenedores y sistemas sin servidor.
  • Comprender cómo determinar cuándo AWS App Runner es adecuado para sus cargas de trabajo.

Dos temas populares en la actualidad son los contenedores y la computación sin servidor. Los contenedores facilitan la administración de la infraestructura subyacente, ya sea en las instalaciones o en la nube. En la actualidad, cerca del 80 % de los contenedores en la nube se ejecutan en AWS. La computación sin servidor administra la infraestructura por usted, lo que permite que su equipo centre su atención en las prioridades empresariales. AWS proporciona varios servicios para contenedores y sistemas sin servidor, y la elección del más adecuado para su caso de uso se puede determinar después de examinar algunas consideraciones clave.

 Tiempo de realización

30 minutos

Contenedores

¿No sería bueno empaquetar su aplicación, junto con su configuración, tiempo de ejecución y dependencias, todo en un paquete ordenado? Eso es lo que hacen los contenedores. Le ofrecen un modo estándar de empaquetar el código, las configuraciones y las dependencias de su aplicación en un único objeto. Comparten un sistema operativo instalado en el servidor y se ejecutan como procesos aislados de los recursos, lo que garantiza despliegues rápidos, fiables y consistentes sea cual sea el entorno en el que se realizan. 

Contenedores frente a máquinas virtuales

Para entender los contenedores, hablemos primero de las máquinas virtuales para poder contrastarlos. En los días en que predominaban los servidores físicos, un servidor era un entorno singular. Venía con una cantidad determinada de memoria, almacenamiento y hardware de red, ejecutaba un sistema operativo específico y prestaba servicio a una organización. Luego llegó la virtualización, que posibilitó emular una PC en software. Ahora su “servidor” podría ser una máquina virtual (VM) adaptada al sistema operativo y los recursos que su organización y aplicación requieren. Una capa de software, llamada hipervisor, crea, ejecuta y administra las máquinas virtuales y las relaciona con el hardware físico, con una alta eficiencia. El servidor físico puede ejecutar varias máquinas virtuales para varios inquilinos, lo que reduce los costos generales de infraestructura. En la actualidad, las máquinas virtuales dominan en la empresa y son fundamentales para la computación en la nube.

Los contenedores ofrecen algunos de los mismos beneficios que las máquinas virtuales, pero son más portátiles y eficientes. Los contenedores son una forma de empaquetar una aplicación junto con sus dependencias, bibliotecas y configuraciones. Varios contenedores comparten un sistema operativo como host y se ejecutan como procesos aislados. Mientras que las máquinas virtuales virtualizan el hardware y, por lo general, se miden en gigabytes, los contenedores virtualizan el sistema operativo y, por lo general, se miden en megabytes. Eso los hace ligeros, portátiles y eficientes. Los contenedores son especialmente adecuados para los microservicios, con una filosofía compartida de componentes de software ligeros e independientes.

Más que las máquinas virtuales, los contenedores cambian la forma en que trabajan los desarrolladores porque están diseñados como una unidad de despliegue de software. Los desarrolladores crean contenedores y los despliegan como parte de su trabajo. Los contenedores y las máquinas virtuales no son una opción mutuamente excluyente. A menudo puede usarlos juntos, lo que le brinda lo mejor de ambos mundos. Los numerosos servicios de AWS que admiten contenedores los ejecutan en máquinas virtuales.

Los contenedores comparten un sistema operativo instalado en el servidor y se ejecutan como procesos aislados de los recursos, lo que garantiza despliegues rápidos, fiables y consistentes sea cual sea el entorno en el que se realizan. Ya sea que realice un despliegue local en su laptop o en producción, la experiencia seguirá siendo la misma, aparte de los secretos y la configuración del entorno.

Referencia: Contenedores de AWS

Tipos de contenedores

Plataforma Docker

Docker es una plataforma de software que le permite crear, probar e implementar aplicaciones rápidamente. Docker define un contenedor como “un proceso aislado en su máquina que está aislado de todos los demás procesos de la máquina host. Este aislamiento aprovecha los espacios de nombres del núcleo y los grupos de control, características que han estado en Linux durante mucho tiempo. Docker ha trabajado para que estas capacidades sean accesibles y fáciles de usar”.

Algunos de los beneficios de usar Docker son poder enviar código con mayor rapidez, estandarizar las operaciones de las aplicaciones, mover código sin problemas y ahorrar dinero mediante una utilización eficiente de los recursos. La frecuencia media de envío de software de los usuarios de Docker es siete veces superior a la de aquellos que no lo usan. Puede estandarizar sus operaciones para el despliegue, la solución de problemas y la reversión de contenedores. Pasar de las máquinas locales a la producción es sencillo y directo. Puede ejecutar más código en cada servidor con contenedores, lo que le permite ahorrar dinero.

Las aplicaciones .NET modernas (escritas en .NET Core 3.1 o .NET 5+) se pueden ejecutar en Linux y son compatibles con los contenedores Docker.

Los servicios de AWS que admiten contenedores Docker incluyen AWS App Runner, Amazon Elastic Container Service (ECS) y Amazon Elastic Kubernetes Service (EKS), AWS Fargate en ECS o EKS y AWS Lambda.

Referencia: AWS Docker

Contenedores de Linux

Los contenedores Docker de Linux se ejecutan en hosts de Linux. Las aplicaciones .NET modernas (escritas en .NET Core 3.1 o .NET 5+) se pueden ejecutar en contenedores de Linux, pero no en aplicaciones antiguas de .NET Framework, que requieren Windows.

Los servicios de AWS que admiten contenedores de Linux incluyen AWS App Runner, Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), AWS Fargate en ECS o EKS y AWS Lambda.

Contenedores de Windows

Los contenedores de Windows son compatibles con los sistemas operativos Microsoft Windows. Los contenedores de Windows no pueden ejecutarse en instancias de contenedores de Linux y viceversa.

Los servicios de AWS que admiten contenedores de Windows incluyen Amazon Elastic Container Service (ECS), Amazon ECS en AWS Fargate y Amazon Kubernetes Service (EKS). AWS App Runner no es compatible con contenedores de Windows.

Referencia: Contenedores de Windows en Amazon EC2

Beneficios de los contenedores

Los contenedores ofrecen muchas ventajas tangibles:

Peso ligero

Los contenedores son paquetes de software ligeros. Son considerablemente más pequeños que las máquinas virtuales porque no incluyen una imagen del sistema operativo invitado. En su lugar, los contenedores comparten un sistema operativo con su host. Por este motivo, los contenedores suelen iniciarse más rápido que las máquinas virtuales.

Estandarización y portabilidad

Los contenedores proporcionan un entorno de software uniforme y portátil. Esto le permite estandarizar las operaciones para el despliegue, la investigación de problemas y la reversión.

Transferencia sencilla

Los contenedores se transfieren sin problemas. Puede transferir aplicaciones en contenedores de máquinas locales a entornos de producción y de entornos locales a la nube. Los contenedores pueden simplificar la implementación de canalizaciones de CI/CD debido a su coherencia y características de control de versiones.

Envío más rápido

El efecto combinado de los contenedores ligeros y portátiles que se pueden transferir sin problemas es la agilidad. Puede desarrollar más rápido cuando trabaja con contenedores, ya que eliminan el tiempo dedicado a las dependencias del software, a la configuración de los entornos y a la solución de problemas de las diferencias entre los entornos. Por ejemplo, la frecuencia media de envío de software de los usuarios de Docker es siete veces superior a la de aquellos que no lo usan.

Ahorro de dinero

Los contenedores permiten ejecutar más código en cada instancia del servidor. Esto mejora la utilización y le permite ahorrar dinero.

Referencias: AWS | ¿Qué es Docker?, AWS | Contenedores

Beneficios de los contenedores en AWS

AWS es un destino de nube popular para los contenedores. En la actualidad, cerca del 80 % de los contenedores en la nube se ejecutan en AWS. Además de los beneficios inherentes de los contenedores, también obtiene estos beneficios al alojar contenedores en AWS. 

Seguridad

AWS ofrece más de 200 servicios y características clave para la seguridad, el cumplimiento y la gobernanza. AWS ejecuta sus contenedores con un sólido aislamiento de seguridad y las actualizaciones de seguridad más recientes. Puede establecer permisos de seguridad detallados para cada contenedor.

Fiabilidad

AWS proporciona una infraestructura global que incluye 69 zonas de disponibilidad en 22 regiones, lo que le permite ejecutar contenedores en todo el mundo. Todos los servicios de contenedores de AWS tienen un acuerdo de nivel de servicio (SLA).

Opciones

AWS ofrece una amplia variedad de servicios de contenedores, que incluyen servicios administrados y servicios sin servidor. Esto incluye el servicio Amazon Elastic Container Registry (ECR), Amazon Elastic Container Service (ECS), Amazon Elastic Kubernetes Service (EKS), AWS Fargate, Amazon Elastic Compute Cloud (EC2) y AWS App Runner.

AWS también proporciona la herramienta App2Container (A2C), que ayuda a incluir en contenedores las aplicaciones .NET y Java existentes y a migrarlas.

Integración con AWS

Los servicios de contenedores de AWS están profundamente integrados con AWS. Esto permite que sus aplicaciones en contenedores aprovechen los servicios de AWS para el escalamiento automático, la creación de redes, la seguridad y la supervisión. Obtendrá la agilidad de los contenedores combinada con la elasticidad y la seguridad de AWS.

Referencia: Análisis profundo de los contenedores de AWS

Casos de uso para los contenedores

Estos son algunos casos de uso comunes para los contenedores.

Microservicios

Los microservicios son un enfoque para el desarrollo de software donde el software está compuesto por pequeños servicios independientes que se comunican a través de API bien definidas. Los propietarios de estos servicios son equipos pequeños independientes. Las arquitecturas de microservicios hacen que las aplicaciones sean más fáciles de escalar y más rápidas de desarrollar. Esto permite la innovación y acelera el tiempo de comercialización de las nuevas características. Los contenedores son una estrategia popular para los microservicios. Las aplicaciones monolíticas se pueden dividir en microservicios y los componentes independientes, en contenedores.

Procesamiento por lotes

Los trabajos de procesamiento por lotes y de extracción, transformación y carga (ETL) son una buena opción para los contenedores. Se pueden iniciar rápidamente y ejecutarse según un cronograma o como respuesta a eventos. Pueden escalar de forma dinámica en respuesta a la demanda.

Machine learning

Utilice contenedores para escalar rápidamente modelos de machine learning para trabajos de entrenamiento e inferencia, y ejecútelos cerca del origen de sus datos en cualquier plataforma.

Aplicaciones híbridas

Los contenedores le permiten administrar de un modo uniforme la forma en que implementa el código, facilitando la tarea de diseñar flujos de trabajo para aplicaciones que se ejecutan entre entornos locales y en la nube. 

Migración de aplicaciones a la nube

Los contenedores ayudan con la migración mediante lift-and-shift a la nube. Puede empaquetar fácilmente aplicaciones completas en contenedores, lo que le permite transferirlas a la nube sin necesidad de realizar cambios en el código. Puede aprovechar la elasticidad de la nube para escalar contenedores.

Referencia: AWS | Microservicios

Tecnologías sin servidor

Las tecnologías sin servidor le permiten crear y ejecutar aplicaciones sin tener que pensar en los servidores. AWS ofrece servicios administrados para alojar código, administrar datos e integrar aplicaciones que no requieran la administración de servidores. Cuentan con escalamiento automático, alta disponibilidad integrada y un modelo de facturación de pago por uso. 

Beneficios de la tecnología sin servidor

Las tecnologías sin servidor le permiten centrarse en sus aplicaciones y clientes en lugar de administrar la infraestructura.

Elimine los gastos operativos

Con las tecnologías sin servidor, no necesita administrar la infraestructura, el aprovisionamiento de capacidad ni la aplicación de parches. Al eliminar los gastos operativos, sus equipos pueden liberar rápidamente, obtener retroalimentación, e iterar para llegar al mercado más rápido.

Adapte a escala

Las tecnologías sin servidor pueden escalar automáticamente de cero a picos de demanda. Esto le permite adaptarse rápidamente a las necesidades de los clientes.

Disminuya sus costos

Las tecnologías sin servidor pueden escalar automáticamente de cero a picos de demanda. Esto le permite adaptarse a las necesidades de los clientes más rápido que nunca.

Cree mejores aplicaciones con mayor facilidad

Las tecnologías sin servidor han incorporado integraciones con otros servicios de AWS. Puede centrarse en crear su aplicación en lugar de configurarla.

Referencia: AWS | Sin servidor

Casos de uso de tecnologías sin servidor

Las tecnologías sin servidor son adecuadas para estos casos de uso comunes:

Aplicaciones web

Las aplicaciones web, incluidas las API web y los microservicios, se crean fácilmente con tecnologías sin servidor. Los servicios de computación sin servidor se escalarán automáticamente para adaptarse a su tráfico web.

Procesamiento de datos

Puede procesar datos a prácticamente cualquier escala con tecnologías de datos sin servidor, como Amazon Simple Storage Service (S3), Amazon DynamoDB, Amazon Relational Database Service Proxy (RDS Proxy) y Amazon Aurora sin servidor.

Procesamiento por lotes

Las tecnologías sin servidor pueden ejecutar tareas por lotes según un cronograma o como respuesta a un evento.

Ingesta de eventos

Puede ejecutar funciones sin servidor para procesar, indexar o analizar los datos no estructurados entrantes y aplicar servicios de machine learning.

Servicios de computación de AWS para contenedores

Ahora que entiende los contenedores y la tecnología sin servidor, consideremos los servicios de computación de AWS que admiten contenedores, algunos de los cuales también admiten la tecnología sin servidor. Todos estos servicios admiten contenedores de Docker Linux y algunos también admiten contenedores de Windows. Puede ver una lista completa de los servicios y herramientas de AWS para contenedores en la página de contenedores de AWS. No necesita conocer hasta el último detalle sobre estos servicios, pero debe comprender qué los diferencia entre sí.

Registro de contenedores: Amazon ECR

Amazon Elastic Container Registry (ECR) le permite almacenar, compartir y desplegar software de contenedores de forma pública o privada. Por lo general, envía sus contenedores a ECR, donde están muy cerca de los servicios de computación en contenedores de AWS, como AWS App Runner, Amazon ECS o Amazon EKS.

Orquestación de contenedores: Amazon ECS, Amazon EKS y AWS Fargate

Estos servicios alojan contenedores y también los orquestan, lo que significa que automatizan el aprovisionamiento, el despliegue, las redes, el escalamiento, la disponibilidad y la administración del ciclo de vida de los contenedores.

Amazon Elastic Container Service (ECS) es un servicio de orquestación de contenedores totalmente administrado que le facilita el despliegue, la administración y el escalamiento de aplicaciones en contenedores. Puede ejecutar contenedores escalables, fiables y altamente seguros en ECS.

Amazon Elastic Kubernetes Service (EKS) es un servicio de contenedores administrado para ejecutar y escalar aplicaciones de Kubernetes en la nube o de manera local. Kubernetes es un sistema de código abierto para automatizar el despliegue, el escalamiento y la administración de aplicaciones en contenedores. EKS es la manera más fiable de comenzar a utilizar, ejecutar y escalar Kubernetes.

AWS Fargate es un servicio de computación sin servidor para contenedores. Tanto Amazon ECS como Amazon EKS están disponibles sin servidor y con un modelo de precios diferente si se combinan con AWS Fargate.

Además de administrar contenedores en la nube, tanto Amazon ECS como Amazon EKS también pueden administrar aplicaciones de contenedores de manera local, a través de los servicios Amazon ECS Anywhere o Amazon EKS Anywhere.

Funciones sin servidor: AWS Lambda

AWS Lambda es un servicio sin servidor y basado en eventos para ejecutar funciones. Admite contenedores.

Control a nivel de servidor: Amazon EC2 e instancias de spot de EC2

Estas opciones proporcionan el máximo control sobre los detalles de la infraestructura, pero también son la forma menos administrada de ejecutar contenedores en AWS.

Amazon Elastic Compute Cloud (Amazon EC2) es un servicio web que proporciona capacidad de computación segura y de tamaño modificable en la nube. Puede ejecutar contenedores con control a nivel de servidor en EC2. Para ello, asignará instancias de EC2 e instalará Docker en ellas.

Si sus aplicaciones son tolerantes a errores, puede ejecutarlas en instancias de spot de Amazon EC2, que están disponibles con un descuento de hasta un 90 %. Las instancias de spot permiten aprovechar la capacidad sin usar de EC2 en la nube de AWS. Para usar instancias de spot, la aplicación debe poder interrumpirse. Puede considerar la posibilidad de utilizar instancias de spot para el análisis de datos, los trabajos por lotes, el procesamiento en segundo plano o las tareas opcionales.

Aplicaciones web sencillas: AWS Lightsail

AWS Lightsail es adecuado para aplicaciones sencillas en contenedores que desee ejecutar, por un precio mensual fijo. Es una buena opción para estudiantes, pequeñas empresas y startups que tienen un sitio web y una base de datos pequeños que desean comenzar a funcionar en la nube. 

Totalmente administrado: AWS App Runner

Por último, hemos llegado al tema de este curso, AWS App Runner. AWS App Runner es un servicio totalmente administrado que facilita a los desarrolladores el despliegue rápido de aplicaciones web y API en contenedores, a escala y sin necesidad de experiencia previa en infraestructura. Además, App Runner también funciona sin servidor, lo que le brinda las ventajas de usar contenedores y servidores al mismo tiempo. App Runner puede ejecutar cargas de trabajo de .NET modernas en contenedores de Linux.

Elegir un servicio de computación de AWS

Ahora que hemos hecho un recorrido por los servicios de computación de AWS para contenedores, repasemos algunas preguntas clave que le ayudarán a decidir si AWS App Runner u otro servicio es el adecuado para su aplicación. En la tabla 1 se describen las consideraciones sobre los servicios de AWS.

Tabla 1: Tabla de decisiones de los servicios de computación en contenedores de AWS

¿Es nuevo en el mundo de los contenedores o tiene experiencia con ellos?

Si es un principiante en contenedores, considere AWS App Runner. Es la opción de servicio más avanzada y no requiere experiencia previa en infraestructura.

¿Necesita contenedores de Windows?

Si desea ejecutar aplicaciones heredadas de .NET Framework en un contenedor, estará limitado a los contenedores de Windows. Los servicios de AWS que admiten contenedores de Windows son Amazon ECS, Amazon ECS con AWS Fargate y Amazon EKS. Si ejecuta un dominio .NET moderno, puede usar contenedores de Linux y cualquiera de los servicios de computación de AWS que admiten contenedores.

¿La orquestación de contenedores es una necesidad actual o futura?

Hay una gran diferencia entre una aplicación de un solo contenedor y una combinación de contenedores que deben orquestarse. Si tiene una disposición compleja de contenedores y necesita una administración de por vida, considere Amazon ECS o Amazon EKS. 

¿La tecnología sin servidor es lo que necesita?

Si su aplicación se ajusta a los casos de uso sin servidor y se siente cómodo dejando que AWS administre la infraestructura y el modelo de pago sin servidor, considere estas opciones: AWS Lambda, AWS App Runner o AWS Fargate.

  1. Si su aplicación consta de funciones basadas en eventos, puede usar AWS Lambda.
  2. Si necesita orquestación, debe usar AWS Fargate con Amazon ECS o Amazon EKS.
  3. Si prefiere un servicio totalmente administrado, elija AWS App Runner.

Conclusiones clave

Ahora debe tener una comprensión básica de los contenedores y de la tecnología sin servidor y sus respectivas ventajas. Aprendió sobre los distintos servicios de computación de AWS y lo que los diferencia. También aprendió qué preguntas hacer para determinar el servicio de computación de AWS adecuado para una carga de trabajo.

Conclusión

En este módulo aprendió por primera vez sobre los contenedores: en qué se diferencian de las máquinas virtuales y los contenedores Docker de Linux en comparación con los contenedores de Windows. Son ligeros, estandarizados y portátiles, se transfieren sin problemas, le permiten realizar envíos más rápido y pueden ahorrarle dinero. Los contenedores de AWS son seguros y fiables, cuentan con el respaldo de una variedad de servicios de contenedores y están profundamente integrados con AWS.

A continuación, aprendió sobre las tecnologías sin servidor, que le permiten crear aplicaciones sin tener que pensar en los servidores. Los beneficios incluyen la eliminación de los gastos operativos, el escalamiento automático, la reducción de los costos y la creación de aplicaciones con mayor facilidad mediante integraciones con otros servicios de AWS. Los casos de uso son las aplicaciones web, el procesamiento de datos, el procesamiento por lotes y la ingesta de eventos.

Aprendió sobre los servicios de computación de AWS para contenedores y cómo elegir un servicio de computación. Descubrió que AWS App Runner es un servicio totalmente administrado para alojar contenedores que también funciona sin servidor.

¿Le resultó útil esta página?

Aspectos fundamentales