Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework

Dies ist eine Aufzeichnung der Einstellungen, wenn eine in Python geschriebene Lambda-Funktion mit Serverless Framework erstellt und bereitgestellt wird.

Umgebung

Projektaufbau

Sie müssen im Voraus ein Serverless Framework-Konto erstellen. https://serverless.com/

Installieren des Befehls ohne Server

$ npm install -g serverless

Erstellen eines serverlosen Projekts

$ serverless

Geben Sie den Projektnamen ein und melden Sie sich beim Konto an. Wählen Sie "AWS Python" als Wahl für Ihre Entwicklungssprache.

Ein neues Verzeichnis für das Serveless-Projekt wird erstellt, wenn Sie den Eintrag abschließen.

Erstbereitstellung

Wechseln Sie in das erstellte Verzeichnis. Im Ausgangszustand werden die Dateien "serverless.yml" und "handler.py" erstellt.

Nehmen Sie einige Änderungen vor, wie unten gezeigt.

serverless.yml


#Bitte stellen Sie Service und App entsprechend Ihrer Umgebung ein.
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
    }

Es ist eine einfache Funktion, die nur den Inhalt von "event" im Objekt speichert und zurückgibt.

Stellen Sie die Lambda-Funktion mit dem folgenden Befehl bereit (erstellen Sie sie)

$ serverless deploy

Wenn Sie den Lambda-Bildschirm von der AWS-Konsole aus betrachten, können Sie sehen, dass die neue Funktion erstellt wurde.

Funktionsprüfung

Sie können die mit dem folgenden Befehl erstellte Funktion ausführen.

$ serverless invoke yarn serverless invoke --function hello
{
    "message": "Go Serverless v1.0! Your function executed successfully!",
    "event": {}
}

Sie können Ereignisse auch zur Laufzeit übergeben. Erstellen Sie zunächst eine event.json-Datei mit dem folgenden Inhalt.

event.json


{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3"
}

Geben Sie dann beim Ausführen der Funktion die Datei an, die das Ereignis mit der Option p beschreibt.

$ serverless invoke --function hello -p event.json
{
    "message": "Go Serverless v1.0! Your function executed successfully!",
    "event": {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }
}

Führen Sie mit Pipenv eine externe Bibliothek ein

Dies ist die Einstellung bei Verwendung einer externen Python-Bibliothek. Dieses Mal verwenden wir Pipenv als Paketmanager.

Pipenv-Setup

Wenn Sie Pipenv nicht installiert haben, verwenden Sie pip, um es zu installieren.


$ pip3 install pipenv

Initialisieren Sie die Pipenv-Einstellungen im Projekt. Dieses Mal verwenden wir die Python 3-Serie. Geben Sie daher die Version wie folgt an.

$ pipenv --python 3

Nach dem Ausführen des Befehls wird im Verzeichnis "Pipfile" erstellt.

Pipfile


[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.7"

Installieren Sie die externe Python-Bibliothek

Dieses Mal möchte ich eine Bibliothek namens python-dateutil verwenden, die eine bequeme Datumsverarbeitung ermöglicht.

Installieren Sie zuerst die Bibliothek mit Pipenv.

$ pipenv install python-dateutil

Ändern Sie dann das Programm, um Python-Dateutil zu verwenden.

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

In Kombination mit datetime in der Standardbibliothek werden das Datum, an dem das Programm ausgeführt wird, und das Datum einen Tag zuvor erfasst und dem zurückkehrenden Objekt hinzugefügt.

Einführung in Serverless-Python-Anforderungen

Verwenden Sie das npm-Paket mit dem Namen serverless-python-Anforderungen, um die von Pipenv mit Serverless Framework installierte Bibliothek zu verwalten.

Mit den serverless-python-Anforderungen können Sie ursprünglich Bibliotheken verwalten, die von require.txt verwaltet werden, aber es wird auch Pipenv unterstützt.

Verwenden Sie zunächst npm, um die Serverless-Python-Anforderung zu installieren.

#Wenn das npm-Projekt nicht initialisiert wurde
$ npm init

# serverless-python-Installation von Anforderungen
$ npm install --save-dev serverless-python-requirements

Beschreiben Sie als Nächstes die Einstellungen für die Verwendung der Serverless-Python-Anforderung in serverless.yml. Fügen Sie das Plugin und benutzerdefinierte Teile hinzu.

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

Bereitstellung, Funktionsprüfung

Bereitstellung mit dem Befehl "Serverless Deploy". Führen Sie dann die aktualisierte Funktion aus.

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

Verwenden Sie die Lambda-Schicht

Bei Verwendung von Lambda Layer muss die Datei der im Paket der Lambda-Funktion verwendeten Bibliothek nicht enthalten sein. Sie können die Paketkapazität reduzieren.

Wenn Sie die Serverless-Python-Anforderung verwenden, können Sie mit nur wenigen Einstellungen problemlos abhängige Bibliotheken überlagern. Fügen Sie insbesondere die folgenden Einstellungen zu "serverless.yml" hinzu.

serverless.yml


custom:
  pythonRequirements:
    dockerizePip: true
+   layer: true

Verwenden Sie nach dem Ändern der Einstellungen den Befehl serverless deploy zum Bereitstellen.

Überprüfen Sie auf dem Lambda-Bildschirm der AWS-Konsole, ob die neuen Ebenen erstellt wurden.

Zusammenfassung

Ich habe erklärt, wie Lambda-Funktionen in Python-Sprache mit Serverless Framework erstellt werden. Durch die Verwendung der Serverless-Python-Anforderung können Sie problemlos externe Bibliotheken installieren, z. B. die Integration in Pipenv und die Erstellung von Lambda Layer.

Referenzmaterial

Recommended Posts

Erstellen Sie eine Python-Version der Lambda-Funktion (+ Lambda-Schicht) mit Serverless Framework
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
Erstellen Sie mit Class einen Python-Funktionsdekorator
Berühren Sie AWS mit Serverless Framework und Python
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Überprüfen Sie die Version mit Python
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
Betreiben Sie TwitterBot mit Lambda, Python
Mit Python mit Kelch ganz einfach ohne Server
Erstellen Sie eine Funktion in Python
Erstellen Sie ein 3D-GIF mit Python3
Stellen Sie Django serverlos mit Lambda bereit
Geben Sie die Python-Version mit virtualenv an
Erstellen Sie ein Verzeichnis mit Python
Machen Sie es sich mit Serverless Python Requirements einfach
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
[AWS] Versuchen Sie, die Python-Bibliothek mit SAM + Lambda (Python) zur Ebene hinzuzufügen.
Erstellen Sie mit AWS SAM schnell eine API mit Python, Lambda und API Gateway
Erstellen Sie eine andere Version der Python-Conda-Umgebung mit einer Befehlszeile
Erstellen Sie eine Plotanimation mit Python + Matplotlib
[AWS] API mit API Gateway + Lambda erstellen
Erstellen Sie mit dem Serverless Framework eine lokale Entwicklungsumgebung für Lambda + Python
Gesichtserkennung mit Lambda (Python) + Erkennung
Schreiben Sie die AWS Lambda-Funktion in Python
Erstellen Sie eine virtuelle Umgebung mit Python!
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Erstellen Sie ein universelles Dekorationsframework für Python
Verwalten Sie jede Python-Version mit Homebrew
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Verwenden Sie PostgreSQL mit Lambda (Python + psycopg2)
[Für Python] Erstellen Sie schnell eine Upload-Datei in AWS Lambda Layer
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Erstellen wir eine Chat-Funktion mit Vue.js + AWS Lambda + Dynamo DB [AWS-Einstellungen]
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Erstellen Sie eine RESTful-API mit dem Django Rest Framework
Erstellen Sie automatisch eine Python-API-Dokumentation mit Sphinx
Erstellen Sie mit python3 eine Wortwolke aus Ihrem Tweet
Installieren Sie Python als Framework mit pyenv
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie schnell eine Excel-Datei mit Python #python
Erstellen Sie mit Docker eine Python + uWSGI + Nginx-Umgebung
Bearbeiten von DynamoDB-Daten mit Lambda (Node & Python)
Erstellen und entschlüsseln Sie Caesar-Code mit Python
Python lernen! Vergleich mit Java (Grundfunktion)
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Lambda-Funktion zur Erstellung eines AMI-Backups (Python)
Erstellen Sie eine Excel-Datei mit Python + Ähnlichkeitsmatrix
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
[Python] Erstellen Sie schnell eine API mit Flask
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her