Я пытаюсь перенести функцию AWS Lambda
, написанную на Python
, на CF,
- распаковывает на лету и читает построчно
- выполняет некоторые преобразования света в каждой строке
- запись вывода (строка за раз или порции) без сжатия в GCS
Выходная информация> 2 ГБ - но чуть меньше 3 ГБ, поэтому она подходит для Lambda
, , всего .
Что ж, кажется невозможным или куда более вовлеченным в GCP
:
- несжатый не может поместиться в памяти или
/tmp
- ограничен 2048 МБ на момент написания этой статьи, поэтому Python Client lib upload_from_file
(или _filename
) не может использоваться
- есть эта официальная статья, но, к моему удивлению, она ссылается на
boto
, библиотеку, изначально предназначенную для AWS S3
, и довольно устаревшую, поскольку boto3
уже давно отсутствует. Нет подлинного GCP
метода для потоковой записи или чтения
- У Node.js есть простая
createWriteStream()
- хорошая статья здесь Кстати - но нет эквивалентной строки в Python
- Возобновляемая загрузка мультимедиа звучит так, но много кода для того, что обрабатывается в Node, гораздо проще
- AppEngine имел облачного хранилища , но недоступно за его пределами - и устарел
- Пример практически отсутствует на работающей оболочке для построчной записи текста / простых данных, как если бы
GCS
была локальной файловой системой. Это не ограничивается Cloud Functions
и отсутствием функции клиентской библиотеки Python, но более остро в CF из-за ограниченности ресурсов. Кстати, я был частью обсуждения , чтобы добавить функцию IOBase, доступную для записи, но она не имела тяги.
- очевидно, что использование виртуальной машины или
DataFlow
не подходит для рассматриваемой задачи.
На мой взгляд, потоковое (или потоковое) чтение / запись из облачного хранилища должно быть даже включено в стандартную библиотеку Python.
Как и было рекомендовано, можно по-прежнему использовать GCSFS , который за кулисами фиксирует загрузку кусками для вас, пока вы пишете материал в FileObj.
Та же команда написала s3fs
. Я не знаю, для Azure.
AFAIC, я буду придерживаться AWS Lambda
, поскольку вывод может уместиться в памяти - пока - но многочастная загрузка - это способ поддержать любой размер вывода с минимумом памяти.
Мысли или альтернативы?