Очистка папки tmp из AWS Lambda

Привет, у меня есть среда AWS Lambda, где временный каталог теперь заполнен, и я получаю следующее:

java.lang.RuntimeException: java.nio.file.FileSystemException: /tmp/out3786803744412914689: No space left on device

Он бессерверный, поэтому я не могу просто войти в ящик и удалить содержимое каталога.

Есть ли способ исправить это, кроме развертывания изменения кода, чтобы очистить временную папку при перезапуске?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
8 071
4

Ответы 4

При срабатывании функции AWS Lambda создается временный контейнер. Затем в контейнере запускается лямбда-функция.

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

Кроме того, после того, как функция завершила выполнение, контейнер мощь будет сохранен и использован снова, если функция Lambda запускается снова.

Итак, не существует единого «сервера», который использовался бы для функции лямбда. Их может быть много, или это может быть один, который используется повторно.

Рекомендуется, чтобы функции удалили свои временные файлы из /tmp перед завершением выполнения. Таким образом, пространство будет доступно для следующего выполнения.

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

Нижняя граница: Запрограммируйте функцию, которая убирает за собой.

Тогда есть ошибка? Поскольку очистка удаляет файлы, которые я использую (dbl. Проверка w / stat перед выходом), все же свободное место на диске исчезает при следующем вызове

kjetildm 19.09.2018 08:01

Вы потенциально можете встроить оболочку Lambda в свою функцию Lambda, используя (или эмулируя) проект github лямбдаш.

Это позволит вам вызвать Lambda с определенным набором параметров, которые будут запускать функцию оболочки Lambda и выполнять любую команду оболочки, которую вы ей передали, например "rm / tmp / *". Я бы лично подумал о том, чтобы делать это только для сред разработки, а не для производства.

Тем не менее, «правильный» ответ - это ответ @John Rotenstein.

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

Вы также можете выгрузить все эти данные в какое-либо хранилище, если они все еще актуальны.

  • S3
  • Динамо
  • Redis

Чтобы добавить к ответу @John Rotenstein, наши лямбды загружают большую модель ML и перемещаются в / tmp в начале вызова.

В python мы делаем что-то вроде:

if not os.path.isdir(f'/tmp/{self.model}'):
    self.download_model()

Для нашего случая использования это лучше, чем очистка каталога / tmp в конце выполнения лямбда-выражения, поскольку это уменьшает количество вызовов и загрузок, необходимых для / из s3, что дает прирост производительности для теплых запусков. Это также означает, что лямбды завершатся быстрее, поскольку их не нужно очищать. Предостережение здесь в том, что наша модель статична, поэтому нам не нужно беспокоиться о недействительности кеша. Если вам нужно загружать часто меняющиеся данные, тогда, конечно, очистите каталог / tmp.

Другие вопросы по теме