Dies ist eine Aufzeichnung der Einstellungen, wenn eine in Python geschriebene Lambda-Funktion mit Serverless Framework erstellt und bereitgestellt wird.
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.
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.
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"
}
}
Dies ist die Einstellung bei Verwendung einer externen Python-Bibliothek. Dieses Mal verwenden wir Pipenv als Paketmanager.
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"
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.
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 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"
}
}
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.
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.
Recommended Posts