Совсем недавно я должен работать с безмерно на aws lambda. Это отличная технология, и я люблю идею не управлять и обеспечивать базовые серверы. Я делаю много программирования в Python, и, к счастью, aws lambda поставляется с промежуточным временем Python. Serverless Framework – отличный способ начать; это то, о чем я думал… Вот моя история с неверным развитием в AWS Lambda и Python и некоторые из моих болей.
Возможно, вы слышали термин Смертный Какая технология, в которой вам не волнуются управляющие серверами и ее базовой инфраструктурой. Тем не менее, они там, но вы заботитесь о сервер меньше Отказ У меня недавно была задача, где мне нужно было развернуть функцию глубокой обучения с Tensorflow и Керас Отказ Наши данные ученые передали мне его прогнозировать
– Функция, и мне нужно было изготовить ее. Так хорошо до сих пор. Я думал об использовании Смертная рамка Развернуть эту функцию на AWS. Во время настройки с помощью Виртуальский
Я столкнулся с моей первой проблемой. После гугула я узнал, что библиотека поддерживает в настоящее время Python3.7 И у меня установлен Python3.8. Хм… Хорошо, нет проблем, я буду использовать Докер вместо.
cd /path/to/my/project docker run -it --name tensorflow -v $(pwd):/root/home imagehash bash
Docker-image поставляется с Пип
из коробки.
# Installing Tensorflow pip install tensorflow==1.15 # Installing Keras pip install Keras==2.2.5
Обратите внимание, что я не бегу Виртуальский
Здесь, потому что я сейчас в новом контейнере для свежего докера с нулевыми пакетами. Итак, я удалил его. Я также знаю, что есть решение Для использования Tensorflow с Python 3.8, но положите это в требования .txt
😉 Мы должны придерживаться Стабильная версия Отказ
Сейчас было время, чтобы развернуть его на AWS. Это означает, что нам нужно создать обработчик. К счастью, Смертная рамка поставляется с шаблоном Python
# Python sls create --template aws-python3 --name name-of-service --path path/to/store # Note: sls is short for serverless, both are possible
Эта команда генерирует Handler.py
Для вашей функции и Serverless.yml
Для Serverless Setup. После удаления всех комментариев и изменив время выполнения Python, он выглядит следующим образом
service: aws-python provider: name: aws runtime: python3.8 functions: hello: # 1st hello function name for AWS handler: handler.hello # 1st handler tells sls where to look for a handler # 2nd handler is the Python file # 2nd hello is the function inside the Python file
У меня все еще есть проблемы с пониманием части функций и его ключей и как вызывать функцию. Я надеюсь, что получил это правильно, как описано выше. Когда я запустил бессвесовую рамку, у меня было что-то вроде
functions: handler: handler: handler.handler # Brainf*ck 🤪
Во всяком случае, теперь я готов развернуть, запустив команду
# Requirement: AWS Cli must be installed sls deploy
и выполнить его со своим ведомством
sls invoke -f handler --log # Output [ERROR] Runtime.ImportModuleError: Unable to import module 'tensorflow'
Хм, похоже, AWS не работает PIP Установка -R. требования .txt
Отказ Что странно, потому что этот файл также развернут. Это раздражает, но есть плагин для этого.
sls plugin install -n serverless-python-requirements
Это создает package.json
и а Node_Modules
Поскольку Servelless Framework записана в JavaScript и Node. Хорошо, теперь мы должны быть готовы к работе 💪
sls deploy # Error An error occurred: UploadLambdaFunction - Unzipped size must be smaller than 262144000 bytes (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException; Request ID: c3b94dc7-6a06-11e9-8823-bb373647997a).
Что?? 😱 262144000 BYTES, Ага Это ошибка, которую вы получаете. Теоретически, вы могли бы загрузить 0 байтов (я не знаю, как это возможно 😅), я думаю, вот почему сообщение в байтах. В других условиях функция должна быть не более 262 МБ. Ну, мой Handler.py
IS 4 KB и проект всего с Serverless Framework и его плагином 5 МБ.
Это должно быть зависимыми причинами требования .txt
Отказ Этот плагин должен что-то делать, и он устанавливает весь Tensorflow и Keras Library! И угадайте, какой Tensorflow уже ~ 500 МБ большой 😱.
Хорошо, Безсекретный питон-требования может иметь дело с ограничениями размеров лямбда.
custom: pythonRequirements: zip: true
И до Handler.py.
Я должен был вставить следующий фрагмент кода, чтобы расстегнуть требования:
try: import unzip_requirements except ImportError: pass
Это создает unzip_requirorements.py
также. Тем не менее, лямбда становится еще больше …
custom: pythonRequirements: zip: true slim: true # This had been added.
И угадайте, что, это все еще не удается Это все еще слишком большой … После гугула я нашел отличный всеобъемлющий Блог пост и я применил изменения (без докеризепип
хотя)
custom: pythonRequirements: dockerizePip: non-linux zip: true slim: true noDeploy: - boto3 - botocore - docutils - jmespath - pip - python-dateutil - s3transfer - setuptools - six - tensorboard package: exclude: - node_modules/** - model/** - .vscode/**
ET VOILA, у нас внезапно появится ZIP-файл с 150 МБ. Всякий раз, когда мы устанавливаем пакет из пипс
Мы также устанавливаем свои зависимости. И часто мы устанавливаем неосознанно тяжелые пакеты, такие как Numpy или Scipy Отказ С уныние
Мы опускаем конкретные пакеты из развертывания. Список выше является стандартным списком, который уже встроен в Lambda, а также Tensorboard.
Чтобы вызвать функцию, нам нужно запустить
sls invoke --function name-of-function
И, конечно, это не удается 😭
{ "errorMessage": "[Errno 28] No space left on device", "errorType": "OSError", .. }
Локально я запускал его на моем Mac с 8-ядром Intel Core I9 и 16 ГБ ОЗУ. На AWS я использовал максимальную память о 3008 МБ. Ну, лямбда не смогла запустить свою функцию науки о данных. В конце концов, я положил это в контейнер докеров и отправил эту функцию для AWS.
AWS разработал вычислительный процесс и разработка приложений с лямбдасом. Безвенно родился. Тем не менее, он не идеален для каждого случая использования. Вы заимствуете некоторую вычислительную силу, где у вас нет никакого влияния на мощность или ресурсы. То есть во многих случаях достаточно, но когда речь идет о обработке изображения или использования обширной библиотеки, вы можете перевернуть ваше использование серверу.
AWS разработал вычислительный процесс и разработка приложений с лямбдасом. Безвенно родился. Тем не менее, он не идеален для каждого случая использования. Вы заимствуете некоторую вычислительную силу, где у вас нет никакого влияния на мощность или ресурсы. То есть во многих случаях достаточно, но когда речь идет о обработке изображения или использования обширной библиотеки, вы можете перевернуть ваше использование серверу.
Я не говорю, что не буду использовать это. На самом деле, у меня есть много успешных историй, чтобы сказать, и я люблю серверусны 💓 Это просто не так просто, как все хвалят. Вам все еще нужно знать, что за обработчик , размер лямбда и вычислительная мощность вам нужна. Вам нужно настроить во многих таких местах, как Ямл
– файлы (ы), AWS регион, потому что не каждый регион одинаково, и зависимости ваших зависимостей. Может быть, это действительно зависит от языка. У меня была меньше боли с узлом, чем с Python. Независимо от того, что начало, это много попыток и ошибок, которая также является трудоемким и может быть расстраивающим.
Тем не менее, Смертный Является ли мой первый выбор при разработке сервиса, и я думаю, что после многих ИБП и Даунс у вас будет лучшее чувство, когда его использовать и когда нет.
Оригинал: “https://dev.to/jolo/my-pain-with-serverless-and-aws-lambda-4hko”