Error running Serverless Framework with serverless-python-requirements plugin

Viewed 1137

I'm trying to deploy my function with sls deploy but I'm getting the error below:

 Type Error ----------------------------------------------

  TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string or an instance of Buffer or URL. Received undefined
      at readFile (node:fs:351:10)
      at go$readFile (C:\Users\senai\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:118:14)
      at readFile (C:\Users\senai\AppData\Roaming\npm\node_modules\serverless\node_modules\graceful-fs\graceful-fs.js:115:12)
      at go$readFile (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\graceful-fs\graceful-fs.js:118:14)
      at Object.readFile (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\graceful-fs\graceful-fs.js:115:12)
      at Object.readFile (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\universalify\index.js:5:57)
      at Object.tryCatcher (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\util.js:16:23)
      at Object.ret [as readFileAsync] (eval at makeNodePromisifiedEval (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\promisify.js:1:1), <anonymous>:14:23)
      at moveModuleUp (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\serverless-python-requirements\lib\inject.js:63:6)
      at C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\serverless-python-requirements\lib\inject.js:118:18
      at tryCatcher (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\util.js:16:23)
      at MappingPromiseArray._promiseFulfilled (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\map.js:68:38)
      at MappingPromiseArray.PromiseArray._iterate (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\promise_array.js:115:31)
      at MappingPromiseArray.init (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\promise_array.js:79:10)
      at MappingPromiseArray._asyncInit (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\map.js:37:10)
      at _drainQueueStep (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\async.js:97:12)
      at _drainQueue (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\async.js:86:9)
      at Async._drainQueues (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\async.js:102:5)
      at Immediate.Async.drainQueues [as _onImmediate] (C:\Users\senai\Documents\GitHub\solvimm-addons-alarms\serverless\node_modules\bluebird\js\release\async.js:15:14)
      at processImmediate (node:internal/timers:464:21)

This error only happens when I try to use the plugin serverless-python-requirements, cause i tried run without this plugin and the lambda based on docker image runned successfully. My currently serverless.yml is:

service: solvimm-addons-alarms

frameworkVersion: '2'

custom:
  stage: ${opt:stage, self:provider.stage}
  region: ${opt:region, self:provider.region}
  pythonRequirements: #Configuração do plugin serverless-python-requirements
    dockerizePip: 'non-linux'
    slim: true
  alerts: #Configuração do plugin serverless-plugin-aws-alerts
    stages:
      - prod
      - staging
    topics:
      ok: 
        topic: !Sub 'arn:aws:sns:${self:custom.region}:${AWS::AccountId}:${AWS::StackName}-alarm'
      alarm:
        topic: !Sub arn:aws:sns:${self:custom.region}:${AWS::AccountId}:${AWS::StackName}-alarm'
      insufficientData:
        topic: !Sub 'arn:aws:sns:${self:custom.region}:${AWS::AccountId}:${AWS::StackName}-alarm'
  
provider:
  name: aws
  runtime: python3.8
  stage: dev
  stackTags:
    Owner: Solvimm
  region: us-east-1
  logRetentionInDays: 30
  apiGateway:
    apiKeySourceType: HEADER
    metrics: true
    apiKeys:
      - ${self:service}-${self:custom.stage}
  logs:
    restApi: true
  tracing:
    apiGateway: true
    lambda: true
  environment:
    LOG_LEVEL: INFO #Log level global para ser usado pelo logger aws-lambda-powertools
  ecr:
    images:
      ec2:
        path: "./src"
        file: Dockerfile.ec2

package:
  individually: true

functions:
  bot-talk: ${file(functions/bot-talk.yml)}
  slack-handler: ${file(functions/slack-handler.yml)}
  ec2: ${file(functions/ec2.yml)}


resources: ${file(resources.yml)}

plugins:
  - serverless-iam-roles-per-function
  - serverless-plugin-aws-alerts
  - serverless-python-requirements

The error happens on the ec2 function, cause when I remove it, the deploy run successfully, the ec2.yml function is:

memorySize: 512
timeout: 120
image: ec2
events:
  - http:
      path: "/ec2"
      method: post
      async: true
alarms:
  - functionDuration
  - name: functionDuration
    threshold: 600000
    description: ${self:service}-${self:custom.stage}-ec2 Lambda Timeout - WARNING
  - functionErrors
  - name: functionErrors 
    description: ${self:service}-${self:custom.stage}-ec2 Lambda Error - ERROR
  - functionThrottles
  - name: functionThrottles 
    description: ${self:service}-${self:custom.stage}-ec2 Lambda Throttle - ERROR
iamRoleStatements:
  - Effect: "Allow"
    Action:
      - xray:PutTraceSegments
      - xray:PutTelemetryRecords
      - logs:CreateLogStream
      - logs:PutLogEvents
      - logs:CreateLogGroup
      - sts:AssumeRole
    Resource:
      - "*"
  - Effect: "Allow"
    Action:
      - '*'
    Resource:
      - "*"

The requirements.txt on src/ec2:

click
boto3
awscli
0 Answers
Related