15

Serverless-1.0.0-rc.1允許部署API以通過AWS API網關訪問。如何爲無服務器1.0.0框架定義/部署的API添加自定義域?

問題:我需要通過具有SSL證書的自定義域暴露部署的API,而不是隨機分配的URL(URL https://qwertylgbtqert.execute-api....)?

這可以從serverless.yml或無服務器框架內完成嗎?

這裏是我的簡單的服務serverless.yml定義:

service: my-service 
provider: 
    name: aws 
    runtime: nodejs4.3 

functions: 
    generate: 
    handler: handler.generate 
    events: 
     - http: 
     method: get 
     path: url 
     cors: true 

有它涉及到這個問題的:the answer here,但不提供適用的答案。特別是如何從serverless.yml本身內分配自定義域。

它認爲是否有可能創建AWS :: Route53資源並利用該資源,但是我不知道如何在無服務器中執行此操作。

回答

17

您需要先創建自定義域並上傳證書。這不應該是此代碼的一部分或您部署此軟件的一部分。

擁有自定義域名後,您需要根據CloudFormation進行思考。

與無服務器框架中的所有其他內容一樣;您可以利用CloudFormation模板來管理AWS中的資源。

因此,您的問題變成如何將您的API網關添加到您在CloudFormation中的自定義域中(提示:如果您搜索CloudFormation而不是無服務器框架,Google上有更多幫助)?通過在CloudFormation中創建AWS::ApiGateway::BasePathMapping就是答案。

這是在您的serverless.yml文件的資源中完成的。像這樣的例子:

resources: 
    Resources: 
     pathmapping: 
      Type: AWS::ApiGateway::BasePathMapping 
      Properties: 
       BasePath: oauth2 
       DomainName: ${self:vars.domainName} 
       RestApiId: 
        Ref: ApiGatewayRestApi 
       Stage: ${self:vars.stage} 

這需要你有在你使用的階段serverless.env.yml文件domainNamestageName變量。

編輯: 對於rc1之前的無服務器框架1的版本,您必須將DependsOn: IamPolicyLambda添加到路徑映射資源。這是固定的:https://github.com/serverless/serverless/pull/1783

RC1之前,您應該使用RestApiApigEvent代替ApiGatewayRestApi

+0

不管我使用或如何鍵入它,我總是得到錯誤「pathmapping-指定無效的域名標識」,即使我的域名正在通過AWS進行工作。奇怪的!更新:奇怪,這是因爲我們的.xyz TLDR! –

相關問題