Distribuzione di un'app Flask
TUTORIAL
Introduzione
Amazon Lightsail è il server privato virtuale facile da usare che offre servizio di container. Segui 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.
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.