То, что вы делаете здесь, - это использование побочного эффекта от повторного использования контейнера.Нет нижней или верхней границы того, как долго будут сохраняться такие значения, и нет гарантии, что они вообще будут сохраняться.Это правильная оптимизация, но она полностью вне вашего контроля.
Важно помнить, что это сохраняет значение в одном контейнере.Он живет до тех пор, пока процесс Node в контейнере жив, и доступен всякий раз, когда будущий вызов функции повторно использует этот процесс в этом контейнере.
Если выполняется два или более вызовов одной и той же функцииодновременно они не будут находиться в одном контейнере и не будут видеть глобальные переменные друг друга.Это не делает его недопустимым, но вы должны знать об этом.Каталог /tmp/
будет демонстрировать очень похожее поведение, поэтому вам нужно его очистить при использовании.
Если вы сгенерируете какое-либо исключение, процесс и, возможно, контейнер будут уничтожены в любом случае.кэшированные значения будут пропущены при следующем вызове, так как для каждого контейнера существует только один процесс Node.
Если вы вообще не вызываете функцию в течение неопределенного / недокументированного количества минут, контейнер будет освобожденслужба, так что это уходит.
Повторное развертывание функции также очистит этот «кэш», поскольку новая версия функции не будет повторно использовать контейнеры из более старых версий функций.
ЭтоСовершенно правильная стратегия, если вы понимаете, что это особенность черного ящика без деталей, обслуживаемых пользователем.
См. также https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/ - пост, которому несколько лет, но он все еще точен.