2016-06-23 2 views
10

У меня есть функция лямбда, которая читает из DynamoDB и создает большой файл (~ 500M) в/tmp, который, наконец, загружен на s3. После загрузки лямбда удаляет файл из/tmp (поскольку существует высокая вероятность повторного использования экземпляра)Как масштабировать Лямбда, когда/tmp повторно используется?

Эта функция занимает около 1 минуты для выполнения, даже если вы игнорируете задержки.

В этом случае, когда я пытаюсь вызвать функцию снова, в < 1m, у меня нет контроля, если у меня будет достаточно места для записи в/tmp. Моя функция не работает.

Вопросы: 1. Какая известная работа вокруг этого сценария? (Потенциально дайте больше места в/tmp или убедитесь, что для каждого нового исполнения задано чистое/tmp) 2. Каковы наилучшие методы создания и управления файлами в Lambda? 3. Могу ли я подключить другое EBS или другое хранилище к Lambda для выполнения? 4. Есть ли способ иметь файловую систему, такую ​​как доступ к s3, чтобы моя функция вместо использования/tmp могла писать непосредственно на s3?

+3

Я не понимаю, зачем вам нужен файл (или файловая система), особенно учитывая, что вы используете FaaS/Amazon Lambda. Не могли бы вы переписать свой код так, чтобы выход DynamoDB передавался на S3 без записи на диск? –

+0

Существует много обработки, которая должна быть выполнена. Не просто простой свалка от dynamo до s3 – sandeepzgk

+0

Возможно, вы просто нажмете лимит (512M)? https://docs.aws.amazon.com/lambda/latest/dg/limits.html Это может помочь работать в памяти или добавить третью службу для временного хранения между ними. –

ответ

4

Я сомневаюсь, что два одновременно работающих экземпляра AWS Lambda будут совместно использовать/tmp или любой другой локальный ресурс, поскольку они должны выполняться в полной изоляции. У вашей ошибки должно быть другое объяснение. Если вы имеете в виду, что a последующий вызов AWS Lambda повторяет один и тот же экземпляр, вы должны просто очистить/tmp самостоятельно.

В общем, если ваш Лямбда является ресурсоемкой, вам лучше это делать в рабочем контейнере ECS и использовать Lambda для запуска задач ECS, как описано here.

+0

Я видел, что функция многократно используется. И столкнулись с проблемами, когда экземпляр используется повторно. Это означает, что папка tmp недоступна в этом случае – sandeepzgk

+8

Этот ответ верен. Экземпляры часто повторно используются **, но не одновременно **. Очистите каталог temp при завершении функции - или просто удалите все файлы, которые присутствуют при запуске (это означает, что после вызова обработчика, а не во время инициализации, конечно) - и это не должно быть проблемой. +1 –

+0

Это только _partial_ ответ на перечисленные четыре вопроса, и меня действительно интересуют ответы на _unanswered_. –

0

Скорее всего, вы столкнетесь с 512 MB /tmp limit AWS Lambda.

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

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