Implementación de una aplicación web de contenedor en Amazon Lightsail

GUÍA DE INTRODUCCIÓN

Módulo 1: preparar el contenedor

En este módulo, crearemos una aplicación web básica con contenedores.

Introducción

En este módulo, revisaremos la aplicación de muestra que se proporciona con esta guía.  Trabajaremos en la creación de un contenedor para ejecutar a nivel local la aplicación web provista y probaremos la aplicación web en nuestra laptop local antes de implementarla en la nube.

Lo que aprenderá

  • Crear un contenedor para una aplicación web existente
  • Ejecutar un contenedor para probar una aplicación a nivel local

Requisitos previos

Antes de comenzar esta guía, necesitará lo siguiente:

  • Docker Desktop instalado
  • Conocimientos básicos de los comandos de Docker

 Tiempo de realización

10 minutos

 Requisitos previos del módulo

  • Una cuenta de AWS con acceso de nivel de administrador**
  • Navegador recomendado: la última versión de Chrome o Firefox

[**] Es posible que las cuentas creadas en las últimas 24 horas aún no tengan acceso a los servicios necesarios para este tutorial.

Implementación

Crear la aplicación cliente

La aplicación web proporcionada en la carpeta de código es una aplicación web desarrollada con el marco de aplicación Flask para Python.

En pocas palabras, el marco Flask incluye un miniservidor para recibir solicitudes HTTP, un mecanismo de enrutamiento para asociar solicitudes específicas (un verbo de HTTP y una ruta/) al código Python y un motor de plantillas para representar el HTML final.

Una práctica recomendada es tener un servidor web dedicado para la aplicación Flask. El servidor web está configurado para ofrecer contenido estático, como imágenes, hojas de estilo (CSS) y archivos JavaScript (JS). El servidor web reenvía todas las demás solicitudes a la aplicación Flask. Para esta guía, elegimos utilizar el servidor web Nginx.

La comunicación entre Nginx y la aplicación Flask se realiza con el protocolo uWSGI. El componente uWSGI lo proporciona Flask.

Esta imagen ilustra la configuración de la aplicación.

La aplicación consta de los siguientes archivos:

  • application.py es el núcleo de la aplicación. Define la lógica, la comunicación con un backend, si lo hay, etc.
  • Pipfile enumera las dependencias Python de la aplicación web.
  • Dockerfile configura el contenedor. Comienza con un contenedor oficial de Nginx y agrega Python, Flask y sus dependencias. Luego, copia el archivo de configuración nginx y un script de inicio.
  • nginx-app.conf es el archivo de configuración de Nginx. Se asegura de que Nginx proporcione contenido estático mientras que otras solicitudes se transmiten a uWSGI/Flask.
  • start.sh inicia los daemons de Nginx y uWSGI.

La aplicación es una aplicación web simple cuyo propósito es anunciar el lanzamiento de un servicio o producto nuevo y tiene un formulario de preinscripción.

Descargar el proyecto

Para crear y probar el contenedor, descargue una copia local del proyecto.

Abra un terminal y escriba los siguientes comandos:

git clone https://github.com/aws-developer-center/dev-center-guides/

cd dev-center-guides/GS_003_web_app_lightsail/code

A partir de ahora, todos los comandos suponen que navegó a este directorio.

Crear el contenedor

Ahora que conoce los componentes principales de la aplicación y cómo funcionan juntos, vamos a crear un contenedor.

Para crear la aplicación dentro de un contenedor, use el terminal y escriba los siguientes comandos:

# Assuming you navigated to the application directory as instructed above 
# Make sure to include the space and period after signup in the below command

docker build -t demo-flask-signup .


Después de unos minutos (en función de la banda ancha de Internet), se creará el contenedor.

Para enumerar todas las imágenes de contenedor en el sistema, utilice el siguiente comando:

docker images

# It should output something similar to 

REPOSITORY          TAG       IMAGE ID       CREATED          SIZE
demo-flask-signup   latest    26d7924c5980   28 minutes ago   640MB
(...)

Probar el contenedor

Para probar el contenedor en la máquina local, primero inícielo y luego apunte un navegador hacia él.

docker run -p 8080:80               \
           --rm                     \
           -v ~/.aws:/root/.aws     \
           demo-flask-signup:latest

Las opciones pasadas al comando docker run son:

  • -p 8080:80 para conectar el puerto TCP 8080 de la máquina local al puerto 80 del contenedor (Nginx).
  • --rm para indicarle a Docker que retire el contenedor cuando se detenga.
  • -v ~/.aws:/root/.aws para asignar la configuración de AWS CLI de la máquina local en el directorio ~/.aws al directorio del contenedor /root/.aws.
  • Finalmente, demo-flask-signup:latest es el nombre y la etiqueta del contenedor que acabamos de crear.

Ahora que el contenedor se está ejecutando, abra un navegador y apúntelo hacia http://localhost:8080. Debería ver la pantalla de inicio de la aplicación, como se muestra a continuación.

Felicitaciones, ahora tiene un contenedor listo para implementar en la nube.

Conclusión

En este primer módulo, creamos una aplicación de contenedor muy básica y la ejecutamos a nivel local para asegurarnos de que funciona. En el siguiente módulo, aprenderemos a crear un servicio de contenedor de Amazon Lightsail.

Siguiente: crear infraestructura

Háganos saber su opinión.