J'utilise Serverless Framework pour déployer des fonctions dans AWS Lambda, mais je ne trouve pas où/comment je peux supprimer le spécificateur d'étape des points de terminaison URL créés. La documentation ne semble pas couvrir cette partie.
Par exemple, voici mon serverless.yml
(avec les parties non pertinentes omises):
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
Après un serverless deploy
, les informations de service suivantes sont renvoyées:
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
Remarquez le /dev
partie dans le point de terminaison URL, et aussi dans la fonction. Ce dev
est la valeur par défaut du paramètre stage
dans le fichier de configuration.
En précisant stage: something
dans le serverless.yml
le fichier aura ce /something
comme suffixe dans l'URL et dans le cadre de la fonction.
Question: comment puis-je supprimer la spécification d'étape des points de terminaison d'URL générés, ou: comment puis-je empêcher cette spécification d'étape de faire partie des URL générées?
(Que l'étape fasse partie de la fonction, c'est bien. Il sera facile de séparer les fonctions staging
et production
dans le tableau de bord AWS Lambda.)
Il s'agit d'une fonctionnalité/convention API Gateway NON issue de Serverless Framework, donc serverless
ne peut rien y faire.
API Gateway nécessite une étape et elle est ajoutée à la fin de votre point de terminaison.
Les points de terminaison API Gateway sont destinés aux développeurs, donc ils ne sont pas destinés à être conviviaux.
Si vous souhaitez qu'il soit convivial, vous pouvez lui ajouter un domaine personnalisé. Différentes étapes peuvent avoir différents sous-domaines personnalisés.
Une chose que vous pouvez faire est d'utiliser un domaine personnalisé que vous possédez (par exemple mycompany.com
) et mappez cela à votre passerelle API. De cette façon, plutôt que de faire une demande à https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/
, vous feriez une demande à https://api.mycompany.com/
.
Il y a un plugin appelé serverless-domain-manager
qui facilite la configuration de ces domaines personnalisés. Consultez cet article de blog pour une procédure pas à pas complète sur la façon de l'utiliser.
Déclenché par la réponse de @ dashnug "La passerelle API nécessite une étape et elle est ajoutée à la fin de votre point de terminaison" et une autre réponse que j'ai lue ailleurs, j'ai "résolu" le problème en rendant la spécification de l'étape un peu moins révélatrice (à propos de laquelle l'environnement de scène a été mentionné) en utilisant v1
comme une scène. Cela suggère également une sorte de versioning d'API, ce qui est également acceptable dans mon cas.
Alors, mon serverless.yml
la section contient maintenant:
provider:
name: aws
runtime: python3.6
memorySize: 512
region: ${opt:region, 'eu-west-1'}
profile: ${opt:profile, 'default'}
stage: ${opt:stage, 'v1'} # A trick to don't end up with "production" or "staging" as stage.