[PYTHON] Der erste Schritt beim Erstellen einer serverlosen Anwendung mit Zappa

Ich werde für den 8. Tag des Adventskalenders der Kinki-Universität 2019 verantwortlich sein, und Qiita wird der zweite Beitrag seit dem Sommer-Adventskalender von CSG sein. Werden. Dieses Mal können Sie mit Zappa problemlos AWS Lambda-basierte serverlose Anwendungen ausführen. Bitte haben Sie Verständnis dafür, dass es einige Unterschiede gibt, da es für Studenten geschrieben wurde.

Was ist eine serverlose Anwendung?

Bis vor einem Jahrzehnt war bei der Entwicklung von Client-Server-Anwendungen wie Webanwendungen ein Server erforderlich, und um Serverprogramme darin ausführen zu können, z. B. ein Webserver wie Apache. Es war üblich, Middleware namens Java Servlet-Container wie Tomcat einzurichten (ist sie etwas alt?). Eine Anwendung ohne Server (auch als Serverless Computing bezeichnet) ist eine Anwendung, die auf einer Plattform ausgeführt wird, die sofort ausgeführt wird, wenn ein Programm gestartet wird, ohne sich um die Infrastruktur eines solchen Servers kümmern zu müssen. Es ist nicht so, dass es keinen Server gibt. Wird Googles GAE (Google App Engine) die Antwort sein?

Was ist Lambda?

Lambda ist PaaS (Platform as a Service), das serverlose Anwendungen realisiert und einer der AWS-Services ist. Es unterstützt Sprachen wie Node.js, Python, Ruby, Java, Go und C # und kann Code als Reaktion auf verschiedene Trigger ausführen. Damit der Code auf Lambda als Webanwendung funktioniert, muss er mit einem Dienst namens AWS API Gateway zusammenarbeiten. Um eine serverlose Anwendung mit Lambda zu realisieren, ist es daher erforderlich, den Mechanismus des von AWS bereitgestellten Dienstes in gewissem Maße zu verstehen. Die Preisgestaltung von Lambda gilt grundsätzlich nur für den von Ihnen ausgeführten Code. Wenn Sie es nicht verschieben, wird Ihnen keine Gebühr berechnet (der Code wird in S3 gespeichert, daher wird Ihnen eine Gebühr berechnet), und es gibt eine kostenlose Stufe (1.000.000 Anfragen / Monat), die ich Lambda persönlich empfehle.

Was ist Zappa?

In Python gibt es mehrere Webanwendungs-Frameworks, von denen eines [Flask] ist (https://www.fullstackpython.com/flask.html). Flask wird als leichtes Framework mit minimaler Funktionalität angesehen. Flask eignet sich jedoch für kleine Anwendungen, da es standardmäßig mit einer Template-Engine namens Jinja2 geliefert wird.

Das Hauptthema Zappa ist ein Framework, das flaschenbasierte serverlose Anwendungen mithilfe von Diensten wie Lambda und API Gateway von AWS realisiert. Die Verwendung von Zappa hat den Vorteil, dass Sie sich nicht um die Beschreibung des Teils kümmern müssen, der Lambda und API Gateway verbindet.

Daher möchte ich sagen, dass es sich bei Zappa um eine klare Entwicklung handelt. Wenn Sie dies jedoch ohne Wissen tun, ist es schwierig, die Umgebung zu verbessern. Daher werde ich die Mindestinformationen und Schlüsselwörter auflisten. Versuchen Sie, die unbekannten Schlüsselwörter selbst herauszufinden.

Zunächst die AWS-Einstellungen

Da wir AWS verwenden, sind minimale Umgebungseinstellungen erforderlich. Hier ist was zu tun ist. Wenn Sie es nicht wissen, schauen Sie woanders hin. (1) Registrieren Sie sich als Benutzer, damit Sie AWS verwenden können (eine große und große Voraussetzung). (2) Erstellen Sie mit IAM ein Konto, das Lambda oder API Gateway verwendet. Um AWS-Services verwenden zu können, müssen Sie ein Konto mit einem Verwaltungstool namens IAM erstellen (auf das über den AWS-Webverwaltungsbildschirm zugegriffen werden kann). Notieren Sie sich nach dem Erstellen die Zugangsschlüssel-ID, den geheimen Zugangsschlüssel usw. (3) Installieren Sie aws-cli. Das Einrichten von AWS-Diensten erfolgt grundsätzlich im Web. Hierbei handelt es sich jedoch um eine Reihe von Tools zum Betreiben von AWS-Diensten über die Befehlszeile. Zappa automatisiert die Integration zwischen API Gateway und Lambda, verwendet jedoch intern aws-cli. (4) Führen Sie aws configure aus. Dies ist die Standardeinstellung für die Verwendung von aws-cli. Zusätzlich zur Eingabe der oben erhaltenen Zugriffsschlüssel-ID und des geheimen Zugriffsschlüssels müssen der Regionsname und das Ausgabeformat festgelegt werden.

(Ergänzung) Informationen zur Einstellung der Kontorolle in IAM

Es gibt nur sehr wenige Informationen dazu, und ich habe sie möglicherweise falsch verstanden, aber es ist erforderlich, die Berechtigung (Rolle) für den Zugriff auf Lambda, API-Gateway usw. für das von IAM erstellte Konto festzulegen. Unzureichende Einstellungen führen zu einem berechtigungsbezogenen Fehler bei der Bereitstellung mit zappa. zappa Vielleicht verstehe ich das falsch, aber es ist notwendig, die Berechtigung (Rolle) für den Zugriff auf Lambda, API-Gateway usw. für das von IAM erstellte Konto festzulegen. Unzureichende Einstellungen führen zu einem berechtigungsbezogenen Fehler bei der Bereitstellung mit zappa. Ich hatte das Gefühl, dass Zappa es automatisch einstellen würde, aber aus irgendeinem Grund funktionierte es nicht. In diesem Fall tritt also kein Fehler auf, wenn Sie vorerst die folgende Rolle hinzufügen.

Ist es mit AWS in Ordnung mit AWS? ..

Installieren Sie Zappa

Vorher scheint Zappa unter der Voraussetzung von virtualenv zu arbeiten. Erstellen wir also eine virtuelle Umgebung mit Python und installieren Sie sie in dieser Umgebung. In meinem Fall habe ich eine virtuelle Umgebung mit Anaconda (GUI) erstellt, aber auch unter dieser Umgebung war dies in Ordnung. Die Installation von Zappa ist wie folgt.

$ pip install flask
$ pip install zappa

Initialisierungsdatei erstellen

Erstellen Sie eine Initialisierungsdatei mit Zappa init

$ zappa init

Durch Ausführen dieses Befehls wird eine Datei mit dem Namen zappa_settings.js erstellt.

Fehler in zappa init

Ich werde aufschreiben, was zu tun ist, wenn der folgende Fehler auftritt.

"Zappa requires an active virtual environment

```→ Virtuell mit Umgebungsvariablen_Bitte setzen Sie env.

```Fehler: Zappa-Init-Fehler'utf8' codec can't decode byte 0x**
```→ Dieser Fehler scheint nur ein Verzeichnisspeicherort (oder eine Berechtigung?) Zu sein. Problem. Navigieren Sie zum Python-Projektdateiordner (den Sie gerade erstellen) und führen Sie init erneut aus.

#### Informationen zur Datei zappa_settings.json
 Der Befehl zappa stellt das Projekt gemäß den in dieser Datei enthaltenen Informationen bereit. Ändern Sie die Datei nach Bedarf. Der Punkt hier ist, dass durch Ändern der Variablen mit dem Namen project_name wie ein anderes Projekt behandelt wird. Mit anderen Worten, es handelt sich um eine andere Lambda-Funktion, und die URL im API-Gateway ändert sich ebenfalls. Es scheint auch, dass der Parameter von app_function die Datei des auszuführenden Hauptprogramms bestimmt.


#### **`zappa_settings.json`**
```json

{
    "dev": {
        "app_function": "test.app", 
        "profile_name": "default",← AWS-Profil
        "project_name": "test-app7", 
        "aws_region": "us-east-1",
        "runtime": "python3.7",
        "apigateway_enabled": true,
        "s3_bucket": "*******"← Bitte ändern Sie einen geeigneten Namen
    }
}

Beispielcode

Auszugebende HTML-Datei. Bitte beachten Sie, dass sich der Speicherort der Datei unter Templete befindet.

template/index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>HELLO</title>
</head>
<body>
    <p>Merry Christmas</p>
</body>
</html>

Python-Code

test.py


from flask import Flask, render_template
app = Flask(__name__)
 
@app.route('/')
def hello():
    html = render_template('index.html')
    return html
 
if __name__ == "__main__":
    app.run()

Darüber hinaus ist es ein langweiliges Beispiel. .. ..

zappa Befehl (bereitstellen, aktualisieren, löschen)

Nach dem Vorbereiten der obigen Datei wird der Rest des Vorgangs wie folgt ausgeführt.

(Wenn Sie ein Projekt zum ersten Mal bereitstellen)
$ zappa deploy dev
(Beim Aktualisieren)
$ zappa update dev
(Beim Löschen)
$zappa undeploy dev

Wenn Sie es ausführen, wird die URL angezeigt, sodass Sie es ausführen können, indem Sie darauf zugreifen.

Wie wäre es mit? Wenn Sie die oben genannten Schritte ausführen, müssen Sie lediglich die App implementieren. Sie können es leicht veröffentlichen, also versuchen Sie es bitte!

Recommended Posts

Der erste Schritt beim Erstellen einer serverlosen Anwendung mit Zappa
Ich habe zum ersten Mal versucht, mit DynamoDB und Step Functions eine serverlose Stapelverarbeitung zu erstellen
[Einführung in die Udemy Python3 + -Anwendung] 47. Verarbeiten Sie das Wörterbuch mit einer for-Anweisung
Speichern Sie das Objekt in einer Datei mit pickle
AWS-Schrittfunktionen zum Lernen anhand eines Beispiels
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Der erste Schritt, um Blender von Python verfügbar zu machen
Übergang zum Update-Bildschirm mit dem Django-Tag
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
Wahrscheinlich der einfachste Weg, um mit Python 3 ein PDF zu erstellen
Python> Liste> Partitionen = [0] * len (all_filepaths) / Partitionen [: test_set_size] = [1] * Nachdem Sie eine Liste mit test_set_size> 0 erstellt haben, setzen Sie den vorderen Teil auf 1.
Eine Geschichte über den Umgang mit dem CORS-Problem
Die übliche Art, einen Kernel mit Jupyter Notebook hinzuzufügen
Weg zum Assistenten: Schritt 8 (Interpretieren, wie man ein Hacker wird)
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
Eine Geschichte, bei der es mir schwer gefallen ist, mit der ersten Webanwendung eine "App zu erstellen, die Bilder wie Gemälde konvertiert"
Beachten Sie, dass ich süchtig danach war, mit Pythons mysql.connector über eine Webanwendung auf die Datenbank zuzugreifen
Lassen Sie uns die Analysesoftware von Wiire in eine WEB-Anwendung verwandeln! Erster Schritt!
Erstellen eines sequentiellen Tensorflow-Modells mit einem zu MNIST hinzugefügten Originalbild
Vorsichtsmaßnahmen beim Erstellen eines zweidimensionalen Arrays mit denselben Werten
TensorFlow 2.X & TensorRT ist der erste Schritt, um die Inferenz zu beschleunigen
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Ein Hinweis, dem ich beim Erstellen einer Tabelle mit SQL Alchemy verfallen war
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
Raspberry Pi --1 - Zum ersten Mal (Schließen Sie einen Temperatursensor an, um die Temperatur anzuzeigen)
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ein Skript, das 0, 1 an die erste Python-Primzahl zurückgibt
Die Entwicklung einer Webanwendung ist noch weit entfernt
So senden Sie eine Anfrage mit Python an die DMM (FANZA) -API
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Weg zum Assistenten: 4. Schritt
Schritt für Schritt zum Erstellen einer Docker-Datei
Erstellen eines bestimmten Baums mit Scikit-Learn
Erstellen eines Flask-Servers mit Docker
Web Scraping mit Python Erster Schritt
Stellen Sie die Django-Anwendung mit Docker bereit
Erstellen Sie eine Webanwendung mit Django
Erstellen einer Webanwendung mit Flask ①
Erstellen einer Webanwendung mit Flask ③
Erstellen einer Webanwendung mit Flask ④
Der erste Schritt von Python Matplotlib
Weg zum Assistenten: 7. Schritt
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
Überlegen Sie, wie Sie einen Filter mit den Shotgun API-Contact-Versionen schreiben
Ich war süchtig danach, eine Python-Venv-Umgebung mit VS Code zu erstellen
[Django] Erstellt ein Feld zur Eingabe von Daten mit 4-stelligen Zahlen
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)