Distribuzione di un'app Flask

con container Amazon Lightsail

TUTORIAL

Introduzione

Amazon Lightsail è il server privato virtuale facile da usare che offre servizio di containerSegui questo tutorial per scoprire come distribuire un'app Flask sul servizio container di Lightsail.

In questo tutorial, costruisci un'applicazione Flask, crei un container Docker, quindi un servizio di container su LightSail e successivamente distribuisci l'applicazione.

Inizia a utilizzare Amazon Lightsail gratuitamente. 

Panoramica

In questo tutorial, configuri un container Docker sul tuo computer locale, configuri un container nel servizio Amazon Lightsail e avvii applicazioni "Hello, World!".

Prerequisiti

Prima di iniziare questo tutorial, avrai bisogno di:

  • Un account AWS: se non hai già un account, segui la guida introduttiva Configurazione del tuo ambiente per una panoramica rapida.
  • Un'interfaccia a riga di comando (CLI) AWS correttamente configurata: per ulteriori informazioni su come configurare l'interfaccia a riga di comando AWS, consulta la documentazione della CLI AWS. Assicurati di utilizzare la versione più recente della CLI AWS, ovvero la v2. Infine, assicurati che una regione sia impostata come predefinita o specificala durante l'invio dei comandi di distribuzione di Lightsail.
  • Docker installato sul tuo computer locale.
  • Plugin Amazon Lightsail Control (lightsailctl) installato e configurato: per ulteriori informazioni su come installare Lightsail Control, consulta la documentazione di Lightsail Control.

 Esperienza AWS

Intermedio

 Tempo per il completamento

30 minuti

 Costo richiesto per il completamento

Idoneo per il Piano gratuito. Per ulteriori informazioni, consulta la pagina dei prezzi di Lightsail.

 Requisiti

Account AWS attivo
AWS CLI
Controllo Amazon Lightsail
Docker

 Servizi utilizzati

Amazon Lightsail

 Ultimo aggiornamento

17 ottobre 2023

Implementazione

Passaggio 1: crea un'applicazione Flask

Completa i seguenti passaggi sul tuo computer locale su cui è in esecuzione Docker. Questi passaggi descrivono come creare i file dell'applicazione Flask.

Passaggio 1a: tramite la riga di comando del computer locale, crea una nuova directory di progetto e passa a quella directory.

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

Passaggio 1b: crea un nuovo file denominato app.py con il seguente codice:  

Questa piccola applicazione Flask contiene una singola funzione hello_world che viene attivata quando viene richiesto il percorso "/". Quando viene eseguita, questa applicazione si lega a tutti gli IP del sistema ("0.0.0.0") ed effettua il listening sulla porta 5000, che è la porta predefinita per 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)

Passaggio 1c: crea un nuovo file, requirements.txt. Modifica il file e aggiungi il seguente codice: Quindi salva il file.

I file requirements.txt vengono utilizzati per specificare quali pacchetti Python sono richiesti dall'applicazione. Per questa piccola applicazione Flask è richiesto un solo pacchetto, Flask.

flask===3.0.0

Passaggio 1d: crea un nuovo file denominato Dockerfile. Modifica il file e aggiungici il seguente codice: Salva il file.

L'immagine Python alpine assicura che il container risultante sia il più compatto e piccolo possibile. Il comando da eseguire all'avvio del container è lo stesso che verrebbe eseguito dalla riga di comando: 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" ]

Passaggio 1e: a questo punto, la cartella dovrebbe contenere i seguenti file:

$ tree
.

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

0 directories, 3 files

Passaggio 2: crea l'immagine del container

Passaggio 2a: crea il container tramite Docker. Usa il seguente comando dalla stessa directory del Dockerfile:

Questo comando crea un container utilizzando il Dockerfile nella directory corrente e contrassegna il container come "flask-container".

docker build -t flask-container .

Passaggio 2b: una volta completata la compilazione del container, prova l'applicazione Flask in locale eseguendo il container.

docker run -p 5000:5000 flask-container

Passaggio 2c: l'app Flask verrà eseguita nel container e verrà esposta sul sistema locale sulla porta 5000. Cerca sul browser su http://localhost:5000 oppure usa curl dalla riga di comando e vedrai visualizzato il messaggio "Hello, World!".

$ curl localhost: 5000

Hello, world!

Passaggio 3: crea un servizio container

Completa i passaggi seguenti per creare il servizio container Lightsail utilizzando la CLI AWS, quindi invia l'immagine del container locale al nuovo servizio container utilizzando il plug-in Lightsail control (lightsailctl).

Passaggio 3a: crea un servizio container Lightsail con il comando create-container-service.

I parametri di potenza e scalabilità specificano la capacità del servizio container. Per una piccola app flask, è sufficiente una capacità ridotta.

L'output del comando create-container-service indica che lo stato del nuovo servizio è "PENDING". Per vederlo, fai riferimento al secondo blocco di codice. 

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

Passaggio 3b: usa il comando get-container-services per monitorare lo stato del container durante la creazione.

Attendi che lo stato del servizio container diventi "READY" prima di procedere con il passaggio successivo. Il servizio container dovrebbe essere pronto dopo pochi minuti.

aws lightsail get-container-services

Output:

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

Output:

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

Passaggio 3c: invia il container dell'applicazione a Lightsail con il comando push-container-image

Nota: la X in ":flask-service.flask-container.X" è un valore numerico. Se è la prima volta che invii un'immagine al tuo servizio container, questo numero sarà 1. Avrai bisogno di questo numero nel passaggio successivo.

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

Immagine "flask-container" registrata.
...Riferisciti a questa immagine usando ":flask-service.flask-container.X" nelle distribuzioni.

Passaggio 4: distribuisci il container

Completa i passaggi seguenti per creare file JSON di distribuzione e configurazione degli endpoint pubblici, quindi distribuisci l'immagine del container nel tuo servizio container.

Passaggio 4a: crea un nuovo file containers.json. Modifica il file e aggiungi il seguente codice: 

Sostituisci la X in :flask-service.flask-container.X con il valore numerico del passaggio precedente. 

Salva il file.

Il file containers.json descrive le impostazioni dei container che verranno lanciati sul servizio container. In questo caso, il file containers.json descrive il container flask, l'immagine che utilizzerà e la porta che esporrà.

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

Passaggio 4b: crea un nuovo file public-endpoint.json

Modifica il file e aggiungi il seguente codice:

Salva il file.

Il file public-endpoint.json descrive le impostazioni dell'endpoint pubblico per il servizio container. In questo caso, il file public-endpoint.json indica che il container flask esporrà la porta 5000. Le impostazioni pubbliche degli endpoint sono richieste solo per i servizi che richiedono l'accesso pubblico.


Dopo aver creato i file containers.json e public-endpoint.json, la directory del progetto dovrebbe contenere i seguenti file:

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

Passaggio 4c: distribuisci il container nel servizio container tramite la CLI AWS utilizzando il comando create-container-service-deployment.

L'output del comando create-container-service-deployment indica che lo stato del servizio container è ora "DEPLOYING" come mostrato.

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

Output:

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

Passaggio 4d: usa il comando get-container-services per monitorare lo stato del container finché non diventa "RUNNING" prima di procedere con il passaggio successivo.

Il comando get-container-service restituisce anche l'URL dell'endpoint per il servizio container.

Dopo che lo stato del servizio container diventa "RUNNING", operazione che in genere richiede alcuni minuti, accedi a questo URL nel browser per verificare che il servizio container funzioni correttamente. L'output del browser dovrebbe mostrare "Hello, World!" come in precedenza.

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

Output:

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

Congratulazioni! Hai distribuito con successo un'applicazione Flask containerizzata utilizzando i container Amazon Lightsail.

Passaggio 5: elimina le risorse

Completa i seguenti passaggi per il servizio container Lightsail che hai creato nell'ambito di questo tutorial.

Passaggio 5a: per pulire ed eliminare le risorse Lightsail, usa il comando delete-container-service.

Il comando delete-container-service rimuove il servizio container, tutte le distribuzioni di container associate e le immagini del container.

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

Passaggio 5b: verifica che non vi siano container in esecuzione utilizzando il comando get-container-services.

aws lightsail get-container-services

Output:

{
    "containerServices": []
}

Conclusioni

Congratulazioni! Hai distribuito con successo un'applicazione Flask containerizzata utilizzando i container Amazon Lightsail.


Amazon Lightsail è un'ottima scelta per sviluppare, creare e implementare una varietà di applicazioni come WordPress, siti Web e piattaforme di blog.

Passaggi successivi

Puoi continuare il percorso con AWS consultando la sezione seguente sulle fasi successive.

Questa pagina è stata utile?