web-dev-qa-db-fra.com

AWS lambda stocke-t-il les variables globales?

J'ai créé un compteur d'incrémentation simple comme ci-dessous.

global.counter = 0;
exports.handler = (event, context, callback) => {
    // TODO implement
    callback(null, ++global.counter);
};

Chaque fois que je teste cette fonction, je reçois une valeur incrémentée comme prévu.

Est-ce la bonne approche ou dois-je stocker un compteur dans une base de données en nuage?

6
JagsSparrow

Lorsque vous appelez votre fonction Lambda pour la première fois, un conteneur est démarré en arrière-plan par AWS.

Lorsque vous appelez votre fonction Lambda plusieurs fois, vousPOURRIEZobtenir le même conteneur afin d’optimiser la durée d’exécution et le délai d’installation.

Vous ne pouvez pas compter sur ce comportement, mais vous devez savoir qu'il existe.

Pour vous, vars globaux, si vous devez exécuter votre logique dans Lambda, plusieurs fonctions devraient appeler le même code en même temps et devraient donc être verrouillées quelque part en dehors du code lambda (base de données ou cache).

Cordialement,

15
Thomas L.

J'avais le même problème et j'ai finalement utilisé le service AWS Elasticache (Memcached) pour stocker des paires (clé, valeur). C'est rapide, assez facile à utiliser (à partir de python au moins) et fiable. 

Sinon, je suis tout à fait d’accord avec Thomas, vous devez être conscient du fait que cela peut causer des problèmes, mais ne faites pas confiance à cette "fonctionnalité".

2
tipchi