Как увеличить максимальный размер лямбда-пакета развертывания AWS (RequestEntityTooLargeException)? - PullRequest
0 голосов
/ 11 февраля 2019

Я загружаю источники лямбда-функций из AWS codebuild.Мой скрипт на Python использует NLTK, поэтому ему нужно много данных.Мой пакет .zip слишком большой, и возникает RequestEntityTooLargeException.Я хочу знать, как увеличить размер пакета развертывания, отправляемого с помощью команды UpdateFunctionCode.

Я использую AWS CodeBuild для преобразования источника из репозитория GitHub в AWS Lambda.Вот связанный файл buildspec:

version: 0.2
phases:
 install:
   commands:
     - echo "install step"
     - apt-get update
     - apt-get install zip -y
     - apt-get install python3-pip -y
     - pip install --upgrade pip
     - pip install --upgrade awscli
     # Define directories
     - export HOME_DIR=`pwd`
     - export NLTK_DATA=$HOME_DIR/nltk_data
 pre_build:
   commands:
     - echo "pre_build step"
     - cd $HOME_DIR
     - virtualenv venv
     - . venv/bin/activate
     # Install modules
     - pip install -U requests
     # NLTK download
     - pip install -U nltk
     - python -m nltk.downloader -d $NLTK_DATA wordnet stopwords punkt
     - pip freeze > requirements.txt
 build:
   commands:
     - echo 'build step'
     - cd $HOME_DIR
     - mv $VIRTUAL_ENV/lib/python3.6/site-packages/* .
     - sudo zip -r9 algo.zip .
     - aws s3 cp --recursive --acl public-read ./ s3://hilightalgo/
     - aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --zip-file fileb://algo.zip
     - aws lambda update-function-configuration --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --environment 'Variables={NLTK_DATA=/var/task/nltk_data}'
 post_build:
   commands:
     - echo "post_build step"

Когда я запускаю конвейер, у меня есть RequestEntityTooLargeException, потому что в моем пакете .zip слишком много данных.Смотрите журналы сборки ниже:

[Container] 2019/02/11 10:48:35 Running command aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --zip-file fileb://algo.zip
 An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation: Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation
 [Container] 2019/02/11 10:48:37 Command did not exit successfully aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --zip-file fileb://algo.zip exit status 255
[Container] 2019/02/11 10:48:37 Phase complete: BUILD Success: false
[Container] 2019/02/11 10:48:37 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: aws lambda update-function-code --function-name arn:aws:lambda:eu-west-3:671560023774:function:LaunchHilight --zip-file fileb://algo.zip. Reason: exit status 255

Все работает правильно, когда я сокращаю данные NLTK для загрузки (я пробовал только с пакетами stopwords и wordnet.

У кого-нибудь естьидея решить эту "проблему ограничения размера"?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Вы не можете увеличить размер пакета, но вы можете использовать лямбда-слои AWS для хранения некоторых зависимостей приложения.

https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path

Перед этими слоями обычно использовался шаблон для обхода этого ограничения.скачать огромные зависимости от S3.

0 голосов
/ 20 мая 2019

Я не пробовал это сам, но ребята из Заппа описывают трюк, который может помочь.Цитирование из https://blog.zappa.io/posts/slim-handler:

Zappa архивирует большое приложение и отправляет zip-файл проекта на S3.Во-вторых, Zappa создает очень минимальный тонкий обработчик, который просто содержит Zappa и его зависимости, и отправляет его в Lambda.

Когда тонкий обработчик вызывается при холодном запуске, он загружает большой проект zip из S3 и распаковывает егов общем / тмб пространстве лямбды.Все последующие вызовы этой теплой Lambda совместно используют пространство / tmp и имеют доступ к файлам проекта;таким образом, файл может быть загружен только один раз, если лямбда не нагревается.

Таким образом, вы должны получить 500 МБ в / tmp.

0 голосов
/ 11 февраля 2019

Вы не можете увеличить размер пакета развертывания для Lambda.Пределы AWS Lambda описаны в Руководстве по AWS Lambda devopler .Больше информации о том, как работают эти ограничения, можно увидеть здесь .По сути, размер вашего распакованного пакета должен быть меньше 250 МБ (262144000 байт).

PS: использование слоев не решает проблему с размером, но помогает в управлении и, возможно, ускоряет холодный запуск.Размер пакета включает слои - Лямбда-слои .

Функция может использовать до 5 слоев одновременно.Общий размер функции и всех уровней в разархивированном виде не может превышать ограничение размера пакета развертывания в 250 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...