** Es ist geplant, eine Lambda-Funktion zu erstellen **, die die Lambda-Funktionsgruppe aktualisiert und eine kontinuierliche Lambda-Aktualisierung in Frage stellt.
Code, der auf AWS Lambda ausgeführt wird, kann auf drei Arten verteilt werden.
Als ich die Optionen zum ersten Mal sah, dachte ich, dass das S3-Download-Format bei jedem Start von Lambda auf die S3-Datei verweisen würde. "Wenn Sie es an S3 verteilen, können Sie den Code an diesem Punkt bereitstellen, nicht wahr?"
Was das Verhalten angeht, scheint so etwas nicht möglich zu sein. Deshalb habe ich einen Mechanismus für die lokale Bereitstellung entwickelt, während ich ein wenig enttäuscht war, aber basierend auf der Idee: "Wenn es sich um AWS SDK handelt, wird Lambda selbst auch berührt?"
Ich fragte mich, ob ich einen solchen Mechanismus erstellen könnte, also machte ich einen kleinen Code und versuchte es.
Darüber hinaus ist es aus persönlichen Gründen in Python geschrieben.
Definieren Sie eine Lambda-Funktion mit Inline-Code upsert_lambda.py in dieser Liste.
Ich denke nicht, dass die Erinnerung selbst so viel erfordert. Abhängig vom Inhalt wird jedoch ein guter API-Aufruf ausgeführt, sodass es besser ist, das Timeout Sekunden länger zu halten. (Ich habe es vorerst auf 30 Sekunden eingestellt)
(Erklären Sie grob in den Kommentaren, während Sie den Inhalt zusammendrücken)
upsert_lambda.py
# -*- coding:utf8 -*-
import boto3
from botocore.exceptions import ClientError
import zipfile
import json
class S3Object(object):
#Klasse zur Vereinfachung der Lieferung
# <Für jede Init abgekürzt>
def lambda_handler(event, context):
#Von AWS Lambda aufgerufene Funktionen
records = event.get('Records', [])
for record in records:
s3_object = S3Object(record['awsRegion'], record['s3']['bucket']['name'], record['s3']['object']['key'])
_update_functions('sharequiz', 'test', s3_object)
def _update_functions(project, env, s3_object):
#Holen Sie sich json der Funktionsliste von der hochgeladenen Zip
with zipfile.ZipFile(project_zip_path) as zfp:
handlers_json = zfp.read('functions.json')
functions = json.loads(handlers_json)
_lambda = boto3.client('lambda')
for function in functions:
try:
#Versuchen Sie vorerst, eine Lambda-Funktion zu erstellen
#Holen Sie sich mindestens zum Zeitpunkt des Schreibens diesen Code_Ich erinnere mich, dass diese Funktion auch eine Ausnahme war
_lambda.create_function(
# <Argument weggelassen>
)
except ClientError as err:
#Überschreiben Sie Einstellungen und Code, falls dieser bereits vorhanden ist
_lambda.update_function_configuration(**function)
_lambda.update_function_code(
# <Argument weggelassen>
)
In S3 können Sie Lambda über Ereignisse wie die Objekterstellung informieren und bestimmte Lambda-Funktionen aufrufen. [^ 1] Mit diesem Mechanismus ** kann die obige Lambda-Funktion aufgerufen werden, wenn die Datei in den angegebenen Bucket-Ordner hochgeladen wird **.
Grundsätzlich gibt es kein Problem, wenn Sie diesen Bereich gemäß der Lambda-Dokumentation erstellen.
Fügen Sie jedoch json hinzu, um lambda.create_function
und lambda.update_function_code
in boto3 zu erstellen. (Benannt in functions.json)
Wie ↓
functions.json
[{
"Handler": "path/to/module.some_function",
"Role": "arn:aws:iam::your-role",
"FunctionName": "some_funtion",
"Timeout": 3,
"MemorySize": 128,
"Description": "Einfache Verarbeitung"
}, {
"Handler": "path/to/module.other_function",
"Role": "arn:aws:iam::your-role",
"FunctionName": "else_funtion",
"Timeout": 30,
"MemorySize": 1280,
"Description": "Schwere Verarbeitung"
}]
Bitte laden Sie die erstellte Postleitzahl an die Stelle hoch, an der die Benachrichtigung an die Lambda-Seite geht.
(Wenn Sie nach dem Posten Zeit haben, fügen Sie das Video oder GIF ein.)
Dies ist die Einführung des Codes, den ich gemacht habe, bevor ich die Existenz eines Lambda-Uploaders kannte.