Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit

Einführung

--Dieser Artikel ist Python Part 3 Adventskalender 2019 ist der 16. Tag.

Annahme

Installation und Konfiguration von Serverless Framework

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.

Vorlagengenerierung und -bereitstellung

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.

Verwendung externer Bibliotheken

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

Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework
Berühren Sie AWS mit Serverless Framework und Python
Stellen Sie Django serverlos mit Lambda bereit
Ich möchte Lambda mit Python auf Mac AWS!
Schreiben Sie die AWS Lambda-Funktion in Python
Führen Sie Python planmäßig auf AWS Lambda aus
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
Verwenden Sie zusätzliche Python-Pakete mit Serverless Framework (v1.x)
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1.8
LINE BOT mit Python + AWS Lambda + API Gateway
Die Lambda-Funktion bietet Best Practice mit CircleCI + Lamvery
Dynamische HTML-Seiten mit AWS Lambda und Python
Überprüfen Sie types_map, wenn Sie Mimetypen mit AWS Lambda (Python) verwenden.
Unterstützung für Python 2.7-Laufzeit auf AWS Lambda (ab 2020.1)
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
Betreiben Sie TwitterBot mit Lambda, Python
[Python] Scraping in AWS Lambda
Python-Kompilierung mit pyqt deploy
PyTorch mit AWS Lambda [Lambda-Import]
Machen Sie es sich mit Serverless Python Requirements einfach
Gepostet als Anhang zu Slack auf AWS Lambda (Python)
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Veröffentlichen Sie regelmäßig Bilder von Papillon auf Python + AWS Lambda + Slack
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
[Python] Ermöglicht den Import von pip3-Paketen in AWS Lambda
Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack
Stellen Sie Lambda-Funktionen sicher mit Python bereit, das mit denselben Optionen wie Amazon Linux erstellt wurde
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Erste Schritte mit dem Python-Framework Django unter Mac OS X.
[AWS] API mit API Gateway + Lambda erstellen
Erstellen Sie mit dem Serverless Framework eine lokale Entwicklungsumgebung für Lambda + Python
Erstellen Sie mit Chalice eine flaschen- / flaschenähnliche Webanwendung auf AWS Lambda
Textextraktion mit AWS Textract (Python3.6)
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python 3.8 ~] Wie man rekursive Funktionen mit Lambda-Ausdrücken intelligent definiert
xgboost (Python) in einer von AWS Lambda erstellten EC2 Spot-Instanzumgebung
Vorsichtsmaßnahmen beim Ausführen von Python unter EC2 über AWS Lambda (Befehl ausführen)
Bearbeiten von Kintondaten mit dem Python & C Data ODBC-Treiber von AWS Lambda
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Führen Sie python3 Django1.9 mit mod_wsgi aus (deploy)
Hinweise zur Verwendung von rstrip mit Python.
Wenn Sie Probleme mit Zeitüberschreitungen bei der Implementierung von Slacks SlashCommand in AWS Lambdas Python haben
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Erste Schritte mit Python 3.8 unter Windows
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)