So stellen Sie eine Flask-App bereit
TUTORIAL
Einführung
Amazon Lightsail ist ein einfach zu bedienender virtueller privater Server, der einen Container-Service bietet. Folgen Sie diesem Tutorial, um zu erfahren, wie Sie eine Flask-App im Lightsail-Container-Service bereitstellen.
In diesem Tutorial erstellen Sie eine Flask-Anwendung, entwickeln einen Docker-Container, erstellen einen Container-Service in Lightsail und stellen die Anwendung dann bereit.
Übersicht
In diesem Tutorial richten Sie einen Docker-Container auf Ihrem lokalen Computer ein, richten einen Container im Amazon-Lightsail-Service ein und starten „Hello, World!“-Anwendungen.
Voraussetzungen
Bevor Sie mit diesem Tutorial beginnen, benötigen Sie:
- Ein AWS-Konto: Wenn Sie noch keins haben, folgen Sie der Anleitung zum Einrichten Ihrer Umgebung, um einen schnellen Überblick zu erhalten.
- Eine ordnungsgemäß konfigurierte AWS-Befehlszeilenschnittstelle (CLI): Weitere Informationen zur Einrichtung der AWS-CLI finden Sie in der AWS-CLI-Dokumentation. Stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden, nämlich v2. Stellen Sie abschließend sicher, dass eine Region standardmäßig festgelegt ist. Andernfalls müssen Sie die Region angeben, wenn Sie Lightsail-Bereitstellungsbefehle ausgeben.
- Docker ist auf Ihrem lokalen Computer installiert.
- Installiertes und konfiguriertes Amazon Lightsail Control (lightsailctl)-Plugin: Weitere Informationen zur Installation von Lightsail Control finden Sie in der Lightsail-Control-Dokumentation.
AWS-Erfahrung
Mittelstufenkurs
Benötigte Zeit
30 Minuten
Kosten für die Fertigstellung
Kostenloses Kontingent ist verfügbar. Weitere Informationen finden Sie auf der Lightsail-Preisseite.
Erfordert
Ein aktives AWS-Konto
AWS-CLI
Amazon Lightsail Control
Docker
Verwendete Services
Amazon Lightsail
Letzte Aktualisierung
17. Oktober 2023
Implementierung
Schritt 1: eine Flask-Anwendung erstellen
Führen Sie die folgenden Schritte auf Ihrem lokalen Computer aus, auf dem Docker ausgeführt wird. Diese Schritte führen Sie durch den Prozess der Erstellung der Flask-Anwendungsdateien.
Schritt 1a: Erstellen Sie in der Befehlszeile Ihres lokalen Computers ein neues Projektverzeichnis und wechseln Sie zu diesem Verzeichnis.
mkdir lightsail-containers-flask
cd lightsail-containers-flask
Schritt 1b: Erstellen Sie eine neue Datei mit dem Namen app.py mit dem folgenden Code:
Diese minimale Flask-Anwendung enthält eine einzelne Funktion, hello_world, die ausgelöst wird, wenn die Route „/“ angefordert wird. Wenn sie ausgeführt wird, bindet sich diese Anwendung an alle IPs auf dem System („0.0.0.0“) und lauscht auf Port 5000, dem Standard-Flask-Port.
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)
Schritt 1c: Erstellen Sie eine neue Datei, requirements.txt. Bearbeiten Sie die Datei und fügen Sie den folgenden Code hinzu. Speichern Sie die Datei danach.
Die Dateien requirements.txt werden verwendet, um anzugeben, welche Python-Pakete von der Anwendung benötigt werden. Für diese minimale Flask-Anwendung ist nur ein Paket erforderlich – Flask.
flask===3.0.0
Schritt 1d: Erstellen Sie eine neue Datei mit dem Namen Dockerfile. Bearbeiten Sie die Datei und fügen Sie ihr den folgenden Code hinzu. Speichern Sie die Datei.
Das Python-Alpine-Image stellt sicher, dass der resultierende Container so kompakt und klein wie möglich ist. Der Befehl, der beim Starten des Containers ausgeführt wird, ist derselbe, als ob er über die Befehlszeile ausgeführt würde: 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" ]
Schritt 1e: Zu diesem Zeitpunkt sollte Ihr Verzeichnis die folgenden Dateien enthalten:
$ tree
.
├── app.py
├── Dockerfile
└── requirements.txt
0 Verzeichnisse, 3 Dateien
Schritt 2: Ihr Container-Image erstellen
Schritt 2a: Erstellen Sie den Container mit Docker. Verwenden Sie den folgenden Befehl aus demselben Verzeichnis wie das Dockerfile:
Dieser Befehl erstellt einen Container mit dem Dockerfile im aktuellen Verzeichnis und markiert den Container als „flask-container“.
docker build -t flask-container .
Schritt 2b: Sobald der Container-Build abgeschlossen ist, testen Sie die Flask-Anwendung lokal, indem Sie den Container ausführen.
docker run -p 5000:5000 flask-container
Schritt 2c: Die Flask-App wird im Container ausgeführt und auf Port 5000 für Ihr lokales System verfügbar gemacht. Gehen Sie zu http://localhost:5000 oder verwenden Sie curl von der Befehlszeile aus und Sie werden „Hello, World!“ sehen.
$ curl localhost:5000
Hello, World!
Schritt 3: Erstellen eines Container-Services
Führen Sie die folgenden Schritte aus, um den Lightsail-Container-Service mithilfe der AWS CLI zu erstellen, und übertragen Sie dann Ihr lokales Container-Image mithilfe des Lightsail-Steuer-Plug-ins (lightsailctl) auf Ihren neuen Container-Service.
Schritt 3a: Erstellen Sie einen Lightsail-Container-Service mit dem Befehl create-container-service.
Die Leistungs- und Skalierungsparameter geben die Kapazität des Container-Services an. Für eine minimale Flask-App ist nur wenig Kapazität erforderlich.
Die Ausgabe des Befehls create-container-service zeigt an, dass der Status des neuen Services „PENDING“ (ausstehend) ist. Sehen Sie sich den zweiten Codeblock an, um dies zu sehen.
aws lightsail create-container-service --service-name flask-service --power small --scale 1
Schritt 3b: Verwenden Sie den Befehl get-container-services, um den Status des Containers zu überwachen, während er erstellt wird.
Warten Sie, bis der Status des Container-Service auf „READY“ wechselt, bevor Sie mit dem nächsten Schritt fortfahren. Ihr Container-Service sollte nach ein paar Minuten bereit sein.
aws lightsail get-container-services
Ausgabe:
{
"containerService": {
"containerServiceName": "flask-service",
...
"state": "PENDING",
Ausgabe:
{
"containerService": {
"containerServiceName": "flask-service",
...
"state": "READY",
Schritt 3c: Schieben Sie den Anwendungs-Container mit dem Befehl push-container-image zu Lightsail.
Hinweis: Das X in „:flask-service.flask-container.X“ wird ein numerischer Wert sein. Wenn Sie zum ersten Mal ein Image an Ihren Container-Service übertragen, lautet diese Nummer 1. Diese Nummer benötigen Sie im nächsten Schritt.
aws lightsail push-container-image --service-name flask-service --label flask-container --image flask-container
Image „flask-container“ registriert.
… Benennen Sie in Bereitstellungen dieses Image „:flask-service.flask-container.X“.
Schritt 4: Den Container bereitstellen
Führen Sie die folgenden Schritte aus, um JSON-Dateien für die Bereitstellung und öffentliche Endpunktkonfiguration zu erstellen, und stellen Sie dann Ihr Container-Image für Ihren Container-Service bereit.
Schritt 4a: Erstellen Sie eine neue Datei, containers.json. Bearbeiten Sie die Datei und fügen Sie den folgenden Code hinzu.
Ersetzen Sie das X in: flask-service.flask-container.X durch den numerischen Wert aus dem vorherigen Schritt.
Speichern Sie die Datei.
Die Datei containers.json beschreibt die Einstellungen der Container, die im Container-Service gestartet werden. In diesem Fall beschreibt die Datei containers.json den Flask-Container, das Image, das er verwenden wird, und den Port, den er verfügbar machen wird.
{
"flask": {
"image": ":flask-service.flask-container.X",
"ports": {
"5000": "HTTP"
}
}
}
Schritt 4b: Erstellen Sie eine neue Datei, public-endpoint.json.
Bearbeiten Sie die Datei und fügen Sie den folgenden Code hinzu.
Speichern Sie die Datei.
Die Datei public-endpoint.json beschreibt die Einstellungen des öffentlichen Endpunkts für den Container-Service. In diesem Fall gibt die Datei public-endpoint.json an, dass der Flask-Container-Port 5000 verfügbar macht. Öffentliche Endpunkteinstellungen sind nur für Services erforderlich, die öffentlichen Zugriff benötigen.
Nachdem Sie die Dateien containers.json und public-endpoint.json erstellt haben, sollte Ihr Projektverzeichnis die folgenden Dateien enthalten:
- app.py
- containers.json
- Dockerfile
- public-endpoint.json
- requirements.txt
{
"containerName": "flask",
"containerPort": 5000
}
Schritt 4c: Stellen Sie den Container mit der AWS-CLI mithilfe des Befehls create-container-service-deployment für den Container-Service bereit.
Die Ausgabe des Befehls „create-container-service-deployment“ zeigt an, dass der Status des Container-Services jetzt wie gezeigt „DEPLOYING“ (wird bereitgestellt) lautet.
aws lightsail create-container-service-deployment --service-name flask-service --containers file://containers.json --public-endpoint file://public-endpoint.json
Ausgabe:
{
"containerServices": [{
"containerServiceName": "flask-service",
...
"state": "DEPLOYING",
Schritt 4d: Verwenden Sie den Befehl get-container-services, um den Status des Containers zu überwachen, bis er zu „RUNNING“ (wird ausgeführt) wechselt, bevor Sie mit dem nächsten Schritt fortfahren.
Der Befehl get-container-service gibt auch die Endpunkt-URL für den Container-Service zurück.
Nachdem sich der Status des Container-Services in „RUNNING“ geändert hat, was in der Regel einige Minuten dauert, navigieren Sie in Ihrem Browser zu dieser URL, um zu überprüfen, ob der Container-Service ordnungsgemäß ausgeführt wird. Ihre Browserausgabe sollte „Hello, World!“ anzeigen wie zuvor.
aws lightsail get-container-services --service-name flask-service
Ausgabe:
{
"containerServices": [{
"containerServiceName": "flask-service",
...
"state": "RUNNING",
... "url": "https://flask-service...
Herzlichen Glückwunsch! Sie haben erfolgreich mithilfe von Amazon-Lightsail-Containern eine containerisierte Flask-Anwendung bereitgestellt.
Schritt 5: Bereinigen der Ressourcen
Führen Sie die folgenden Schritte für den Lightsail-Container-Service aus, den Sie im Rahmen dieses Tutorials erstellt haben.
Schritt 5a: Verwenden Sie den Befehl delete-container-service, um Lightsail-Ressourcen zu bereinigen und zu löschen.
Der Befehl „delete-container-service“ entfernt den Container-Service, alle zugehörigen Container-Bereitstellungen und Container-Images.
aws lightsail delete-container-service --service-name flask-service
Schritt 5b: Stellen Sie sicher, dass keine Container ausgeführt werden, indem Sie den Befehl get-container-services verwenden.
aws lightsail get-container-services
Ausgabe:
{
"containerServices": []
}
Zusammenfassung
Herzlichen Glückwunsch! Sie haben erfolgreich mithilfe von Amazon-Lightsail-Containern eine containerisierte Flask-Anwendung bereitgestellt.
Amazon Lightsail ist eine hervorragende Option für die Entwicklung, Erstellung und Bereitstellung einer Vielzahl von Anwendungen, wie WordPress, Websites und Blog-Plattformen.