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