Как масштабировать Lambda, когда /tmp повторно используется?

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

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

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

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

Ответ 1

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

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

Ответ 2

Вероятно, вы столкнетесь с ограничение 512 МБ /tmp от AWS Lambda.

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