--Dieser Artikel ist Python Part 3 Adventskalender 2019 ist der 16. Tag.
Die Installation ist eine Einstellung der npm-Installation.
$ npm install serverless
Stellen Sie sicher, dass der Pfad in --version ist.
$ serverless --version
Framework Core: 1.59.3
Plugin: 3.2.5
SDK: 2.2.1
Components Core: 1.1.2
Components CLI: 1.4.0
Legen Sie das IAM-Konto für Serverless Framewrok fest, das zuvor mit den Anmeldeinformationen für die Serverless-Konfiguration erstellt wurde.
serverless config credentials --provider aws --key foo --secret bar
Damit sind die Vorbereitungen abgeschlossen.
Generieren Sie ein Vorlagenprojekt für Python3.
serverless create --template aws-python3 --name aws-lambda-hello-python --path aws-lambda-hello-python
Die folgenden Dateien werden tatsächlich generiert.
$ cd aws-lambda-hello-python
$ tree
.
├── handler.py
└── serverless.yml
0 directories, 2 files
Der obige Befehl generiert nicht die Hauptmethode, aber dieses Mal wollte ich, dass sie lokal funktioniert, also habe ich sie hinzugefügt.
handler.py
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
"""
if __name__ == "__main__":
print(json.dumps(hello("","")))
Es gibt viele Kommentare, aber das erforderliche Minimum ist: (Da Sie keine Region angegeben haben, wird sie in der Standardeinstellung us-east-1 bereitgestellt.)
serverless.yml
service: aws-lambda-hello-python
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: handler.hello
Lassen Sie es uns mit Local ein wenig verschieben.
$ pyenv local 3.8.0
$ python3 handler.py
{"statusCode": 200, "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"\"}"}
Es funktionierte. Lassen Sie uns nun den Vorgang bereitstellen und überprüfen.
$ serverless deploy -v
(Nachricht weggelassen)
$ serverless invoke -f hello
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
Es scheint, dass es ordnungsgemäß bereitgestellt werden konnte.
Stellen Sie die venv-Umgebung zur Verfügung, installieren Sie numpy und frieren Sie sie ein.
$ python3 -m venv .venv
$ .venv/bin/pip install numpy
$ .venv/bin/pip freeze > requirements.txt
Fügen Sie den Prozess hinzu, der numpy entsprechend verwendet. (Der Mittelwert wird sich ändern).
handler.py
import json
import numpy as np
def hello(event, context):
arr = range(1, 100+1)
mean = np.mean(arr)
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event,
"mean" : mean
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
# Use this code if you don't use the http event with the LAMBDA-PROXY
# integration
"""
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
"""
if __name__ == "__main__":
print(json.dumps(hello("","")))
Bei lokaler Ausführung sieht es so aus.
$ .venv/bin/python3 handler.py
{"statusCode": 200, "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"\", \"mean\": 50.5}"}
Installieren Sie ein Plugin, mit dem Serverless Anforderungen verwenden kann.
npm install serverless-python-requirements
Zu serverless.yml hinzufügen (Plugins hinzufügen)
service: aws-lambda-hello-python
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: handler.hello
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
package:
include:
- handler.py
exclude:
- '**'
Versuchen Sie die Bereitstellung (Docker führt Numpy Build aus und stellt bereit)
$ serverless deploy -v
Lassen Sie uns die Operation überprüfen.
$ serverless invoke -f hello
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}, \"mean\": 50.5}"
}
Numpy funktioniert richtig! Lass uns ein lustiges Python & Serverless Leben haben!
Recommended Posts