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

相關問題