Отсутствуют зависимости при развертывании AWS Lambda с использованием бессерверной платформы

#amazon-web-services #aws-lambda #serverless-framework #serverless #aws-serverless

#amazon-web-services #aws-lambda #бессерверная платформа #бессерверный #aws-бессерверный

Вопрос:

Я пытаюсь использовать бессерверную платформу для развертывания обработчика предсказания Lambda в AWS, зависимостями моего кода являются pytorch и transformers (HF).

Я сталкиваюсь с этой проблемой, не уверен, как ее преодолеть,

Я настроил requirements.txt файл правильно, и он имеет следующие 2 строки,

 transformers==2.10
https://download.pytorch.org/whl/cpu/torch-1.5.0+cpu-cp38-cp38-linux_x86_64.whl
  

Когда я пытаюсь использовать команду «serverless deploy», иногда она создает пакет со всеми зависимостями в requirements.zip в рамках пакета, объем которого составляет около 144 МБ, это ожидаемый результат.

Журнал для справки

 C:UsersRajeshwaranpserverless-HFT>sls deploy
Serverless: Deprecation warning: Starting with next major version, API Gateway naming will be changed from "{stage}-{service}" to "{service}-{stage}".
            Set "provider.apiGateway.shouldStartNameWithService" to "true" to adapt to the new behavior now.
            More Info: https://www.serverless.com/framework/docs/deprecations/#AWS_API_GATEWAY_NAME_STARTING_WITH_SERVICE
Serverless: Adding Python requirements helper...
Serverless: Generated requirements from C:UsersRajeshwaranpserverless-HFTrequirements.txt in C:UsersRajeshwaranpserverless-HFT.serverlessrequirements.txt...
Serverless: Installing requirements from C:UsersRajeshwaranpserverless-HFTcache72130b8b1c12a9cc09719c938b787b829ceb78a73eeafa251ccf974d7dafec58_slspycrequirements.txt ...
Serverless: Docker Image: lambci/lambda:build-python3.8
Serverless: Using download cache directory C:UsersRajeshwaranpserverless-HFTcachedownloadCacheslspyc
Serverless: Running docker run --rm -v C:/Users/Rajeshwaranp/serverless-HFT/cache/72130b8b1c12a9cc09719c938b787b829ceb78a73eeafa251ccf974d7dafec58_slspyc:/var/task:z -v C:/Users/Rajeshwaranp/serverless-HFT/cache/downloadCacheslspyc:/var/useDownloadCache:z -u 0 lambci/lambda:build-python3.8 python -m pip install -t /var/task/ -r /var/task/requirements.txt --cache-dir /var/useDownloadCache...
Serverless: Zipping required Python packages...
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Removing Python requirements helper...
Serverless: Injecting required Python packages to package...
Serverless: WARNING: Function predict_answer has timeout of 60 seconds, however, it's attached to API Gateway so it's automatically limited to 30 seconds.
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
........
Serverless: Stack create finished...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service serverless-hft.zip file to S3 (144.02 MB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
.................................
Serverless: Stack update finished...
  

Но иногда, когда я использую ту же команду для развертывания, она создает пакет объемом 128 КБ (приблизительно) без каких-либо зависимостей в requirements.zip файл внутри пакета.

Журнал для справки,

 C:UsersRajeshwaranpserverless-HFT>sls deploy
Serverless: Deprecation warning: Starting with next major version, API Gateway naming will be changed from "{stage}-{service}" to "{service}-{stage}".
            Set "provider.apiGateway.shouldStartNameWithService" to "true" to adapt to the new behavior now.
            More Info: https://www.serverless.com/framework/docs/deprecations/#AWS_API_GATEWAY_NAME_STARTING_WITH_SERVICE
Serverless: Adding Python requirements helper...
Serverless: Generated requirements from C:UsersRajeshwaranpserverless-HFTrequirements.txt in C:UsersRajeshwaranpserverless-HFT.serverlessrequirements.txt...
Serverless: Using static cache of requirements found at C:UsersRajeshwaranpserverless-HFTcache72130b8b1c12a9cc09719c938b787b829ceb78a73eeafa251ccf974d7dafec58_slspyc ...
Serverless: Zipping required Python packages...
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Removing Python requirements helper...
Serverless: Injecting required Python packages to package...
Serverless: WARNING: Function predict_answer has timeout of 60 seconds, however, it's attached to API Gateway so it's automatically limited to 30 seconds.
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service serverless-hft.zip file to S3 (124.15 KB)...
Serverless: Validating template...
Serverless: Updating Stack...
Serverless: Checking Stack update progress...
..............
Serverless: Stack update finished...
  

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

Комментарии:

1. Используете ли вы лямбда-слои для включения своих зависимостей?

2. Нет, @SridharRaju, я здесь не использую слои.

3. Для упаковки зависимостей мы будем использовать лямбда-слои и предоставлять функции этих слоев. Я добавлю ответ для вашей справки.

4. Спасибо за ваш ответ, Шридхар, я использую уровень Lambda, но, тем не менее, я хотел бы понять, что вызывает это странное поведение, т.Е. Иногда Оно упаковывается, иногда оно оставляет зависимости.

5. Можете ли вы добавить свой бессерверный файл к вопросу?

Ответ №1:

Используйте lambda layer для упаковки всех ваших требований, убедитесь, что у вас есть все требования в requirements.txt досье.

Это работает только в том случае, если плагин serverless-python-requirements указан в разделе плагины. Замените свой пользовательский ключ на этот и предоставьте функциям, которым требуются эти требования, ссылку на использование этого уровня.

 plugins:
  - serverless-python-requirements
custom:
  pythonRequirements:
    layer: true
functions:
  auth:
    handler: data.auth
    layers:
      - { Ref: PythonRequirementsLambdaLayer}