Внутри лямбда-функции AWS (написанной на Java) я хочу использовать AsyncHttpClient (https://github.com/AsyncHttpClient/async-http-client). К сожалению, создание экземпляра этого объекта занимает около 500 мс (но мне он все еще нравится, пожалуйста, не советуйте мне менять http-клиент).
Я рассматривал создание AsyncHttpClient в блоке статической инициализации. Так что, возможно, он будет выполнен AWS один раз, а затем снимок будет клонирован для каждого выполнения AWS Lambda. Я прав ?
Когда статический блок выполняется в AWS Lambda?
Спасибо за помощь




«Снимок» среды выполнения Lambda никогда не делается. Однако существует концепция повторного использования контейнера. Блок статической инициализации будет вызываться при первом запуске функции в новом контейнере, и при каждом последующем выполнении Lambda, отправляемом в этот контейнер, можно будет пропустить этап инициализации. Каждый раз, когда Lambda запускает новый контейнер для вашей Lambda-функции, эта инициализация должна повторяться снова.
Я предлагаю прочитать этот пост в блоге AWS о повторном использовании контейнера Lambda.
Как объяснил Mark B, не существует такого понятия, как «моментальный снимок».
AWS запускает контекст выполнения при первом вызове Lambda, а затем повторно использует его для следующих запросов. Однако это не гарантируется. AWS может закрыть этот контекст в любое время или создать другие для масштабирования вашей Lambda в случае большой нагрузки.
Контекст выполнения состоит из контейнера, JVM и экземпляр Singleton класса Java, в котором определена ваша функция-обработчик.
Поэтому я бы не рекомендовал выполнять «одноразовую» инициализацию в статическом блоке, а вместо этого в конструкторе вашего класса. Это значительно улучшит тестируемость вашего кода.