¿Cuál es el alcance o la vida útil de una variable global en AWS Lambda?
por ejemplo si hago algo como esto:
cache = {} def lambda_handler(event, context): # do something with "cache" # do something else with "cache" ¿Se inicializará la cache una vez por invocación (proceso nuevo para cada ejecución de Lambda) o una vez que se inicialice este módulo, se reutilizará para múltiples invocaciones?
Las variables globales conservan su valor entre invocaciones en el mismo entorno de ejecución.
Las bibliotecas deben definirse en el código de inicialización fuera del controlador, de modo que se carguen una vez cuando se crea el entorno de ejecución.
fuente aws
import boto3, json client = boto3.resource('dynamodb', region_name='eu-west-1') tbl = client.Table('my-dynamo-table') mydata = {} mydata["groups"] = [] def lambda_handler(event, context): if len(mydata["groups"]) == 0: # data is not cached, make call to dynamo data = tbl.scan() group_data = data['Items'] for group in group_data: mydata["groups"].append(group['name']) return mydata else: # return cached content return mydataAproveche la reutilización del entorno de ejecución para mejorar el rendimiento de su función. Inicialice los clientes del SDK y las conexiones de la base de datos fuera del controlador de funciones y almacene en caché los activos estáticos localmente en el directorio /tmp. Las invocaciones posteriores procesadas por la misma instancia de su función pueden reutilizar estos recursos. Esto ahorra costos al reducir el tiempo de ejecución de la función.
Las variables globales de Lambda no se actualizan con cada invocación. Lo que escriba dentro de la función del controlador se invocará con cada invocación.
Al llegar a la vida útil de las Variables globales, permanece mientras el contenedor inicializado permanezca activo (cierra el contenedor si permanece inactivo durante cierto período de tiempo) o el código se modifica y se vuelve a implementar. Debemos tener cuidado con lo que estamos poniendo como caché, es decir, si los datos almacenados en caché se actualizan con frecuencia, no es una buena idea almacenarlos en caché.
https://docs.aws.amazon.com/lambda/latest/dg/runtimes-context.html
https://medium.com/tensult/aws-lambda-function-issues-with-global-variables-eb5785d4b876