** Il s'agit d'un plan de création d'une fonction Lambda ** qui met à jour le groupe de fonctions Lambda et défie la mise à jour Lambda continue.
Le code exécuté sur AWS Lambda peut être distribué de trois manières.
En fait, quand j'ai vu les options pour la première fois, j'ai pensé que le format de téléchargement S3 ferait référence au fichier S3 à chaque démarrage de Lambda. Avec ceci, "Si vous le distribuez à S3, vous pouvez déployer le code à ce stade, n'est-ce pas?"
Pour ce qui est du comportement, il semble qu'une telle chose ne soit pas possible, j'ai donc fait un mécanisme pour se déployer localement tout en étant un peu déçu, mais basé sur l'idée que "s'il s'agit d'AWS SDK, Lambda lui-même sera-t-il également touché?"
Je me suis demandé si je pouvais créer un mécanisme comme celui-ci, alors j'ai créé un petit code et l'ai essayé.
De plus, il est écrit en Python pour des raisons personnelles.
Définissez une fonction Lambda avec le code en ligne upsert_lambda.py dans ce Gist.
Je ne pense pas que la mémoire elle-même en ait besoin. Cependant, en fonction du contenu, il fera un bon appel API, il est donc préférable de prolonger le délai d'attente en secondes. (Je l'ai mis à 30 secondes pour le moment)
(Expliquez grossièrement dans les commentaires en pressant le contenu)
upsert_lambda.py
# -*- coding:utf8 -*-
import boto3
from botocore.exceptions import ClientError
import zipfile
import json
class S3Object(object):
#Classe de simplification de la livraison
# <Abrégé pour chaque init>
def lambda_handler(event, context):
#Fonctions appelées par AWS Lambda
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):
#Obtenez json de la liste des fonctions à partir du zip téléchargé
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:
#Essayons de créer une fonction Lambda pour le moment
#Obtenez au moins au moment de l'écriture de ce code_Je me souviens que cette fonction était aussi une exception
_lambda.create_function(
# <Argument omis>
)
except ClientError as err:
#Écraser les paramètres et le code s'il existe déjà
_lambda.update_function_configuration(**function)
_lambda.update_function_code(
# <Argument omis>
)
Dans S3, vous pouvez notifier à Lambda des événements tels que la création d'objet et appeler des fonctions Lambda spécifiques. [^ 1] En utilisant ce mécanisme, ** la fonction Lambda ci-dessus peut être appelée lorsque le fichier est téléchargé dans le dossier de compartiment spécifié **.
En gros, il n'y a aucun problème si vous créez cette zone selon la documentation Lambda.
Cependant, veuillez inclure json pour créer lambda.create_function
et lambda.update_function_code
dans boto3. (Nommé dans functions.json)
Comme ↓
functions.json
[{
"Handler": "path/to/module.some_function",
"Role": "arn:aws:iam::your-role",
"FunctionName": "some_funtion",
"Timeout": 3,
"MemorySize": 128,
"Description": "Traitement facile"
}, {
"Handler": "path/to/module.other_function",
"Role": "arn:aws:iam::your-role",
"FunctionName": "else_funtion",
"Timeout": 30,
"MemorySize": 1280,
"Description": "Traitement lourd"
}]
Veuillez télécharger le zip créé à l'endroit où la notification est envoyée côté Lambda.
(Si vous avez le temps après la publication, collez la vidéo ou le GIF)
C'est l'introduction du code que j'ai créé avant de connaître l'existence de lambda-uploader.