Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework

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.

environnement

Configuration du projet

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.

Déploiement initial

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.

Contrôle de fonctionnement

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"
    }
}

Introduire une bibliothèque externe à l'aide de Pipenv

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.

Configuration de Pipenv

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"

Installer la bibliothèque externe Python

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.

Présentation des exigences python sans serveur

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éploiement, contrôle de fonctionnement

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"
    }
}

Utiliser la couche Lambda

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.

Résumé

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.

Matériel de référence

Recommended Posts

Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créer une couche pour AWS Lambda Python dans Docker
Créer un décorateur de fonction Python avec Class
Touchez AWS avec Serverless Framework et Python
Application sans serveur avec AWS SAM! (APIGATEWAY + Lambda (Python))
Vérifier la version avec python
Créons un système de réception simple avec le framework sans serveur Python Chalice et Twilio
Exploitez TwitterBot avec Lambda, Python
Facilement sans serveur avec Python en utilisant Calice
Créer une fonction en Python
Créer un gif 3D avec python3
Déployer Django sans serveur avec Lambda
Spécifiez la version python avec virtualenv
Créer un répertoire avec python
Simplifiez-vous la tâche avec les exigences Python sans serveur
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
Créer une autre version de l'environnement Python conda avec une seule ligne de commande
Créer une animation de tracé avec Python + Matplotlib
[AWS] Créer une API avec API Gateway + Lambda
Créer un environnement de développement local pour Lambda + Python à l'aide de Serverless Framework
Détection de visage avec Lambda (Python) + Rekognition
Ecrire une fonction AWS Lambda en Python
Créez un environnement virtuel avec Python!
[Python] Faire de la fonction une fonction lambda
Créer un framework de décorateur à usage général pour Python
Gérez chaque version de Python avec Homebrew
Notifier HipChat avec AWS Lambda (Python)
Utiliser PostgreSQL avec Lambda (Python + psycopg2)
[Pour Python] Créez rapidement un fichier de téléchargement vers AWS Lambda Layer
Comment créer une API de machine learning sans serveur avec AWS Lambda
[AWS] Créez un environnement Python Lambda avec CodeStar et faites Hello World
Créons une fonction de chat avec Vue.js + AWS Lambda + dynamo DB [Paramètres AWS]
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Créer une API RESTful avec Django Rest Framework
Créez automatiquement la documentation de l'API Python avec Sphinx
Créez wordcloud à partir de votre tweet avec python3
Installer Python en tant que Framework avec pyenv
Créez une image factice avec Python + PIL.
[Python] Créez un environnement virtuel avec Anaconda
Créons un groupe gratuit avec Python
Créez rapidement un fichier Excel avec Python #python
Créer un environnement Python + uWSGI + Nginx avec Docker
Manipulation des données DynamoDB avec Lambda (Node et Python)
Créer et décrypter du code César avec python
Apprendre Python! Comparaison avec Java (fonction de base)
Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop
Fonction Lambda pour effectuer une sauvegarde AMI (python)
Créer un fichier Excel avec Python + matrice de similarité
Créer un compteur de fréquence de mots avec Python 3.4
[Python] Créez rapidement une API avec Flask
Connectez-vous à s3 avec AWS Lambda Python