AWS Lambda - статическая инициализация Java - PullRequest
0 голосов
/ 15 мая 2018

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

Я думал о создании AsyncHttpClient в блоке статической инициализации. Так что, возможно, он будет выполнен один раз AWS, а затем снимок будет клонирован для каждого выполнения AWS Lambda. Я прав ?

Когда статический блок выполняется в AWS Lambda?

  • Один раз, а затем снимок экрана клонируется на каждый лямбда-вызов AWS
  • или статический блок выполняется для каждого выполнения Lambda отдельно (и это не поможет поместить туда создание Http-клиента)

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Как объяснил Mark B, «снимка» не существует.

AWS запускает контекст выполнения при первом вызове Lambda, а затем повторно использует его для следующих запросов.Однако это не гарантируется.AWS может закрыть этот контекст в любое время или создать другие для масштабирования Lambda в случае большой нагрузки.

Контекст выполнения состоит из контейнера, JVM и экземпляра Singleton Java-класса, в котором определена ваша функция-обработчик.

Поэтому я бы не рекомендовал выполнять «однократную» инициализацию в статическом блоке, а вместо этого в конструкторе вашего класса.Это значительно улучшит тестируемость вашего кода.

0 голосов
/ 15 мая 2018

Никогда не делается "снимок" вашей среды выполнения Lambda. Однако существует концепция повторного использования контейнера. Статический блок инициализации будет вызываться, когда функция запускается впервые в новом контейнере, и каждое последующее выполнение Lambda, отправленное этому контейнеру, сможет пропустить этап инициализации. Каждый раз, когда Lambda запускает новый контейнер для вашей функции Lambda, работа по инициализации должна будет повторяться снова.

Предлагаю прочитать этот пост в блоге AWS о повторном использовании Lambda-контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...