Очень медленные запросы к dynamodb от лямбда-функции

У меня есть лямбда-функция и таблица динамо-db в той же области (us-east-1). В лямбда-функции я выполняю очень простой запрос:

params =
  TableName: 'users'
  Item:
    email:
      S: event.body.email
  ConditionExpression: 'attribute_not_exists (email)'
dynamodb.putItem(params, context.done)

В таблице DynamoDB всего несколько строк, есть Хэш-ключ по электронной почте, а значения для чтения/записи - 5/5.

Лямбда-функция выполняется через ~ 4 секунды... Это очень медленно. Я что-то делаю неправильно?


Я тестировал свою функцию с различными настройками памяти для лямбда-функции (ранее она была установлена ​​на 128 Мб):

  • 256mb = > ~ 2000ms
  • 512mb = > ~ 1000 мс
  • 1024mb = > ~ 500ms
  • 1536mb = > ~ 300 мс

Таким образом, кажется, что время отклика зависит от 1-1 по памяти (ну на самом деле на вычислительной мощности, поскольку AWS масштабирует ее вместе с памятью). Тем не менее это сумасшествие, потому что для создания очень простого REST API я должен установить память 1536mb, чтобы сделать его "отзывчивым", в то время как моя программа использует 17mb!


Хм, с другой стороны, я подсчитал, что это будет стоить:

  • 8.32 $за 1 миллион запросов в 4000 мс с использованием памяти 128 МБ
  • 10.004 $за 1 миллион 300 мс запросов с использованием памяти 1536 МБ.

Значит, это не так уж плохо, я думаю...

Ответы

Ответ 1

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

См. статью Повторное использование контейнера в Lambda.