web-dev-qa-db-fra.com

Comment supprimer l'étape des URL pour les fonctions AWS Lambda + Framework sans serveur?

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.)

20

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.

17
dashmug

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.

29
Alex

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.