如何从AWS Lambda函数+无服务器框架的URL中删除阶段?
我正在使用无服务器框架在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仪表盘分离staging
和production
功能。)
这是一个API网关功能/公约NOT从无服务器框架如此serverless
不能做任何事情。
API网关要求您提供一个阶段,并将其添加到您的端点末尾。
API网关端点是为开发人员设计的,但它并不意味着用户友好。
如果您希望它是用户友好的,您可以为它添加一个自定义域。不同的阶段可以有不同的自定义子域名。
您可以做的一件事就是使用您拥有的自定义域(例如mycompany.com
)并将其映射到您的API网关。这样,您不会向https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/
发出请求,而是向https://api.mycompany.com/
发出请求。
有一个名为serverless-domain-manager
的插件,可以更容易地设置这个自定义域。查看this blog post了解如何使用它的完整演练。
谢谢 - 很好的答案。我希望我能接受你和@dashmug的回答。因为他早一点,并且还提供了一些更多的解释(提到它是一个API网关约定),我接受了他的答案。尽管感谢您的无服务器域管理器的链接! –
没问题! @dashmug有一个很好的答案。很高兴你有你想要的东西。 – Alex
无服务器域管理器的链接非常有帮助! – iaforek