Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove stage from URLs for AWS Lambda functions + Serverless framework?

I'm using Serverless Framework to deploy functions in AWS Lambda, but I can't find where/how I can remove the stage specifier from the URL endpoints created. The documentation does not seem to cover this part.

For example, this is my serverless.yml (with irrelevant parts omitted):

service: cd-mock provider:   name: aws   runtime: python3.6   region: eu-west-1 package:   include:     - handler.py functions:   index:     handler: handler.index     events:       - http:           path: /           method: get 

After a serverless deploy, the following service information is returned:

service: cd-mock stage: dev region: eu-west-1 stack: cd-mock-dev api keys:   None endpoints:   GET - https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/ functions:   index: cd-mock-dev-index 

Notice the /dev part in the URL endpoint, and also in the function. That dev is the default value for the stage parameter in the configuration file.

Specifying stage: something in the serverless.yml file will have that /something as suffix in the URL, and as part of the function.

Question: how can I remove the stage specification from the generated URL endpoints, or: how can I prevent that stage specification to become part of the generated URLs?

(That the stage is part of the function, is fine. That will be easy to separate staging and production functions in the AWS Lambda dashboard.)

like image 731
Jochem Schulenklopper Avatar asked Oct 20 '17 21:10

Jochem Schulenklopper


People also ask

What is a stage in serverless framework?

Serverless Framework allows you to create stages for your project to deploy to. Stages are useful for creating environments for testing and development. Typically you create a staging environment that is an independent clone of your production environment.

How do I remove old versions of Lambda?

To delete a specific function version, use the Qualifier parameter. Otherwise, all versions and aliases are deleted. To delete Lambda event source mappings that invoke a function, use DeleteEventSourceMapping.


2 Answers

One thing you can do is use a custom domain that you own (e.g. mycompany.com) and map that to your API Gateway. This way, rather than making a request to https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/, you would make a request to https://api.mycompany.com/.

There's a plugin called serverless-domain-manager that makes it much easier to set up this custom domains. Check out this blog post for a full walkthrough on how to use it.

like image 135
Alex Avatar answered Sep 21 '22 02:09

Alex


This is an API Gateway feature/convention NOT from Serverless Framework so serverless can't do anything about it.

API Gateway requires you with a stage and it is appended at the end of your endpoint.

API Gateway endpoints are meant for developers though so it is not meant to be user-friendly.

If you want it to be user-friendly, you can add a custom domain for it. Different stages can have different custom subdomains.

like image 37
Noel Llevares Avatar answered Sep 18 '22 02:09

Noel Llevares