2015-12-08 2 views
1

Есть ли способ зарегистрировать крючки запуска и остановки в функции AWS Lambda Java, либо через стандартные аннотации JSR-250 (@PostConstruct, @PreDestroy), либо какие-либо другие средства? Очевидно, я могу использовать конструктор zero-args или инициализатор экземпляра для начальной части вещей, но мне интересно узнать, есть ли лучший способ. Интерфейс API, который я пропускаю, возможно, - я, конечно, Не хотите использовать метод finalize() для выключения!Поддерживает ли AWS Lambda (Java API) аннотации JSR-250?

В качестве фона фона здесь используется для инициализации и закрытия экземпляра KafkaProducer, который мы будем использовать для отправки сообщений в тему на основе входящих событий таблицы DynamoDB.

Update

Лямбда лучшие практики поощрять написание лиц без функциональных классов - так что мое предположение, что нет намеренно нет поддержки запуска/останова кода. В этой модели, я думаю, нам нужно будет создавать и закрывать любые ресурсы, необходимые для каждого вызова события обработчика.

http://docs.aws.amazon.com/lambda/latest/dg/best-practices.html

ответ

1

AWS Lambda предназначен для использования в качестве лица без инфраструктуры, но он также будет использовать тот же самый «контейнер», при некоторых обстоятельствах, но вы хотите, чтобы убедиться, что вы понимаете, как это работает, прежде чем сделать заявление зависят от этого.

С помощью AWS Lambda с использованием Java это означает, что вы можете иметь одноэлементный класс, который может инициализировать один раз для каждого контейнера. Этот шаблон позволяет выполнять первоначальную настройку контейнера, например, загружать файлы с S3 один раз или устанавливать соединение с другим сервером, таким как Kafka, MySQL, Memcached и т. Д. (Примечание стороны: к этому можно подключить только серверы в общедоступном Интернете время, но подключение к серверам в VPC - это анонсированная функция, которая появится в ближайшее время.)

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

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

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


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

Обсуждение проблем с подключением опроса, связанного с истощением AWS Lambda очерчивает связанный с этим вопрос: https://forums.aws.amazon.com/thread.jspa?threadID=216000

+0

Спасибо - немного «смотреть это пространство» один в тот момент, то ..может опубликовать что-то на форумах AWS dev также относительно лучшей практики для обслуживания клиентских подключений к внешним службам (например, kafka). –

+0

Есть ли новые идеи относительно этого? – andresp

Смежные вопросы