5

我正在使用无服务器框架在AWS Lambda中部署功能,但我找不到在何处/如何从创建的URL端点中删除阶段说明符。文档似乎没有涵盖这部分。如何从AWS Lambda函数+无服务器框架的URL中删除阶段?

例如,这是我的serverless.yml(省略不相关部分):

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 

一个serverless deploy后,将返回以下的服务信息:

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 

通知的/dev部分在URL端点,并且也在函数中。 dev是配置文件中stage参数的默认值。

serverless.yml文件中指定stage: something将在该URL中具有该/something作为后缀,并作为函数的一部分。

问题:如何从生成的URL端点中删除阶段规范,或者:如何防止阶段规范成为生成的URL的一部分?

(即该阶段是功能的一部分,是细,这将很容易在AWS LAMBDA仪表盘分离stagingproduction功能。)

回答

6

这是一个API网关功能/公约NOT从无服务器框架如此serverless不能做任何事情。

API网关要求您提供一个阶段,并将其添加到您的端点末尾。

API网关端点是为开发人员设计的,但它并不意味着用户友好。

如果您希望它是用户友好的,您可以为它添加一个自定义域。不同的阶段可以有不同的自定义子域名。

5

您可以做的一件事就是使用您拥有的自定义域(例如mycompany.com)并将其映射到您的API网关。这样,您不会向https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/发出请求,而是向https://api.mycompany.com/发出请求。

有一个名为serverless-domain-manager的插件,可以更容易地设置这个自定义域。查看this blog post了解如何使用它的完整演练。

+1

谢谢 - 很好的答案。我希望我能接受你和@dashmug的回答。因为他早一点,并且还提供了一些更多的解释(提到它是一个API网关约定),我接受了他的答案。尽管感谢您的无服务器域管理器的链接! –

+1

没问题! @dashmug有一个很好的答案。很高兴你有你想要的东西。 – Alex

+1

无服务器域管理器的链接非常有帮助! – iaforek

相关问题