Joc*_*per 15 amazon-web-services aws-lambda serverless-framework serverless-plugins
我正在使用无服务器框架在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
Run Code Online (Sandbox Code Playgroud)
在a之后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
Run Code Online (Sandbox Code Playgroud)
注意/devURL端点中的部分以及函数中的部分.这dev是stage配置文件中参数的默认值.
stage: something在serverless.yml文件中指定将/something在URL 中作为后缀,并作为函数的一部分.
问题:如何从生成的URL端点中删除阶段规范,或者:如何防止该阶段规范成为生成的URL的一部分?
(该阶段是该功能的一部分,很好.这将很容易在AWS Lambda仪表板中分离staging和production运行.)
Ale*_*lex 26
您可以做的一件事是使用您拥有的自定义域(例如mycompany.com)并将其映射到您的API网关.这样https://ab1cd2ef3g.execute-api.eu-west-1.amazonaws.com/dev/,您就可以提出请求,而不是发出请求https://api.mycompany.com/.
有一个名为插件serverless-domain-manager,可以更容易地设置这个自定义域.查看此博客文章,了解如何使用它的完整演练.
das*_*mug 15
这是一个API网关功能/约定,不是来自无服务器框架,所以serverless无法对它做任何事情.
API网关要求您使用阶段,并将其附加在端点的末尾.
API网关端点适用于开发人员,因此它并不意味着用户友好.
如果您希望它是用户友好的,您可以为它添加自定义域.不同的阶段可以有不同的自定义子域.
Tan*_*yer 13
这可以通过使用 来解决httpApi,它不会将阶段添加到 URL 路径,而不是将阶段添加到 URL 路径http。
代替
functions:
index:
handler: handler.index
events:
- http: # <-- change this
path: /
method: get
Run Code Online (Sandbox Code Playgroud)
用这个
functions:
index:
handler: handler.index
events:
- httpApi: # <-- to this
path: /
method: get
Run Code Online (Sandbox Code Playgroud)
该http密钥创建一个 API 网关“REST”(又名 v1)端点,同时httpApi创建一个“HTTP”(又名 v2)端点。v1 具有更多功能,但 v2 更快、更便宜。
来自无服务器文档:
尽管名称令人困惑,但这两个版本都允许部署任何 HTTP API(如 REST、GraphQL 等)。
完整比较 https://docs.aws.amazon.com/en_us/apigateway/latest/developerguide/http-api-vs-rest.html
小智 10
在本地环境中,我们可以在运行开发服务器sls offline start --noPrependStageInUrl时使用--noPrependStageInUrl 标志:当使用无服务器离线时。在线,我们可能会设置 CloudFront 或自定义域。
由@dashnug 的回答“API 网关要求你有一个舞台,它附加在你的端点的末尾”和我在别处读到的另一个回复触发,我通过使舞台规范不那么重要来“解决”了这个问题(关于哪个舞台环境被称为)v1作为舞台使用。这也暗示了某种 API 版本控制,这在我的情况下也是可以接受的。
所以,我的serverless.yml部分现在包含:
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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |