Как масштабировать 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 ГБ.