Il s'agit d'un enregistrement des paramètres lorsqu'une fonction Lambda écrite en langage Python est créée et déployée à l'aide de Serverless Framework.
Vous devez créer un compte Serverless Framework à l'avance. https://serverless.com/
Installation de la commande sans serveur
$ npm install -g serverless
Créer un projet sans serveur
$ serverless
Saisissez le nom du projet et connectez-vous au compte. Choisissez "AWS Python" comme choix de langage de développement.
Un nouveau répertoire pour le projet Serveless sera créé lorsque vous aurez terminé l'entrée.
Accédez au répertoire créé.
Dans l'état initial, les fichiers serverless.yml
et handler.py
sont créés.
Apportez quelques modifications à chacun comme indiqué ci-dessous.
serverless.yml
#Veuillez définir le service et l'application en fonction de votre environnement.
service: python-test
app: python-test
provider:
name: aws
runtime: python3.7
region: ap-northeast-1
functions:
hello:
handler: handler.hello
handler.py
def hello(event, context):
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event
}
C'est une fonction simple qui stocke simplement le contenu de «événement» dans l'objet et le renvoie.
Déployer (créer une fonction Lambda) avec la commande suivante
$ serverless deploy
Si vous regardez l'écran Lambda depuis la console AWS, vous pouvez voir que la nouvelle fonction a été créée.
Vous pouvez exécuter la fonction créée par la commande suivante.
$ serverless invoke yarn serverless invoke --function hello
{
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": {}
}
Vous pouvez également transmettre des événements au moment de l'exécution. Tout d'abord, créez un fichier ʻevent.json` avec le contenu suivant.
event.json
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
Ensuite, lors de l'exécution de la fonction, spécifiez le fichier qui décrit l'événement avec l'option p.
$ serverless invoke --function hello -p event.json
{
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
}
C'est le paramètre lors de l'utilisation d'une bibliothèque externe de Python. Cette fois, nous utiliserons Pipenv comme gestionnaire de paquets.
Si vous n'avez pas installé Pipenv, utilisez pip pour l'installer.
$ pip3 install pipenv
Initialisez les paramètres Pipenv dans le projet. Cette fois, nous utiliserons la série Python 3, spécifiez donc la version comme suit.
$ pipenv --python 3
Après avoir exécuté la commande, Pipfile
est créé dans le répertoire.
Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.7"
Cette fois, j'aimerais utiliser une bibliothèque appelée python-dateutil qui permet un traitement pratique de la date.
Tout d'abord, installez la bibliothèque avec Pipenv.
$ pipenv install python-dateutil
Puis changez le programme pour utiliser python-dateutil.
handler.py
import datetime
from dateutil.relativedelta import relativedelta
def hello(event, context):
today = datetime.date.today()
yesterday = today + relativedelta(days=-1)
return {
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": event,
"dates": {
"today": f'{today: %Y-%m-%d}',
"yesterday": f'{yesterday: %Y-%m-%d}'
}
}
En combinaison avec la date / heure de la bibliothèque standard, la date à laquelle le programme est exécuté et la date un jour avant sont acquises et ajoutées dans l'objet à renvoyer.
Pour gérer la bibliothèque installée par Pipenv avec Serverless Framework, utilisez le package npm appelé serverless-python-requirements.
serverless-python-requirements vous permet à l'origine de gérer des bibliothèques gérées par requirements.txt
, mais il prend également en charge Pipenv.
Tout d'abord, utilisez npm pour installer serverless-python-requirements.
#Si le projet npm n'a pas été initialisé
$ npm init
# serverless-python-Installation des exigences
$ npm install --save-dev serverless-python-requirements
Ensuite, décrivez les paramètres d'utilisation de l'exigence python sans serveur dans serverless.yml
.
Ajoutez le plugin et les pièces personnalisées.
serverless.yml
service: python-test
app: python-test
provider:
name: aws
runtime: python3.7
region: ap-northeast-1
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
functions:
hello:
handler: handler.hello
Déployez avec la commande serverless deploy
.
Ensuite, exécutons la fonction mise à jour.
$ serverless invoke --function hello -p event.json
{
"message": "Go Serverless v1.0! Your function executed successfully!",
"event": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"dates": {
"today": " 2020-03-07",
"yesterday": " 2020-03-06"
}
}
En utilisant Lambda Layer, il n'est pas nécessaire d'inclure le fichier de la bibliothèque utilisée dans le package de la fonction Lambda. Vous pouvez réduire la capacité du paquet.
Si vous utilisez une exigence python sans serveur, vous pouvez facilement superposer des bibliothèques dépendantes avec seulement quelques paramètres.
Plus précisément, ajoutez les paramètres suivants à serverless.yml
.
serverless.yml
custom:
pythonRequirements:
dockerizePip: true
+ layer: true
Après avoir modifié les paramètres, utilisez la commande serverless deploy
pour déployer.
À partir de l'écran Lambda de la console AWS, vérifiez que les nouvelles couches ont été créées.
J'ai expliqué comment créer des fonctions Lambda en langage Python à l'aide de Serverless Framework. En utilisant l'exigence python sans serveur, vous pouvez facilement installer autour de bibliothèques externes telles que l'intégration avec Pipenv et la création de Lambda Layer.
Recommended Posts