--Cet article est Calendrier de l'Avent Python Partie 3 2019 est le 16e jour.
--La commande npm peut être utilisée --Il existe un utilisateur IAM pour le framework sans serveur
L'installation est un coup d'installation de npm.
$ npm install serverless
Assurez-vous que le chemin est en --version.
$ 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
Définissez le compte IAM pour Framewrok sans serveur créé à l'avance avec les informations d'identification de configuration sans serveur.
serverless config credentials --provider aws --key foo --secret bar
Ceci termine les préparatifs.
Générez un projet de modèle pour Python3.
serverless create --template aws-python3 --name aws-lambda-hello-python --path aws-lambda-hello-python
Les fichiers suivants sont effectivement générés.
$ cd aws-lambda-hello-python
$ tree
.
├── handler.py
└── serverless.yml
0 directories, 2 files
La commande ci-dessus ne génère pas la méthode principale, mais cette fois je voulais la faire fonctionner localement, je l'ai donc ajoutée.
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("","")))
Il y a beaucoup de commentaires, mais le minimum requis est: (Puisque vous n'avez pas spécifié de région, elle sera déployée sur la valeur par défaut us-east-1)
serverless.yml
service: aws-lambda-hello-python
provider:
name: aws
runtime: python3.8
functions:
hello:
handler: handler.hello
Bougeons un peu avec Local.
$ pyenv local 3.8.0
$ python3 handler.py
{"statusCode": 200, "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"\"}"}
Ça a marché. Maintenant, déployons et vérifions le fonctionnement.
$ serverless deploy -v
(Message omis)
$ serverless invoke -f hello
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}}"
}
Il semble qu'il a pu être déployé correctement.
--Je voudrais pouvoir utiliser une bibliothèque externe. ――Je voudrais introduire numpy, mais la bibliothèque native doit être construite pour chaque environnement, ce qui est un peu gênant lorsqu'elle est utilisée normalement avec Lambda, mais l'utilisation de Serverless Framework le rend relativement facile.
Rendre l'environnement venv disponible, installer numpy et le figer.
$ python3 -m venv .venv
$ .venv/bin/pip install numpy
$ .venv/bin/pip freeze > requirements.txt
Ajoutez le processus qui utilise numpy de manière appropriée. (La moyenne changera).
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("","")))
Lorsqu'il est exécuté localement, cela ressemble à ceci.
$ .venv/bin/python3 handler.py
{"statusCode": 200, "body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": \"\", \"mean\": 50.5}"}
Installez un plugin qui permet au serveur d'utiliser les exigences.
npm install serverless-python-requirements
Ajouter à serverless.yml (ajouter ci-dessous les plugins)
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:
- '**'
Essayez de déployer (docker exécute numpy build et déploie)
$ serverless deploy -v
Vérifions l'opération.
$ serverless invoke -f hello
{
"statusCode": 200,
"body": "{\"message\": \"Go Serverless v1.0! Your function executed successfully!\", \"input\": {}, \"mean\": 50.5}"
}
Numpy fonctionne correctement! Ayons une vie amusante Python et Serverless!
Recommended Posts