Cómo suministrar una aplicación Flask

con contenedores de Amazon Lightsail

TUTORIAL

Introducción

Amazon Lightsail es un servidor privado virtual fácil de usar que ofrece un servicio de contenedoresSiga este tutorial para aprender a suministrar una aplicación Flask en el servicio de contenedores de Lightsail.

En este tutorial, creará una aplicación Flask, un contenedor de Docker y un servicio de contenedor en Lightsail, e implementará la aplicación.

Comience a utilizar Amazon Lightsail de forma gratuita. 

Información general

En este tutorial, configurará un contenedor de Docker en su máquina local y un contenedor en el servicio Amazon Lightsail, y lanzará aplicaciones “Hello, World!”.

Requisitos previos

Antes de comenzar este tutorial, necesitará lo siguiente:

  • Una cuenta de AWS: si aún no tiene una, siga la guía de introducción Configuración de su entorno para obtener un descripción general rápida.
  • Una interfaz de línea de comandos (CLI) de AWS configurada correctamente: para obtener más información sobre cómo configurar la CLI de AWS, consulte la documentación de la CLI de AWS. Asegúrese de usar la versión más reciente de la CLI de AWS, que es la v2. Por último, asegúrese de que la región esté configurada de forma predeterminada o tendrá que especificarla al emitir los comandos de implementación de Lightsail.
  • Docker instalado en su máquina local.
  • Complemento Amazon Lightsail Control (lightsailctl) instalado y configurado: para obtener más información sobre cómo instalar Lightsail Control, consulte la documentación de Lightsail Control.

 Experiencia en AWS

Intermedio

 Tiempo de realización

30 minutos

 Costo de realización

Apto para el nivel gratuito. Consulte la página de precios de Lightsail para obtener más información.

 Requisitos

Cuenta de AWS activa
CLI de AWS
Control de Amazon Lightsail
Docker

 Servicios utilizados

Amazon Lightsail

 Última actualización

17 de octubre de 2023

Implementación

Paso 1: crear una aplicación Flask

Complete los siguientes pasos en la máquina local que ejecuta Docker. Estos pasos lo guían a través del proceso de creación de los archivos de la aplicación Flask.

Paso 1a: en la línea de comandos de su máquina local, cree un nuevo directorio de proyecto y cambie a ese directorio.

mkdir lightsail-containers-flask
cd lightsail-containers-flask

Paso 1b: cree un nuevo archivo llamado app.py con el siguiente código:  

Esta aplicación Flask mínima contiene una única función hello_world que se activa cuando se solicita la ruta “/”. Cuando se ejecuta, esta aplicación se enlaza a todas las IP del sistema (“0.0.0.0”) y escucha en el puerto 5000, que es el puerto predeterminado de Flask.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return "Hello, World!"

if __name__ == "__main__":
   app.run(host='0.0.0.0', port=5000)

Paso 1c: cree un archivo nuevo, requirements.txt. Edite el archivo y agregue el siguiente código: Luego, guarde el archivo.

Los archivos requirements.txt se utilizan para especificar qué paquetes de Python necesita la aplicación. Para esta aplicación Flask mínima, solo se requiere un paquete, Flask.

flask===3.0.0

Paso 1d: cree un nuevo archivo llamado Dockerfile. Edite el archivo y agregue el siguiente código. Guarde el archivo.

La imagen Alpine de Python garantiza que el contenedor resultante sea lo más compacto y pequeño posible. El comando que se debe ejecutar cuando se inicia el contenedor es el mismo que si se ejecuta desde la línea de comandos: python app.py.

# Set base image (host OS)
FROM python:3.12-alpine

# By default, listen on port 5000
EXPOSE 5000/tcp

# Set the working directory in the container
WORKDIR /app

# Copy the dependencies file to the working directory
COPY requirements.txt .

# Install any dependencies
RUN pip install -r requirements.txt

# Copy the content of the local src directory to the working directory
COPY app.py .

# Specify the command to run on container start
CMD [ "python", "./app.py" ]

Paso 1e: en este punto, su directorio debe contener los siguientes archivos:

$ tree
.

├── app.py
├── Dockerfile
└── requirements.txt

0 directorios, 3 archivos

Paso 2: crear la imagen de contenedor

Paso 2a: cree el contenedor con Docker. Use el siguiente comando desde el mismo directorio que el Dockerfile:

Este comando crea un contenedor utilizando el Dockerfile del directorio actual y etiqueta el contenedor como “flask-container”.

docker build -t flask-container .

Paso 2b: una vez que se haya creado el contenedor, ejecute el contenedor para probar la aplicación Flask localmente.

docker run -p 5000:5000 flask-container

Paso 2c: la aplicación Flask se ejecutará en el contenedor y estará expuesta a su sistema local en el puerto 5000. Navegue hasta http://localhost:5000 o use curl desde la línea de comandos y verá “Hello, World!”.

$ curl localhost:5000

Hello, World!

Paso 3: crear un servicio de contenedores

Complete los siguientes pasos para crear el servicio de contenedores de Lightsail mediante la CLI de AWS y, a continuación, inserte la imagen de contenedor local en su nuevo servicio de contenedores mediante el complemento Lightsail Control (lightsailctl).

Paso 3a: cree un servicio de contenedores de Lightsail con el comando create-container-service.

Los parámetros de potencia y escala especifican la capacidad del servicio de contenedores. Para una aplicación mínima Flask, se requiere poca capacidad.

La salida del comando create-container-service indica que el estado del nuevo servicio es “PENDING”. Consulte el segundo bloque de código para ver esto. 

aws lightsail create-container-service --service-name flask-service --power small --scale 1

Paso 3b: utilice el comando get-container-services para supervisar el estado del contenedor a medida que se crea.

Espere hasta que el estado del servicio de contenedores cambie a “READY” antes de continuar con el siguiente paso. Su servicio de contenedores debería estar listo después de unos minutos.

aws lightsail get-container-services

Salida:

{
    "containerService": {
        "containerServiceName": "flask-service",
         ...
        "state": "PENDING",

Salida:

{
    "containerService": {
        "containerServiceName": "flask-service",
         ...
        "state": "READY",

Paso 3c: inserte el contenedor de la aplicación en Lightsail con el comando push-container-image

Nota: La X de ":flask-service.flask-container.X" será un valor numérico. Si es la primera vez que sube una imagen a su servicio de contenedores, este número será 1. Necesitará este número en el siguiente paso.

aws lightsail push-container-image --service-name flask-service --label flask-container --image flask-container

Imagen "flask-container" registrada.
... Consulte esta imagen como ":flask-service.flask-container.X" en las implementaciones.

Paso 4: implementar el contenedor

Complete los siguientes pasos para crear archivos JSON de implementación y configuración de puntos de enlace públicos y, a continuación, implemente la imagen de contenedor en su servicio de contenedores.

Paso 4a: cree un archivo nuevo, containers.json. Edite el archivo y agregue el siguiente código: 

Sustituya la X en :flask-service.flask-container.X por el valor numérico del paso anterior. 

Guarde el archivo.

El archivo containers.json describe la configuración de los contenedores que se lanzarán en el servicio de contenedores. En este caso, el archivo containers.json describe el contenedor flask, la imagen que utilizará y el puerto que expondrá.

{
    "flask": {
        "image": ":flask-service.flask-container.X",
        "ports": {
            "5000": "HTTP"
        }
    }
}

Paso 4b: cree un archivo nuevo, public-endpoint.json

Edite el archivo y agregue el siguiente código:

Guarde el archivo.

El archivo public-endpoint.json describe la configuración del punto de enlace público para el servicio de contenedores. En este caso, el archivo public-endpoint.json indica que el contenedor flask expondrá el puerto 5000. La configuración de punto de enlace público solo es necesaria para los servicios que requieren acceso público.


Tras crear los archivos containers.json y public-endpoint.json, el directorio del proyecto debe contener los siguientes archivos:

  • app.py
  • containers.json
  • Dockerfile
  • public-endpoint.json
  • requirements.txt
{
    "containerName": "flask",
    "containerPort": 5000
}

Paso 4c: implemente el contenedor en el servicio de contenedores con la CLI de AWS mediante el comando create-container-service-deployment.

El resultado del comando create-container-servicedeployment indica que el estado del servicio de contenedores ahora es “DEPLOYING”, como se muestra.

aws lightsail create-container-service-deployment --service-name flask-service --containers file://containers.json --public-endpoint file://public-endpoint.json

Salida:

{
    "containerServices": [{
        "containerServiceName": "flask-service",
         ...
        "state": "DEPLOYING",

Paso 4d: utilice el comando get-container-services para supervisar el estado del contenedor hasta que cambie a “RUNNING” antes de continuar con el siguiente paso.

El comando get-container-service también devuelve la URL del punto de enlace del servicio de contenedores.

Cuando el estado del servicio de contenedores cambie a “RUNNING”, lo que normalmente tarda unos minutos, diríjase a esta URL en su navegador para comprobar que el servicio de contenedores se está ejecutando correctamente. La salida de su navegador debería mostrar “Hello, World!” como antes.

aws lightsail get-container-services --service-name flask-service

Salida:

{
    "containerServices": [{
        "containerServiceName": "flask-service",
         ...
        "state": "RUNNING",
         ...        "url": "https://flask-service...

¡Felicidades! Ha implementado correctamente una aplicación Flask en contenedores con contenedores de Amazon Lightsail.

Paso 5: eliminar los recursos

Complete los siguientes pasos para el servicio de contenedores de Lightsail que creó como parte de este tutorial.

Paso 5a: para limpiar y eliminar los recursos de Lightsail, utilice el comando delete-container-service.

El comando delete-container-service elimina el servicio de contenedores, cualquier implementación de contenedor asociada y las imágenes de contenedor.

aws lightsail delete-container-service --service-name flask-service

Paso 5b: compruebe que no hay contenedores en ejecución con el comando get-container-services.

aws lightsail get-container-services

Salida:

{
    "containerServices": []
}

Conclusión

¡Felicidades! Ha implementado correctamente una aplicación Flask en contenedores con contenedores de Amazon Lightsail.


Amazon Lightsail es una excelente opción para desarrollar, crear e implementar una variedad de aplicaciones como WordPress, sitios web y plataformas de blogs.

Pasos siguientes

Para poder continuar su recorrido con AWS, siga los pasos siguientes en la sección a continuación.

¿Le resultó útil esta página?