Выпуск ресурсов в AWS Lambda - PullRequest
0 голосов
/ 02 мая 2018

Я реализую функцию AWS Lambda с Java и сталкиваюсь с вопросом - как правильно высвобождать используемые ресурсы? В своей функции я выполняю различные вызовы некоторых ресурсов: выполняю запросы к БД, выполняю REST-вызовы сторонним сервисам (отправляю метрики StatsD, запускаем веб-хаки Slack и т. Д.), Взаимодействую с потоком Kinesys.

Не вдаваясь в детали, моя функция выглядит так:

public class RequestHandler {
    private StatisticsService statsService;         //Collect StatsD metrics
    private SlackNotificationService slackService;  //Send Slack notifications
    private SearchService searchService;            //Interact with DB

    //Simplified version of constructor
    public RequestHandler() {
        this.statsService = new StatisticsService();
        this.slackService = new SlackNotificationService();
        this.searchService = new SearchService();
    }

    public LambdaResponse handleRequest(LambdaRequest request, Context context) {
        /**
         * Main method of function
         * where business-logic is executed
         * and all mentioned services are invoked
         */
    }
}

И мой главный вопрос - где правильнее высвободить ресурсы, которые используются в моих сервисах, в конце метода handleRequest () (в таком случае мне нужно будет открывать их все снова при каждом следующем вызове Lambda- функция) или в методе finalize () класса RequestHandler?

1 Ответ

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

В соответствии с лучшими практиками Lambda вы должны:

Поддерживать и повторно использовать соединения (HTTP, базы данных и т. Д.), Которые были установлено во время предыдущего вызова.

Итак, ваш текущий код верен.

Что касается функции finalize (), я не думаю, что она актуальна. Лямбда-контекст выполнения будет удален в некоторый момент, автоматически освобождая все открытые ресурсы.

https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-code

...