Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

serverless deploy function with a custom docker image fails #12778

Closed
brettdh opened this issue Aug 29, 2024 · 1 comment
Closed

serverless deploy function with a custom docker image fails #12778

brettdh opened this issue Aug 29, 2024 · 1 comment
Assignees
Labels

Comments

@brettdh
Copy link

brettdh commented Aug 29, 2024

Issue description

I'm in the process of upgrading to Serverless v4. I have a lambda that I'm attempting to deploy with serverless deploy function. This lambda, like many others in my app, is deployed with a custom docker image, However, when I run serverless deploy function, I get this error:

✖ Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.

When I run with --debug, I see this suspicious-looking request in the output just before the error:

s:sls:aws:request: request: #2 Lambda.updateFunctionConfiguration [
  {
    FunctionName: 'myservice-brhiggins-lambdas-dev-manage-dk',
    Runtime: 'nodejs20.x',
    ImageConfig: { Command: [ 'functions/manage.handler' ] }
  }
]

The presence of Runtime: 'nodejs20.x' in that request seems like a bug. That's the default runtime, and I haven't specified a runtime for this function, but just the image config should be there, not a built-in lambda runtime.

For whatever reason, this only seems to affect serverless deploy function; I'm able to run serverless deploy and all my functions get deployed correctly. I'm happy to work on a PR, as this is a blocker for my upgrade to v4.

Aside: my original thought was to use patch-package to modify serverless to unblock our upgrade quickly, but I noticed that the installed serverless source doesn't even live in node_modules anymore. Is there anywhere I can read more about that decision and its implications for typical dev workflows? I don't see anything about it in CONTRIBUTING.md or test/README.md.

Context

I am using Serverless 4.2.4 but I don't have an active subscription yet, so serverless support refuses to run.

Slimmed down + simplified `serverless.yml`
service: myservice 
provider:
  name: aws
  endpointType: REGIONAL
  deploymentMethod: direct

  ecr:
    images:
      python-base-image:
        uri: "${aws:accountId}.dkr.ecr.${self:custom.region}.amazonaws.com/my-base-image@sha256:hash"

  # other provider config omitted

functions:
  manage-dk:
    name: ${self:service}-lambdas-${self:custom.stage}-manage-dk
    
    image:
      name: python-base-image
      command:
        - "functions/manage.handler"
  
  # other functions omitted
Output of `sls deploy function -f manage-dk --debug`
s:sls:plugin:awsdeployfunction: checking if function changed
s:sls:lifecycle:command:invoke:hook: [2] > deploy:function:initialize
s:sls:lifecycle:command:invoke:hook: [4] < before:deploy:function:packageFunction
s:main: Retrieving function info
s:sls:lifecycle:command:invoke:hook: [4] > before:deploy:function:packageFunction
s:sls:lifecycle:command:invoke:hook: [4] < before:deploy:function:packageFunction
s:sls:lifecycle:command:invoke:hook: [4] > before:deploy:function:packageFunction
s:sls:lifecycle:command:invoke:hook: [5] < deploy:function:packageFunction
s:sls:lifecycle:command:invoke: Invoke package:function
s:sls:lifecycle:command:invoke:hook: [7]   < package:function:package
s:sls:lifecycle:command:invoke:hook: [7]   > package:function:package
s:sls:lifecycle:command:invoke:hook: [5] > deploy:function:packageFunction
s:sls:lifecycle:command:invoke:hook: [10] < before:deploy:function:deploy
s:main: Packaging
s:sls:lifecycle:command:invoke:hook: [10] > before:deploy:function:deploy
s:sls:lifecycle:command:invoke:hook: [11] < deploy:function:deploy
s:sls:plugin:awsdeployfunction: deploying function code
Image did not change. Function deployment skipped. (0s)
s:main: Updating function configuration
s:sls:plugin:awsdeployfunction: deploying function configuration changes
s:sls:aws:request: request: #2 Lambda.updateFunctionConfiguration [
  {
    FunctionName: 'myservice-brhiggins-lambdas-dev-manage-dk',
    Runtime: 'nodejs20.x',
    ImageConfig: { Command: [ 'functions/manage.handler' ] }
  }
]
s:sls:aws:request: request error: #2 - Lambda.updateFunctionConfiguration InvalidParameterValueException: Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.
s: InvalidParameterValueException: Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.
    at Object.extractError (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/protocol/json.js:80:27)
    at constructor.extractError (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/protocol/rest_json.js:62:8)
    at constructor.callListeners (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at constructor.emit (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at constructor.emitEvent (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:686:14)
    at constructor.transition (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.AcceptorStateMachine.runTo (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at <anonymous> (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/state_machine.js:26:10)
    at constructor.<anonymous> (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:38:9)
    at constructor.<anonymous> (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:688:12)
    at constructor.callListeners (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/sequential_executor.js:116:18)
    at constructor.emit (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at constructor.emitEvent (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:686:14)
    at constructor.transition (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.AcceptorStateMachine.runTo (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at <anonymous> (/Users/brhiggins/.serverless/releases/node_modules/aws-sdk/lib/state_machine.js:26:10)
----------------------------------------------------------------------------------------------------
s:sls:lifecycle:command:invoke:hook: [11] > deploy:function:deploy
s:main: Finishing
s:core:meta: saving meta record to global .serverless directory.
s:cli-error-handler: Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image. (AWS_LAMBDA_UPDATE_FUNCTION_CONFIGURATION_INVALID_PARAMETER_VALUE_EXCEPTION)
ServerlessError2: Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.
    at <anonymous> (/Users/brhiggins/.serverless/releases/4.2.4/serverless/lib/aws/request.js:238:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at persistentRequest (/Users/brhiggins/.serverless/releases/4.2.4/serverless/lib/aws/request.js:150:14)

✖ Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.
ServerlessError2: Please don't provide Handler or Runtime or Layer when the intended function PackageType is Image.
    at <anonymous> (/Users/brhiggins/.serverless/releases/4.2.4/serverless/lib/aws/request.js:238:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at persistentRequest (/Users/brhiggins/.serverless/releases/4.2.4/serverless/lib/aws/request.js:150:14)
@brettdh
Copy link
Author

brettdh commented Sep 17, 2024

Looks like this is fixed by #12810.

@brettdh brettdh closed this as completed Sep 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants