Intellipaat Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in AWS by (19.1k points)

I want to deploy my python package to Amazon and make it available via lambda. For this, I'm trying serverless. 

When I try to deploy my package I get the following error message: 

SLS_DEBUG=* serverless deploy --stage dev --aws-profile default

Serverless: Load command config

Serverless: Load command config:credentials

Serverless: Load command create

Serverless: Load command install

Serverless: Load command package

Serverless: Load command deploy

Serverless: Load command deploy:function

Serverless: Load command deploy:list

Serverless: Load command deploy:list:functions

Serverless: Load command invoke

Serverless: Load command invoke:local

Serverless: Load command info

Serverless: Load command logs

Serverless: Load command login

Serverless: Load command logout

Serverless: Load command metrics

Serverless: Load command print

Serverless: Load command remove

Serverless: Load command rollback

Serverless: Load command rollback:function

Serverless: Load command slstats

Serverless: Load command plugin

Serverless: Load command plugin

Serverless: Load command plugin:install

Serverless: Load command plugin

Serverless: Load command plugin:uninstall

Serverless: Load command plugin

Serverless: Load command plugin:list

Serverless: Load command plugin

Serverless: Load command plugin:search

Serverless: Load command config

Serverless: Load command config:credentials

Serverless: Load command rollback

Serverless: Load command rollback:function

Serverless: Load command requirements

Serverless: Load command requirements:clean

Serverless: Load command requirements:install

Serverless: Load command requirements:cleanCache

Serverless: Invoke deploy

Serverless: Invoke package

Serverless: Invoke aws:common:validate

Serverless: Invoke aws:common:cleanupTempDir

Serverless: Generated requirements from /home/ola/projects/lambda/tagdoc/requirements.txt in /home/ola/projects/lambda/tagdoc/.serverless/requirements.txt...

Serverless: Installing requirements from /home/ola/projects/lambda/tagdoc/.serverless/requirements/requirements.txt ...

Serverless: Docker Image: lambci/lambda:build-python3.6

Requirement 'pkgg-0.1.0.tar.gz' looks like a filename, but the file does not exist

Processing ./pkgg-0.1.0.tar.gz

Could not install packages due to an EnvironmentError: [Errno 2] No such file or directory: '/var/task/pkgg-0.1.0.tar.gz'

 

 

  Error --------------------------------------------------

 

  null

 

     For debugging logs, run again after setting the "SLS_DEBUG=*" environment variable.

 

  Stack Trace --------------------------------------------

 

Error: null

    at installRequirements (/home/ola/projects/lambda/tagdoc/node_modules/serverless-python-requirements/lib/pip.js:262:11)

    at installRequirementsIfNeeded (/home/ola/projects/lambda/tagdoc/node_modules/serverless-python-requirements/lib/pip.js:448:3)

    at ServerlessPythonRequirements.installAllRequirements (/home/ola/projects/lambda/tagdoc/node_modules/serverless-python-requirements/lib/pip.js:527:29)

From previous event:

    at PluginManager.invoke (/usr/lib/node_modules/serverless/lib/classes/PluginManager.js:390:22)

    at PluginManager.spawn (/usr/lib/node_modules/serverless/lib/classes/PluginManager.js:408:17)

    at Deploy.BbPromise.bind.then.then (/usr/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:123:50)

From previous event:

    at Object.before:deploy:deploy [as hook] (/usr/lib/node_modules/serverless/lib/plugins/deploy/deploy.js:113:10)

    at BbPromise.reduce (/usr/lib/node_modules/serverless/lib/classes/PluginManager.js:390:55)

From previous event:

    at PluginManager.invoke (/usr/lib/node_modules/serverless/lib/classes/PluginManager.js:390:22)

    at PluginManager.run (/usr/lib/node_modules/serverless/lib/classes/PluginManager.js:421:17)

    at variables.populateService.then.then (/usr/lib/node_modules/serverless/lib/Serverless.js:157:33)

    at runCallback (timers.js:810:20)

    at tryOnImmediate (timers.js:768:5)

    at processImmediate [as _immediateCallback] (timers.js:745:5)

From previous event:

    at Serverless.run (/usr/lib/node_modules/serverless/lib/Serverless.js:144:8)

    at serverless.init.then (/usr/lib/node_modules/serverless/bin/serverless:43:50)

    at <anonymous>

 

  Get Support --------------------------------------------

     Docs:          docs.serverless.com

     Bugs:          github.com/serverless/serverless/issues

     Issues:        forum.serverless.com

 

  Your Environment Information -----------------------------

     OS:                     linux

     Node Version:           8.15.0

     Serverless Version:     1.30.1

my serverless.yml file looks like this: 

# Welcome to Serverless!

#

# This file is the main config file for your service.

# It's very minimal at this point and uses default values.

# You can always add more config options for more control.

# We've included some commented out config examples here.

# Just uncomment any of them to get that config option.

#

# For full config options, check the docs:

#    docs.serverless.com

#

# Happy Coding!

 

service: tagdoc # NOTE: update this with your service name

 

# You can pin your service to only deploy with a specific Serverless version

# Check out our docs for more details

# frameworkVersion: "=X.X.X"

 

provider:

  name: aws

  runtime: python3.6

  region: eu-central-1

# you can overwrite defaults here

#  stage: dev

 

plugins:

  - serverless-python-requirements

 

# You need to have Docker installed to be able to set dockerizePip:

# true or dockerizePip: non-linux. Alternatively, you can set

# dockerizePip: false, and it will not use Docker packaging. But,

# Docker packaging is essential if you need to build native packages

# that are part of your dependencies like Psycopg2, NumPy, Pandas, etc

custom:

  pythonRequirements:

    dockerizePip: true

 

# you can define service wide environment variables here

#  environment:

#    variable1: value1

 

# you can add packaging information here

package:

  include:

    - ./nltk_data/*

 

functions:

  ttxt:

    handler: handler.ttxt

    events:

      - http:

          path: /ttxt

          method: get

          integration: lambda

          request:

            template:

              application/json: '{ "txt" : "$input.params(''txt'')" }'

          response:

            headers:

  turl:

    handler: handler.turl

    events:

      - http:

          path: /turl

          method: get

          integration: lambda

          request:

            template:

              application/json: '{ "url" : "$input.params(''url'')" }'

          response:

            headers:

              Content-Type: "'application/json'"

and of the top the directory includes all the required files, in particular, the built python package: 

tree -L 2 lambda/

lambda/

└── tagdoc

    ├── pkgg-0.1.0.tar.gz

    ├── handler.py

    ├── nltk_data

    ├── node_modules

    ├── package.json

    ├── package-lock.json

    ├── README.md

    ├── requirements.txt

    ├── serverless.yml

    └── srv

 

4 directories, 8 files

I'm currently running Debian 9.5. I've also shared the code with a friend running the same OS via Github and it seems he can deploy the package. Therefore, it looks it has to do with my local setup of serverless / docker. But I can't figure out how to resolve this. Any help would be really appreciated. 

The requirements.txt just contains one line: 

cat requirements.txt 

pkgg-0.1.0.tar.gz

Now the package itself has some dependency. By including only the package it takes the dependencies in the setup.py file from the package.

This is my .gitignore 

#Compiled source#

#################

*.pyc

 

# no data files #

################

*.csv

 

#Log files#

#################

*.log

 

#swap files#

###############

*.swp

*.*~

\#*\#

.\#*

 

#django migration directory#

############################

venv*

srv*

theme

collectedstatic

stunnel

 

# Elastic Beanstalk Files

.elasticbeanstalk/*

!.elasticbeanstalk/*.cfg.yml

!.elasticbeanstalk/*.global.yml

 

#Serverless package

.serverless

and this is how my .serverless looks like. All the requirements.txt have exactly the same content as the one above. 

tree -L 3 .serverless/

.serverless/

├── cloudformation-template-create-stack.json

├── requirements

│   └── requirements.txt

└── requirements.txt

 

1 directory, 3 files

1 Answer

0 votes
by (44.4k points)

Mostly it is the problem with the serverless-python-requirements, and also in few GitHub versions, it does not work seamlessly. So try changing the version. Also, check this issue for more insights.

https://github.com/UnitedIncome/serverless-python-requirements/issues/258

Related questions

Want to get 50% Hike on your Salary?

Learn how we helped 50,000+ professionals like you !

31k questions

32.8k answers

501 comments

693 users

Browse Categories

...