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.
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?
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.
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.
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.
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? ..
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
Erstellen Sie eine Initialisierungsdatei mit Zappa init
$ zappa init
Durch Ausführen dieses Befehls wird eine Datei mit dem Namen zappa_settings.js erstellt.
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
}
}
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. .. ..
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