amplify-education / serverless-domain-manager

Serverless plugin for managing custom domains with API Gateways.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error: V2 - Unable to update base path mapping for '...': Invalid stage identifier specified

jsw opened this issue Β· comments

Community Note

  • Please vote on this issue by adding a πŸ‘ reaction to the original issue to help the community and maintainers prioritize this request
  • Please do not leave "+1" or "me too" comments, they generate extra noise for issue followers and do not help prioritize the request
  • If you are interested in working on this issue or have submitted a pull request, please leave a comment

Bug Report

Error Description
After upgrading from 7.0.4 to 7.1.0 I get the following output

Command Run

npx sls deploy --stage dev

Console Output

Deploying foo to stage dev (us-west-2)
Warning: Function (api) timeout setting (30) may not provide enough room to process an HTTP API request (of which timeout is limited to 30s). This may introduce a situation where endpoint times out for a successful lambda invocation.

Γ— Stack foo failed to deploy (252s)
Environment: linux, node 18.16.1, framework 3.33.0 (local), plugin 6.2.3, SDK 4.3.2
Credentials: Local, environment variables
Docs:        docs.serverless.com
Support:     forum.serverless.com
Bugs:        github.com/serverless/serverless/issues

Error:
Error: V2 - Unable to update base path mapping for 'dev.example.com':
Invalid stage identifier specified
    at APIGatewayV2Wrapper.<anonymous> (/home/runner/work/.../node_modules/serverless-domain-manager/dist/src/aws/api-gateway-v2-wrapper.js:159:23)
    at Generator.throw (<anonymous>)
    at rejected (/home/runner/work/.../node_modules/serverless-domain-manager/dist/src/aws/api-gateway-v2-wrapper.js:6:65)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Error: Process completed with exit code 1.

Domain Manager Configuration
Replace this with your own serverless.yml file (anonymized, of course) to help us better resolve your issue.

custom:
  stage: ${opt:stage, self:provider.stage}
  domains:
    dev: dev.example.com
    test: test.example.com
    prod: example.com
  customDomain:
    domainName: ${self:custom.domains.${self:custom.stage}}
    basePath: ''
    stage: ${self:custom.stage}
    createRoute53Record: true
    apiType: http
    endpointType: 'regional'

Versions

  • Domain Manager version(s): 7.1.0
  • Node/npm version: Node 18
  • Serverless Version: 3.33.0
  • Lambda Code: Javascript

Hi @jsw

Please set the customDomain.stage to the $default or just remove the stage option and the plugin will set it to $default

More info is here: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html

Hi @rddimon

Thanks for the response. Can you elaborate at bit? You want me to change customDomain.stage from ${self:custom.stage} to ${default}? Or maybe dev, which I guess is the "default" stage, which is the value of provider.stage.

Did something change between 7.0.4 and 7.1.0 that requires me to update serverless.xml? I explicitly set the stage in each of my environments, e.g. sls deploy --stage dev and this works in 7.0.4 but not 7.1.0. Is that expected?

I second this issue, and I can confirm that setting customDomain.stage to $default helps overcome this error.

However it'll only deploy to our stg environment, it fails to deploy afterwards to prod.
This is the error received on an attempt to deploy to prod (using $default):

Error:
UPDATE_ROLLBACK_IN_PROGRESS: loans-v3-*** (AWS::CloudFormation::Stack)
Export with name sls-loans-v3-default-DistributionDomainNameHttp is already exported by stack loans-v3-staging

I'm getting a similar issue related to v7.1.0 where I can't deploy to prod after deploying to staging with the following error:

Export with name sls-back-end-default-HostedZoneIdHttp is already exported by stack back-end-staging

Hi @rddimon

Thanks for the response. Can you elaborate at bit? You want me to change customDomain.stage from ${self:custom.stage} to ${default}? Or maybe dev, which I guess is the "default" stage, which is the value of provider.stage.

Did something change between 7.0.4 and 7.1.0 that requires me to update serverless.xml? I explicitly set the stage in each of my environments, e.g. sls deploy --stage dev and this works in 7.0.4 but not 7.1.0. Is that expected?

In 7.1.0 we released a fix for the issue #578
the custom.customDomain.stage value is being ignored

It looks like, from the AWS documentation, that for the HTTP APIs we need to have the $default stage created before creating any other custom stages

To simply fix your issue you will need just to remove ustomDomain.stage option from the HTTP configurations

I second this issue, and I can confirm that setting customDomain.stage to $default helps overcome this error.

However it'll only deploy to our stg environment, it fails to deploy afterwards to prod. This is the error received on an attempt to deploy to prod (using $default):

Error:
UPDATE_ROLLBACK_IN_PROGRESS: loans-v3-*** (AWS::CloudFormation::Stack)
Export with name sls-loans-v3-default-DistributionDomainNameHttp is already exported by stack loans-v3-staging

Thank you for highlighting it!
We are going to release a fix for it today.

I am seeing this error - was it supposed to be resolved in the latest update? I just updated to v7.1.1 today and started seeing this issue. Will try the fix above but curious if there is something else I need to do.
Thanks!

I am seeing this error - was it supposed to be resolved in the latest update? I just updated to v7.1.1 today and started seeing this issue. Will try the fix above but curious if there is something else I need to do. Thanks!

Upgrading to v7.1.1 and setting the customDomain.stage to $default works!
Here's an example snippet:

  customDomain:
    domainName: ${env:DOMAIN, ''}
    stage: $default
    basePath: v3/loans
    apiType: http
    endpointType: regional

Thank you for the response @belferink1996! Our issue ended up being another result of updating with the aws sdk. I can confirm that the $default stage with version 7.1.1 does work.

Thanks!

maybe this should've been a major change, if the API is not compatible with the previous one?

Hi @zoli-kasa

It was a bit tricky release as it was a bug fix for the #578.

This issue is related only to the HTTP API type and not to the REST or Websocket.
Also, this is an AWS behavior to not allow to create a custom stage without $default for the HTTP API type.
One more thing is that the plugin will set $default stage for you in case not specified in the config.

But in general, the concern is right and we will take it into account in our further releases.

Hi @jsw

Is the issue solved for you now? Are we good to close the issue?

maybe you could write a detailed change about this in the release log, to help other users with the same issue during upgrade?

Hi @jsw

Is the issue solved for you now? Are we good to close the issue?

I have confirmed that removing custom.customDomain.stage fixes the issue. I have tested multiple stages. Thanks for the solution.

maybe you could write a detailed change about this in the release log, to help other users with the same issue during upgrade?

It might be harder to predict issues
But yeah good suggestion we will try to add known solutions next time