Blog de Amazon Web Services (AWS)
AWS App Runner: Pase de Código Fuente hacia Aplicaciones Web seguras y escalables en cuestión de minutos
Por Martin Beeby, Principal Tech Keynote Lead
Los contenedores se han convertido en la forma predeterminada en la que empaqueto mis aplicaciones web. Aunque me encanta la velocidad, productividad y consistencia que proporcionan, hay un aspecto del flujo de trabajo de desarrollo que no me gusta: la larga rutina que debe atravesarse para implementar una imagen de contenedor por primera vez.
Dicha rutina le parecrá familiar: configurar un balanceador de carga, configurar el dominio, configurar TLS, crear un flujo de CI/CD e implementar en un servicio de contenedores.
A lo largo de los años, he modificado mi flujo de trabajo y ahora tengo un proyecto reproducible de AWS Cloud Development Kit que utilizo, pero me ha llevado mucho tiempo llegar a esta etapa. Aunque este proyecto reproducible es ideal para aplicaciones más grandes, parece mucho trabajo cuando lo único que quiero hacer es implementar y escalar una sola imagen de contenedor.
En AWS disponemos de una serie de servicios que proporcionan un control granular sobre las aplicaciones en contenedores, pero muchos clientes han preguntado si AWS puede gestionar la configuración y las operaciones de sus entornos de contenedores. Simplemente quieren apuntar hacia su repositorio de código o contenedores existente y hacer que su aplicación se ejecute y escale en la nube sin tener que configurar y administrar servicios de infraestructura.
Debido a que los clientes nos pidieron que creáramos algo más sencillo, nuestros ingenieros han trabajado duro creando un nuevo servicio que le va a encantar.
Presentamos AWS App Runner
AWS App Runner facilita la implementación de aplicaciones web y API en la nube, independientemente del lenguaje de programación en el que estén escritos, incluso para equipos que carecen de experiencia previa en la implementación y administración de contenedores o infraestructura. El servicio incorpora mejores prácticas operativas y de seguridad de AWS y escala o decrece automáticamente en un momento dado, sin tener que preocuparse por el tiempo de arranque “en frío”.
Despliegue de código fuente
App Runner puede desplegar su aplicación conectándose a su código fuente o a un repositorio de registro de contenedores. Primero le mostraré cómo funciona cuando se conecta al código fuente. Tengo una aplicación web de Python en un repositorio de GitHub. Conectaré App Runner a este proyecto, para mostrar cómo compila y despliega mi código en AWS.
En la consola de App Runner , elijo “Crear un servicio de App Runner”.
Para el tipo de repositorio, elijo “Repositorio de código fuente” y luego sigo las instrucciones para conectar el servicio a mi cuenta de GitHub. Para “Repositorio”, elijo el repositorio que contiene la aplicación que quiero desplegar. Para “Rama”, elijo “principal”.
Para “Desencadenador del despliegue”, elijo “Automático”. Esto significa que cuando App Runner descubra un cambio en mi código fuente, automáticamente construirá y desplegará la versión actualizada en mi servicio de App Runner.
Ahora puedo configurar la compilación. Para “Entorno de ejecución”, elijo “Python 3”. El servicio admite actualmente dos lenguajes: Python y Node.js. Si requiere otros lenguajes, necesitará usar el flujo de trabajo del registro de contenedores (que demostraré más adelante). También completo los campos “Comando de compilación”, “Comando de Inicio” y “Puerto”, como se muestra aquí:
Ahora doy un nombre a mi servicio y elijo la CPU y el tamaño de memoria que quiero que tenga mi contenedor. Las decisiones que tomo aquí afectarán el precio del servicio. Debido a que mi aplicación requiere muy poca CPU o memoria, elijo 1 vCPU y 2 GB para mantener mis costos bajos. También puedo configurar aquí cualquier variable de entorno que mi aplicación requiera.
La consola me permite personalizar varias configuraciones diferentes para mi servicio.
Puedo configurar el comportamiento de escalado automático. De forma predeterminada, mi servicio tendrá una instancia de mi imagen de contenedor, pero si el servicio recibe más de 80 solicitudes simultáneas, se escalará a varias instancias. Si lo desea, puede especificar un número máximo para el control de costos.
Puedo expandir la sección de “Comprobación de estado” y establecer una ruta a la que App Runner envía solicitudes de comprobación de estado. Si no configuro la ruta, App Runner intenta realizar una conexión TCP para verificar el estado. De forma predeterminada, si App Runner recibe cinco errores consecutivos de comprobación de estado, considerará que la instancia no está saludable y la reemplazará.
Puedo expandir “Seguridad” y elegir un rol de IAM para ser utilizado por la instancia. Esto dará permiso para que el contenedor se comunique con otros servicios de AWS. App Runner cifra todas las copias almacenadas de mi imagen de origen de la aplicación o paquete de origen. Si proporciono una clave administrada por el cliente (CMK), App Runner la usa para cifrar mi fuente. Si no proporciono uno, App Runner utiliza una clave administrada por AWS en su lugar.
Finalmente, reviso la configuración del servicio y a continuación elijo “Crear y desplegar”.
Después de unos minutos, mi aplicación se ha desplegado y el servicio me proporciona una URL que apunta a la aplicación web. App Runner se asegura de que https esté configurado para que pueda compartirlo con alguien de mi equipo para probar la aplicación, sin que reciba advertencias de seguridad del navegador. No necesito implementar el manejo del tráfico seguro HTTPS en mi imagen de contenedor porque App Runner configura todo.
Ahora quiero configurar un dominio personalizado. El servicio me permite configurarlo sin salir de la consola. Abro mi servicio, elijo la pestaña “Dominios personalizados” y a continuación elijo “Agregar dominio”.
En “Nombre de dominio”, ingreso el dominio que quiero usar para mi aplicación y a continuación elijo “Guardar”.
Después de demostrar la propiedad del dominio, la aplicación estará disponible en mi URL personalizada. A continuación le mostraré cómo funciona App Runner con imágenes de contenedor.
Despliegue de una imagen de contenedor
He creado una aplicación web de .NET, y la he empaquetado como una imagen de contenedor, y a continuación he enviado esta imagen de contenedor a Amazon ECR Public (nuestro registro público de contenedores).
Al igual que lo hice en la primera demostración, elijo “Crear servicio”. En “Origen” y “Despliegue”, para “Tipo de repositorio” elijo “Registro de contenedores”. Para “Proveedor”, elijo “Amazon ECR Public”. En “URI de imagen de contenedor”, ingreso el URI a la imagen.
La configuración de despliegue ahora solo proporciona la opción de activar manualmente la implementación. Esto se debe a que elegí Amazon ECR Public. Si quisiera un nuevo despliegue cada vez que el contenedor cambie, entonces para Proveedor tendría que elegir Amazon ECR.
A partir de este momento, las instrucciones son idénticas a las de la sección “Despliegue de código fuente”. Después del despliegue, el servicio proporciona una URL y mi aplicación está activa en Internet.
Tomar en cuenta
App Runner implementa el sistema de archivos en su instancia de contenedor como almacenamiento efímero. Los archivos son temporales. Por ejemplo, no persisten cuando pausa y reanuda el servicio App Runner . De manera más general, no se garantiza que los archivos permanezcan más allá del procesamiento de una sola solicitud, como parte de la naturaleza sin estado de su aplicación. Sin embargo, los archivos almacenados ocupan parte de la asignación de almacenamiento de su servicio de App Runner durante toda su vida útil. Aunque no se garantiza que los archivos de almacenamiento efímeros persistan en todas las solicitudes, a veces pueden persistir. Puede aprovecharlo oportunísticamente. Por ejemplo, al gestionar una solicitud, puede almacenar en caché los archivos que descarga la aplicación si las solicitudes futuras pueden necesitarlos. Esto podría acelerar el manejo de solicitudes futuras, pero no es posible garantizar en qué medida habrá ganancias de velocidad. Su código no debe suponer que todavía existe un archivo que se ha descargado en una solicitud anterior. Para obtener un almacenamiento en caché garantizado, utilice un almacén de datos en memoria de alto rendimiento y baja latencia, como Amazon ElastiCache.
Socios de Negocio en acción
Hemos estado trabajando con socios como MongoDB, Datadog y HashiCorp para integrarse con App Runner. A continuación se brinda una probadita de aquello en lo que han estado trabajando:
MongoDB— «Estamos encantados de integrar App Runner con MongoDB Atlas para que los desarrolladores puedan aprovechar la escalabilidad y el rendimiento de nuestro servicio global de base de datos nativo de nube para sus aplicaciones App Runner».
Datadog: «Con AWS App Runner, los clientes pueden implementar y escalar más fácilmente sus aplicaciones web desde una imagen de contenedor o un repositorio de código fuente. Con nuestra nueva integración, los clientes pueden supervisar sus métricas, registros y eventos de App Runner para solucionar problemas más rápidamente y determinar la mejor configuración de recursos y escalabilidad para su aplicación».
HashiCorp: «La integración de HashiCorp Terraform con AWS App Runner significa que los desarrolladores tienen una forma más rápida y sencilla de desplegar aplicaciones productivas en la nube, con menos infraestructura qué configurar y administrar».
También contamos con emocionantes integraciones de Pulumi, Logz.io y Sysdig, que permitirán a los clientes de App Runner utilizar las herramientas y el servicio que ya conocen y en el cual confían. Como socio consultor de AWS, Trek10 puede ayudar a los clientes a aprovechar App Runner para el diseño de arquitecturas nativas de nube.
Disponibilidad y precios
AWS App Runner está disponible hoy en día en EE.UU. Este (Norte de Virginia), EE.UU. Oeste (Oregón), EE.UU. Este (Ohio), Asia Pacífico (Tokio) y Europa (Irlanda). Puede utilizar App Runner con la consola de administración de AWS y la CLI de AWS Copilot.
Con App Runner, usted paga por los recursos informáticos y de memoria utilizados por su aplicación. App Runner escala automáticamente el número de contenedores activos hacia arriba y hacia abajo para cumplir con los requisitos de procesamiento de su aplicación. Puede establecer un límite máximo en el número de contenedores que utiliza su aplicación para que los costos no superen el presupuesto.
Solo se le facturará App Runner cuando se esté ejecutando y puede pausar su aplicación fácilmente y reanudarla rápidamente. Esto es especialmente útil en situaciones de desarrollo y pruebas, ya que puede apagar una aplicación cuando no la está utilizando, lo que le ayuda a optimizar sus costos. Para obtener más información, consulta la página de precios de App Runner .
Comience a utilizar AWS App Runner hoy mismo y ejecute sus aplicaciones web a escala, con rapidez y seguridad.
— Martín
Sobre El Autor
Martin Beeby – Como Principal Advocate de Amazon Web Services, Martin viaja por el mundo mostrando las capacidades transformadoras de AWS. En su tiempo como promotor, Martin ha hablado en más de 200 eventos y encuentros, además de producir blogs, tutoriales y transmisiones. Martin ha estado desarrollando aplicaciones desde los 16 años y en los últimos 20 años ha trabajado en proyectos con muchas empresas y marcas importantes. Su enfoque principal se centra en las aplicaciones .NET y ha trabajado como desarrollador de C# y VB desde 2001.
Sobre los traductores
Vanessa Hernandez es Arquitecta de Soluciones Sr. para Amazon Web Services en Sector Público. Vanessa colabora con Dependencias de Gobierno, Instituciones Educativas y Organizaciones sin fines de lucro en el territorio de México, apoyándolos en su camino a la innovación y adopción tecnológica
José Lorenzo Cuéncar Garza es Arquitecto de Soluciones Sr. para Amazon Web Services en Sector Público. José colabora con Dependencias de Gobierno, Instituciones Educativas y Organizaciones sin fines de lucro en México, apoyándolos en su camino a la innovación y adopción tecnológica.