0

I am changing the Node version of my project to 14 and trying to custom deploy it to my staging environment for testing. But after changing the version to 14, I get the following error when running serverless deploy --stage <some-name>:-

Resource handler returned message: "Uploaded file must be a non-empty zip (Service: Lambda, Status Code: 400, Request ID: fcd74175-94cd-4fd9-81ec-4a27042a685e)" (RequestToken: 54f90861-af13-989c-be06-cdb17f4b5f39, HandlerErrorCode: InvalidRequest)

Here are the console logs:-

Running "serverless" from node_modules
Serverless: Deprecation warning: bin/serverless is deprecated, use bin/serverless.js instead
            More Info: https://www.serverless.com/framework/docs/deprecations/#BIN_SERVERLESS
Serverless: Packaging service...
Serverless: Excluding development dependencies...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
Serverless: Uploading service get-payment-methods.zip file to S3 (102.27 MB)...
Serverless: Validating template...
Serverless: Creating Stack...
Serverless: Checking Stack create progress...
.............................................
Serverless: Stack create finished...
 
  Serverless Error ---------------------------------------
 
  Stack with id <stack-name> does not exist
 
  Get Support --------------------------------------------
     Docs:          docs.serverless.com
     Bugs:          github.com/serverless/serverless/issues
     Issues:        forum.serverless.com
 
  Your Environment Information ---------------------------
     Operating System:          darwin
     Node Version:              16.13.1
     Framework Version:         1.83.3 (local)
     Plugin Version:            3.8.4
     SDK Version:               2.3.2
     Components Version:        2.34.9

I went through the solutions given in Uploaded file must be a non-empty zip (Service: AWSLambdaInternal; Status Code: 400; Error Code: InvalidParameterValueException;. I tried upgrading the serverless version. I also tried with Node versions 14.19.1 and 14.15.4. But I keep getting the same error.

This is my package.json file:-

{
  "name": "GetPaymentMethods",
  "description": "GetPaymentMethods WebService",
  "version": "0.0.1",
  "private": true,
  "dependencies": {
    "@sentry/node": "5.12.0",
    "aws-serverless-express": "3.1.3",
    "cors": "^2.8.4",
    "dotenv": "8.0.0",
    "express": "4.16.2",
    "axios": "0.18.0",
    "node": "14.19.1"
  },
  "devDependencies": {
    "mocha": "5.0.0",
    "nyc": "^15.1.0",
    "moxios": "^0.4.0",
    "serverless-domain-manager": "^2.6.0",
    "serverless-sentry": "^1.2.0",
    "sinon": "^6.1.4",
    "supertest": "3.0.0",
    "unit.js": "2.0.0",
    "serverless-newrelic-lambda-layers": "^0.1.16",
    "eslint": "6.8.0",
    "serverless": "^1.32.0",
    "serverless-offline": "^3.31.0"
  },
  "scripts": {
    "pretest": "echo 'Running eslint' && eslint .",
    "test": "nyc mocha --recursive tests"
  },
  "nyc": {
    "reporter": [
      "lcov",
      "text-summary"
    ]
  }
}

This is my serverless.yml file:-

service: get-payment-methods
    
plugins:
  # - serverless-newrelic-lambda-layers
  # - serverless-domain-manager
  # - serverless-sentry
  - serverless-offline


provider:
  name: aws
  runtime: nodejs14.x
  region: eu-west-1
  memorySize: 128
  timeout: 30
  endpointType: REGIONAL
  deploymentBucket:
    name: np-serverless-deploy-bucket-npr
  environment:
    CONFIG: ${file(./serverless.env.yml):${opt:stage}.CONFIG} 
   
functions:
  get-payment-methods:
    handler: index.handler
    events:
      - http:
          path: /
          method: get
          cors: true
      - http:
          path: /v1/test
          method: get
          cors: true
      - http:
          path: /v1
          method: get
          cors: true         

I cannot use the latest Node v16 because AWS Lambda and CodeBuild does not support it. I have to use v14. Please help.

P.S. - The global Node version in my machine is 16.13.1, if that matters.

Sh4dy
  • 143
  • 2
  • 15
  • Have you tried reverting back to the version before Node 14 and then re-deploy again just to see if it's only the Node 14 upgrade that breaks it. I have a suspicion there are other changes aside from just changing to Node 14. – Noel Llevares Apr 19 '22 at 01:26
  • It might also be helpful to use Node 14 on your machine instead of Node 16. – Noel Llevares Apr 19 '22 at 01:27
  • @NoelLlevares Tried with multiple versions of Node 14, but it didn't work. With v16 though, it worked but I had to upgrade my serverless packages as well, along with some other packages. Sadly, I can't use v16 since Lambda and CodeBuild does not support it. Guess I'll have to stick with v12. – Sh4dy Apr 19 '22 at 10:48
  • The error says it cannot find the stack, perhaps try deleting the .serverless directory. – Himanshu Pant Apr 19 '22 at 19:07
  • Try switching your local to Node 14. Delete node_modules and package-lock.json/yarn.lock. Then do another npm/yarn install. – Noel Llevares Apr 19 '22 at 23:54

1 Answers1

0

So, I solved this by keeping the same NodeJS version for this project repo and the global one. It seems serverless picks up the global version for some reason and not the local one, which causes a conflict (check the console log I posted in the question). For me, v14.17.1 and v14.17.6 worked, without having to upgrade any other packages.

Sh4dy
  • 143
  • 2
  • 15