Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda

introduction

--Cet article est Calendrier de l'Avent Python Partie 3 2019 est le 16e jour.

supposition

--La commande npm peut être utilisée --Il existe un utilisateur IAM pour le framework sans serveur

Installation et configuration du 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ération et déploiement de modèles

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.

Utilisation de bibliothèques externes

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

Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Créer une fonction Lambda de version Python (+ couche Lambda) avec Serverless Framework
Touchez AWS avec Serverless Framework et Python
Déployer Django sans serveur avec Lambda
Je veux AWS Lambda avec Python sur Mac!
Ecrire une fonction AWS Lambda en Python
Exécutez Python selon la planification sur AWS Lambda
Notifier HipChat avec AWS Lambda (Python)
[AWS] Utilisation de fichiers ini avec Lambda [Python]
Grattage sans serveur régulier avec AWS lambda + scrapy, partie 1
[Python] Exécutez Headless Chrome sur AWS Lambda
Connectez-vous à s3 avec AWS Lambda Python
Exécutez régulièrement des programmes Python sur AWS Lambda
Utiliser des packages Python supplémentaires avec Serverless Framework (v1.x)
Grattage sans serveur régulier avec AWS lambda + scrapy Part 1.8
LINE BOT avec Python + AWS Lambda + API Gateway
La fonction Lambda déploie les meilleures pratiques avec CircleCI + Lamvery
Pages HTML dynamiques créées avec AWS Lambda et Python
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (Python)
Prise en charge de l'environnement d'exécution Python 2.7 sur AWS Lambda (à partir de 2020.1)
Créer une couche pour AWS Lambda Python dans Docker
Créez des tweets ordinaires comme une flotte avec AWS Lambda et Python
Exploitez TwitterBot avec Lambda, Python
[Python] Scraping dans AWS Lambda
Compilation Python avec pyqt deploy
PyTorch avec AWS Lambda [importation Lambda]
Simplifiez-vous la tâche avec les exigences Python sans serveur
Publié en tant que pièce jointe à Slack sur AWS Lambda (Python)
[AWS] Essayez d'ajouter la bibliothèque Python à la couche avec SAM + Lambda (Python)
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[Python] Permet d'importer les packages pip3 sur AWS Lambda
Surveillance du site et notification d'alerte avec AWS Lambda + Python + Slack
Déployez en toute sécurité des fonctions Lambda à l'aide de Python construit avec les mêmes options qu'Amazon Linux
Récapitulatif si vous utilisez AWS Lambda (Python)
Premiers pas avec le framework Python Django sur Mac OS X
[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
Créer une application Web de type Flask / Bottle sur AWS Lambda avec Chalice
Extraction de texte avec AWS Textract (Python3.6)
Détection de visage avec Lambda (Python) + Rekognition
[Python 3.8 ~] Comment définir intelligemment des fonctions récursives avec des expressions lambda
xgboost (python) sur l'environnement d'instance EC2 Spot préparé par AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Manipulation des données Kintone avec le pilote ODBC Python & C Data d'AWS Lambda
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
[Python] Faire de la fonction une fonction lambda
Exécutez python3 Django1.9 avec mod_wsgi (déployer)
Notes sur l'utilisation de rstrip avec python.
Si vous rencontrez des problèmes avec les délais d'expiration lors de la mise en œuvre de SlashCommand de Slack dans Python d'AWS Lambda
Faisons une discussion WEB en utilisant WebSocket avec AWS sans serveur (Python)!
Premiers pas avec Python 3.8 sous Windows
Utiliser PostgreSQL avec Lambda (Python + psycopg2)