Amazon API Gateway und AWS Lambda werden über die CLI halbautomatisch angeklickt. Es scheint, dass es gemacht werden kann. Ich mag AWS Lambda (und Amazon API Gateway), also habe ich es berührt.
Es wird empfohlen, eine virtuelle Umgebung mit AWS Chalice Hands-on zu erstellen. Erstellen Sie sie daher nach Bedarf. Ich werde.
$ pip install virtualenv
# 『~/.virtualenvs/chalice-"handson" ist der Umgebungsname
#Jeder Umgebungsname ist in Ordnung, da er nur mit AWS zum Anfassen übereinstimmt.
virtualenv ~/.virtualenvs/chalice-handson
$ source ~/.virtualenvs/chalice-handson/bin/activate
#"Quelle" ist ".] Kann ersetzt werden, daher hat der folgende Befehl dieselbe Bedeutung wie oben.
$ . ~/.virtualenvs/chalice-handson/bin/activate
Wenn Sie die virtuelle Umgebung beenden möchten, verwenden Sie den folgenden Befehl. Selbst wenn Sie die virtuelle Umgebung verlassen, bleiben die erstellten Dateien der virtuellen Umgebung erhalten, sodass Sie die virtuelle Umgebung aufrufen können, indem Sie den Befehl enable erneut eingeben.
$ deactivate
$ pip install chalice
#Überprüfen Sie, ob es installiert wurde
$ chalice --version
chalice 1.12.0, python 3.7.3, darwin 19.6.0
Wenn ~ / .aws / credentials
und ~ / .aws / config
nicht vorhanden sind, setzen Sie sie mit dem folgenden Befehl.
Andernfalls werden Sie bei der Bereitstellung in AWS verärgert.
$ aws configure
Nachdem wir fertig sind, werfen wir einen kurzen Blick auf den Ablauf von der Projekterstellung bis zur Bereitstellung in AWS. Erstellen Sie zunächst ein Projekt mit dem folgenden Befehl.
#"Helloworld" ist der Projektname, der in AWS zum Anfassen verwendet wird, und jeder Projektname kann angegeben werden.
$ chalice new-project helloworld
Die folgenden Dateien werden durch Erstellen eines Projekts erstellt.
.
├── .chalice
│ └── config.json
├── .gitignore
├── app.py
└── requirements.txt
Der Inhalt der automatisch erstellten app.py
lautet wie folgt.
Der Inhalt ist einfach und gibt beim Zugriff auf den Index des API-Gateway-Endpunkts {'Hallo': 'Welt'} als Antworttext zurück.
Der Antworttext {'Hallo': 'Welt'} wird mit {'Hallo': 'Welt'} festgelegt, auch wenn der Projektname nicht helloworld ist.
from chalice import Chalice
app = Chalice(app_name = 'helloworld')
@app.route('/')
def index():
return {'hello': 'world'} #Auch wenn der Projektname nicht helloworld ist, hier{'hello': 'world'}ist
Probieren Sie es in Ihrer lokalen Umgebung aus, um festzustellen, ob es sich tatsächlich wie oben beschrieben verhält (gibt es beim Zugriff {'Hallo': 'Welt'} zurück)? Sie können den lokalen Server mit dem folgenden Befehl starten. : + 1: Einfach und nett!
$ chalice local
Serving on http://127.0.0.1:8000
Wenn Sie versuchen, mit einem Browser darauf zuzugreifen, sollte "{" Hallo ":" Welt "}" angezeigt werden.
Es sieht in Ordnung aus, also lassen Sie es uns in AWS bereitstellen, damit von außen darauf zugegriffen werden kann. Die Bereitstellung ist einfach. Führen Sie einfach den folgenden Befehl aus:
$ chalice deploy
Anschließend wird in AWS automatisch Folgendes erstellt.
Nach der Bereitstellung lautet die Konfiguration wie folgt.
.
├── .chalice
│ ├── config.json
│ ├── deployed
│ │ └── dev.json
│ └── deployments
│ └── xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-python3.8.zip
├── .gitignore
├── app.py
└── requirements.txt
Schließlich wird der API-Gateway-Endpunkt als "Rest-API-URL" angezeigt. Greifen Sie also mit einem Browser darauf zu. Wenn Sie die Rest-API-URL nicht kennen, können Sie sie mit dem folgenden Befehl anzeigen.
$ chalice url
Nachdem Sie die Grundlagen der Verwendung von AWS Chalice kennengelernt haben, sehen wir uns einige weitere Steuerungsfunktionen an.
Sie können Parameter in das Pfadmuster @ app.route ('/')
von app.py
schreiben, wie unten gezeigt, und Sie können den als Parameter empfangenen Wert als Argument in der Methode verwenden.
from chalice import Chalice
app = Chalice(app_name = 'helloworld')
@app.route('/')
def index():
return {'hello': 'world'}
#Fügen Sie Folgendes hinzu
@app.route('/hello/{name}')
def greet(name):
return {'hello': name}
Führen Sie nach dem Bearbeiten von "app.py" erneut "Kelch bereitstellen" aus. Fügen Sie nach Abschluss der Bereitstellung "/ hello /" beliebiger Wert "" zum API-Gateway-Endpunkt hinzu und greifen Sie mit einem Browser darauf zu. Sie sollten "{" Hallo ":" "beliebiger Wert" "}" sehen. Bitte beachten Sie, dass der als "beliebiger Wert" übergebene Wert eine Zeichenfolge ist, auch wenn es sich um einen numerischen Wert handelt.
Die HTTP-Methode kann angegeben werden, indem die Methode wie folgt in @ app.route ('/')
von app.py
geschrieben wird.
from chalice import Chalice
app = Chalice(app_name = 'helloworld')
@app.route('/')
def index():
return {'hello': 'world'}
@app.route('/hello/{name}')
def greet(name):
return {'hello': name}
#Fügen Sie Folgendes hinzu
@app.route('/hello', methods = ['POST'])
def hello():
return {'hello': 'POST world'}
Führen Sie nach dem Bearbeiten von "app.py" erneut "Kelch bereitstellen" aus. Der diesmal hinzugefügte POST kann nicht vom Browser bestätigt werden. Überprüfen Sie ihn daher schnell im interaktiven Modus von Python.
$ python
>>> import requests #Wenn keine Anforderungen enthalten sind, installieren Sie Pip-Anforderungen
>>> response = requests.post('"API Gateway Endpoint"/hello', data = {})
>>> print(response.text)
{"hello":"POST world"}
Der Code von hier beschreibt nur den Änderungsblock und die Antwort. Die Metadatenerfassung wird in Form von "app.current_request." Honyara "" angegeben. HTTP Method
@app.route('/hello')
def hello():
return {'metadata': app.current_request.method}
#Antwort
{"metadata":"GET"}
Query Parameters
@app.route('/hello')
def hello():
return {'metadata': app.current_request.query_params}
#Antwort (Anfrage ist/hello?test1=abc&test2=123&test2=456)
#Wenn in der Anfrage ein gleichnamiger Parameter angegeben ist, gewinnt der Kelch später (test2)=123&test2=456 ist test2=Werden Sie 456)
{"metadata":{"test1":"abc","test2":"456"}}
Request Body - Raw Ruft den Anforderungshauptteil im Bytetyp ab. Wenn "Content-Type: application / json", können Sie "app.current_request.json_body" anstelle von "app.current_request.raw_body" verwenden. Dies ist ein Zeichenfolgentyp.
@app.route('/hello')
def hello():
return {'metadata': app.current_request.raw_body}
#Anfrage
$ python
>>> import requests, json
>>> response = requests.post('"API Gateway Endpoint"/hello', data = json.dumps({'hello': 'world'}), headers = {'Content-Type': 'application/json' })
>>> print(response.text)
#Antwort
{"metadata":{"hello":"world"}}
Schauen wir uns als nächstes die Antwort an.
Wenn Sie einen beliebigen Statuscode oder Header zurückgeben möchten, geben Sie ihn mit beliebigen Informationen zurück, die im Antwortklassenobjekt enthalten sind. Vergessen Sie nicht die "Importantwort". (Es spielt keine Rolle, aber ich habe "json.dumps" ohne "json.dump" und "s" geschrieben und "{" Code ":" InternalServerError "," Message ":" Ein interner Serverfehler ist aufgetreten. "} Ich bekam eine Antwort von `und war eine Weile süchtig danach, ohne den Fehler zu bemerken ...: durchhalten :)
from chalice import Chalice, Response
import json
app = Chalice(app_name='helloworld')
@app.route('/')
def index():
return Response(
body = json.dumps({'hello':'world'}),
headers = {'Content-Type': 'application/json'},
status_code = 200
)
@app.route('/text')
def text():
return Response(
body = 'Hello, World',
headers = {'Content-Type': 'text/plain'},
status_code = 200
)
Da es eine Klasse zum Zurückgeben einer Fehlerantwort gibt, werden wir sie verwenden. Im folgenden Beispiel ist es 403 Verbotener Fehler. Vergessen Sie nicht, auch hier die Fehlerklasse zu importieren.
from chalice import Chalice, ForbiddenError
app = Chalice(app_name='helloworld')
@app.route('/forbidden')
def forbidden():
raise ForbiddenError(
'403!'
)
Es gibt andere Fehlerklassen wie folgt. ([[AWS mit einfacher Handarbeit lernen] Erstellen Sie eine serverlose RESTful-API! Python-App-Entwicklung mit Chalice | AWS Startup Blog](https://aws.amazon.com/jp/blogs/startup/event] Siehe -report-chalice-handson /)) Es ist auch möglich, eine Antwort mit einem Fehlercode zurückzugeben, der nicht mithilfe der oben eingeführten benutzerdefinierten HTTP-Antwort vorbereitet wurde. (Natürlich ist es auch möglich, einen Fehler mit einem Fehlercode in einer benutzerdefinierten HTTP-Antwort zurückzugeben.)
Sie können einfach Folgendes schreiben.
@app.route('/', methods = ['POST'], cors = True)
Ich habe es immer in Form von "@ app.route (" / ")" geschrieben, aber dies ist in Form von API Gateway + AWS Lambda. Eine andere AWS Lambda-Integration als API Gateway ist mithilfe anderer Dekoratoren möglich. Folgendes wird derzeit unterstützt.
@ app.lambda_function
@app.schedule
@app.on_s3_event
@app.on_sqs_message
@app.on_sns_message
Für eine detaillierte Verwendung und Beispielcode ist Ich habe versucht, Lambda (Python) und API Gateway mit Chalice zu verwalten sehr hilfreich.
IAM-Rollen, Lambda und API-Gateway (für @ app.route), die in AWS mit "Kelchbereitstellung" bereitgestellt werden, können mit dem folgenden Befehl in großen Mengen gelöscht werden.
$ chalice delete
Es scheint, dass Sie mit AWS Chalice ganz einfach eine Umgebung ohne Server erstellen können. Es ist einfach zu löschen, daher ist es schön, es einfach erstellen und löschen zu können. Ich habe darüber nachgedacht, ein konkreteres Beispiel zu schreiben, aber da es bereits ein langer Artikel geworden ist, werde ich es in einem anderen Artikel zusammenfassen.
We're hiring! Wir entwickeln einen KI-Chatbot. Wenn Sie interessiert sind, können Sie uns gerne über die Wantedly-Seite kontaktieren!
Recommended Posts