Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Bereitstellen einer Flask-Anwendung in Elastic Beanstalk
Dieses Tutorial führt Sie durch den Prozess der Generierung einer Flask-Anwendung und deren Bereitstellung in einer AWS Elastic Beanstalk Umgebung. Flask ist ein Open Source-Framework für Python-Webanwendungen.
In diesem Tutorial führen Sie folgende Aufgaben durch:
Voraussetzungen
In diesem Tutorial wird davon ausgegangen, dass Sie die grundlegenden Elastic Beanstalk-Operationen und die Elastic Beanstalk-Konsole kennen. Sofern noch nicht geschehen, starten Sie anhand der Anleitung in Erste Schritte mit Elastic Beanstalk die erste Elastic-Beanstalk-Umgebung.
Für die Verfahren in diesem Leitfaden benötigen Sie ein Befehlszeilen-Terminal oder eine Shell für die Ausführung der Befehle. Befehle werden ggf. in Auflistungen mit einem vorangestellten Eingabeaufforderungssymbol ($) und dem Namen des aktuellen Verzeichnisses angezeigt.
~/eb-project$ this is a command
this is output
In Linux und macOS können Sie Ihren bevorzugten Shell- und Paket-Manager verwenden. Unter Windows können Sie das Windows-Subsystem für Linux installieren
Flask erfordert Python 3.7 oder höher. In diesem Tutorial verwenden wir Python 3.7 und die entsprechende Elastic Beanstalk-Plattformversion. Installieren Sie Python mithilfe der Anleitung unter Einrichtung Ihrer Python-Entwicklungsumgebung für Elastic Beanstalk.
Das Flask
In diesem Tutorial wird auch das Elastic Beanstalk Command Line Interface (EBCLI) verwendet. Einzelheiten zur Installation und Konfiguration des EB finden Sie CLI unter Installieren Sie die Elastic Beanstalk Beanstalk-Befehlszeilenschnittstelle und. Konfigurieren der EB CLI
Einrichten einer virtuellen Python-Umgebung mit Flask
Erstellen Sie ein Projektverzeichnis sowie eine virtuelle Umgebung für Ihre Anwendung, und installieren Sie Flask.
So richten Sie die Projektumgebung ein
-
Erstellen Sie ein Projektverzeichnis.
~$
mkdir eb-flask
~$cd eb-flask
-
Erstellen und aktivieren Sie eine virtuelle Umgebung mit dem Namen
virt
:~/eb-flask$
virtualenv virt
~$source virt/bin/activate
(virt) ~/eb-flask$In der Eingabeaufforderung wird
(virt)
vorangestellt, sodass Sie wissen, dass Sie in einer virtuellen Umgebung arbeiten. Verwenden Sie die virtuelle Umgebung für den Rest dieses Tutorials. -
Installieren Sie Flask mit
pip install
:(virt)~/eb-flask$
pip install flask==2.0.3
-
Zeigen Sie die installierten Bibliotheken mit
pip freeze
an:(virt)~/eb-flask$
pip freeze
click==8.1.1 Flask==2.0.3 itsdangerous==2.1.2 Jinja2==3.1.1 MarkupSafe==2.1.1 Werkzeug==2.1.0Mit diesem Befehl werden alle Pakete aufgeführt, die in der virtuellen Umgebung installiert sind. Da Sie sich in einer virtuellen Umgebung befinden, werden global installierte Pakete wie das EB CLI nicht angezeigt.
-
Speichern Sie die Ausgabe aus
pip freeze
als Datei mit dem Namenrequirements.txt
.(virt)~/eb-flask$
pip freeze > requirements.txt
Diese Datei weist Elastic Beanstalk an, die Bibliotheken während der Bereitstellung zu installieren. Weitere Informationen finden Sie unter Angeben von Abhängigkeiten mithilfe einer Anforderungsdatei auf Elastic Beanstalk.
Erstellen einer Flask-Anwendung
Erstellen Sie anschließend eine Anwendung, die Sie mit Elastic Beanstalk bereitstellen. Wir werden einen „Hello World“ RESTful -Webservice erstellen.
Erstellen Sie eine neue Textdatei in diesem Verzeichnis mit dem Namen application.py
mit folgendem Inhalt:
Beispiel ~/eb-flask/application.py
from flask import Flask # print a nice greeting. def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # some bits of text for the page. header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # EB looks for an 'application' callable by default. application = Flask(__name__) # add a rule for the index page. application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # add a rule when the page is accessed with a name appended to the site # URL. application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # run the app. if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production app. application.debug = True application.run()
In diesem Beispiel wird eine benutzerdefinierte Begrüßung gedruckt, die je nach Pfad, der für den Zugriff auf den Service verwendet wurde, variiert.
Anmerkung
Indem Sie application.debug = True
vor der Ausführung der Anwendung hinzufügen, ist das Debuggen der Ausgabe aktiviert, falls ein Problem auftritt. Es ist eine bewährte Methode für die Entwicklung, Sie sollten jedoch Debug-Anweisungen im Produktionscode entfernen, da eine Debug-Ausgabe interne Aspekte Ihrer Anwendung offenlegen kann.
Verwenden Sie application.py
als Dateinamen und geben Sie ein aufrufbares application
-Objekt an (in diesem Fall das Flask-Objekt), damit Elastic Beanstalk den Code Ihrer Anwendung leichter finden kann.
Führen Sie application.py
mit Python aus:
(virt) ~/eb-flask$ python application.py
* Serving Flask app "application" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 313-155-123
Öffnen Sie http://127.0.0.1:5000/
in Ihrem Webbrowser. Sie sollten sehen, dass die Anwendung ausgeführt wird. Dabei wird folgende Indexseite angezeigt:
Rufen Sie die Ausgabe der Anforderung im Serverprotokoll auf. Mit Ctrl+C stoppen Sie den Server und kehren in die virtuelle Umgebung zurück.
Wenn Sie stattdessen eine Debug-Ausgabe erhalten, beheben Sie die Fehler und stellen Sie sicher, dass die Anwendung lokal ausgeführt wird, bevor Sie sie für Elastic Beanstalk konfigurieren.
Stellen Sie Ihre Website mit dem EB bereit CLI
Die Anwendung kann nun in Elastic Beanstalk bereitgestellt werden. Das Projektverzeichnis sollte wie folgt aussehen:
~/eb-flask/
|-- virt
|-- application.py
`-- requirements.txt
Der virt
-Ordner ist jedoch für die Ausführung der Anwendung in Elastic Beanstalk nicht erforderlich. Bei der Bereitstellung erstellt Elastic Beanstalk eine neue virtuelle Umgebung auf den Server-Instances und installiert die in requirements.txt
aufgeführten Bibliotheken. Um die Größe des Quellpakets, das Sie während der Bereitstellung hochladen, zu minimieren, fügen Sie eine .ebignore-Datei hinzu, die den EB anweist, CLI den Ordner wegzulassen. virt
Beispiel ~/eb-flask/.ebignore
virt
Im nächsten Schritt erstellen Sie die Anwendungsumgebung und stellen die konfigurierte Anwendung in Elastic Beanstalk bereit.
So erstellen Sie eine Umgebung und stellen die Flask-Anwendung bereit
-
Initialisieren Sie Ihr CLI EB-Repository mit dem folgenden Befehl: eb init
~/eb-flask$
eb init -p python-3.7 flask-tutorial --region us-east-2
Application flask-tutorial has been created.Mit diesem Befehl wird die neue Anwendung
flask-tutorial
erstellt und das lokale Repository wird zur Umgebungserstellung mit der neuesten Python 3.7-Plattformversion eingerichtet. -
(optional) Führen Sie den Vorgang eb init erneut aus, um ein Standard-Schlüsselpaar zu konfigurieren, sodass Sie eine Verbindung zu der EC2 Instance herstellen können, auf der Ihre Anwendung ausgeführt wird. Verwenden Sie dazu: SSH
~/eb-flask$
eb init
Do you want to set up SSH for your instances? (y/n):y
Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]Wählen Sie ein vorhandenes Schlüsselpaar aus (sofern vorhanden) oder befolgen Sie die Aufforderungen, um ein neues Paar zu erstellen. Falls keine Anweisungen angezeigt werden oder Sie die Einstellungen später ändern möchten, führen Sie eb init -i aus.
-
Verwenden Sie eb create, um eine Umgebung zu erstellen und die Anwendung darin bereitzustellen:
~/eb-flask$
eb create flask-env
Das Erstellen der Umgebung benötigt etwa fünf Minuten. Dabei werden die folgenden Ressourcen erstellt:
-
EC2Instanz — Eine virtuelle Maschine von Amazon Elastic Compute Cloud (AmazonEC2), die für die Ausführung von Web-Apps auf der von Ihnen ausgewählten Plattform konfiguriert ist.
Jede Plattform führt eine spezifische Gruppe von Software, Konfigurationsdateien und Skripts zur Unterstützung einer bestimmten Sprachversion, eines Frameworks, Webcontainers oder einer Kombination daraus aus. Die meisten Plattformen verwenden entweder Apache oder NGINX als Reverse-Proxy, der sich vor Ihrer Web-App befindet, Anfragen an diese weiterleitet, statische Ressourcen bereitstellt und Zugriffs- und Fehlerprotokolle generiert.
-
Instance-Sicherheitsgruppe — Eine EC2 Amazon-Sicherheitsgruppe, die so konfiguriert ist, dass sie eingehenden Datenverkehr auf Port 80 zulässt. Diese Ressource ermöglicht es dem HTTP Datenverkehr vom Load Balancer, die EC2 Instance zu erreichen, auf der Ihre Web-App ausgeführt wird. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.
-
Load balancer (Load Balancer)– Ein Elastic Load Balancing Load Balancer ist für die Verteilung von Anforderungen an die Instances, auf denen Ihre Anwendung ausgeführt wird, konfiguriert. Mit einem Load Balancer müssen Ihre Instances nicht mehr direkt für das Internet zugänglich gemacht werden.
-
Load Balancer-Sicherheitsgruppe — Eine EC2 Amazon-Sicherheitsgruppe, die so konfiguriert ist, dass sie eingehenden Verkehr auf Port 80 zulässt. Diese Ressource ermöglicht es dem HTTP Datenverkehr aus dem Internet, den Load Balancer zu erreichen. Standardmäßig ist Datenverkehr auf anderen Ports nicht zulässig.
-
Auto Scaling group (Auto Scaling-Gruppe) – Eine Auto Scaling-Gruppe, die so konfiguriert ist, dass sie eine Instance ersetzt, wenn diese beendet wird oder nicht verfügbar ist.
-
Amazon S3-Bucket – Ein Speicherort für Ihren Quellcode, Protokolle und andere Artefakte, die bei der Verwendung von Elastic Beanstalk erstellt werden.
-
CloudWatch CloudWatch Amazon-Alarme — Zwei Alarme, die die Auslastung der Instances in Ihrer Umgebung überwachen und ausgelöst werden, wenn die Last zu hoch oder zu niedrig ist. Wenn ein Alarm ausgelöst wird, wird Ihre Auto Scaling-Gruppe nach oben oder nach unten skaliert.
-
AWS CloudFormation stack — Elastic Beanstalk verwendet AWS CloudFormation , um die Ressourcen in Ihrer Umgebung zu starten und Konfigurationsänderungen zu propagieren. Die Ressourcen werden in einer Vorlage definiert, die Sie in der AWS CloudFormation -Konsole
anzeigen können. -
Domainname — Ein Domainname, der in der folgenden Form an Ihre Web-App weitergeleitet wird
subdomain
.region
.elasticbeanstalk.com.Domain-Sicherheit
Wenn Sie jemals sensible Cookies im Standard-Domainnamen für Ihre Elastic Beanstalk Beanstalk-Anwendungen einrichten müssen, empfehlen wir Ihnen, Cookies mit einem
__Host-
Präfix zu verwenden, um die Sicherheit zu erhöhen. Diese Vorgehensweise schützt Ihre Domain gegen Versuche zur Fälschung von Cross-Site-Requests (). CSRF Weitere Informationen finden Sie auf der Set-Cookie-Seite im Mozilla Developer Network.
All diese Ressourcen werden von Elastic Beanstalk verwaltet. Wenn Sie die Umgebung beenden, werden alle darin enthaltenen Ressourcen von Elastic Beanstalk beendet.
Anmerkung
Der von Elastic Beanstalk erstellte Amazon S3-Bucket wird von den Umgebungen gemeinsam genutzt und beim Beenden einer Umgebung nicht gelöscht. Weitere Informationen finden Sie unter Verwenden von Elastic Beanstalk mit Amazon S3.
Wenn die Umgebungserstellung abgeschlossen ist, öffnen Sie die Website mit eb open:
~/eb-flask$ eb open
Es wird ein Browserfenster mit dem für die Anwendung erstellten Domainnamen geöffnet. Sie sollten dieselbe Flask-Website sehen, die Sie erstellt und lokal getestet haben.
Falls die Anwendung nicht ausgeführt wird oder Sie eine Fehlermeldung erhalten, finden Sie unter Troubleshooting deployments (Behebung von Bereitstellungsfehlern) weitere Informationen zur Ermittlung der Fehlerursache.
Wenn Sie die Anwendung ausführen, haben Sie Ihre erste Flask-Anwendung mit Elastic Beanstalk bereitgestellt. Herzlichen Glückwunsch!
Bereinigen
Wenn Sie nicht mehr mit Elastic Beanstalk arbeiten, können Sie Ihre Umgebung beenden. Elastic Beanstalk beendet alle AWS Ressourcen, die mit Ihrer Umgebung verknüpft sind, wie EC2Amazon-Instances, Datenbank-Instances, Load Balancer, Sicherheitsgruppen und Alarme.
So beenden Sie Ihre Elastic Beanstalk Beanstalk-Umgebung über die Konsole
Öffnen Sie die Elastic Beanstalk Beanstalk-Konsole
und wählen Sie in der Liste Regionen Ihre aus. AWS-Region -
Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.
Anmerkung
Wenn Sie viele Umgebungen haben, filtern Sie Umgebungsliste mit der Suchleiste.
-
Klicken Sie auf Actions (Aktionen) und dann auf Terminate Environment (Umgebung beenden).
-
Verwenden Sie das Dialogfeld auf dem Bildschirm, um die Beendigung der Umgebung zu bestätigen.
Mit Elastic Beanstalk können Sie ganz einfach und jederzeit eine neue Umgebung für Ihre Anwendung erstellen.
Oder mit dem EB: CLI
~/eb-flask$ eb terminate flask-env
Nächste Schritte
Weitere Informationen über Flask finden Sie unter flask.pocoo.org
Unter Bereitstellen einer Django-Anwendung in Elastic Beanstalk steht Ihnen ein weiteres Python-Web-Framework zur Verfügung.