如何为无服务器-1.0.0框架定义/部署的API添加自定义域?

Bla*_*ise 19 amazon-web-services aws-lambda aws-api-gateway serverless-framework

Serverless-1.0.0-rc.1支持部署可通过AWS API Gateway访问的API.

问题:我需要通过带有SSL证书的自定义域而不是随机分配的(URL https://qwertylgbtqert.execute-api....)来公开部署的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
Run Code Online (Sandbox Code Playgroud)

有一个问题与此有关:答案在这里,但没有提供适用的答案.特别是如何从serverless.yml自身内部分配自定义域.

它认为是否有可能创建AWS :: Route53资源并利用它,但我不知道如何在无服务器中执行此操作.

doo*_*uck 19

您需要先创建自定义域并上载证书.这不应该是此代码或您部署此软件的一部分.

拥有自定义域后,您需要考虑CloudFormation.

与无服务器框架中的所有其他内容一样; 您可以利用CloudFormation模板管理AWS中的资源.

因此,您的问题就变成了如何将您的API网关添加到CloudFormation中的自定义域(提示:如果您搜索CloudFormation而不是无服务器框架,那么Google上有更多帮助)?通过AWS::ApiGateway::BasePathMapping在CloudFormation中创建一个答案.

这在您的serverless.yml文件的资源中完成.像这样例如:

resources:
    Resources:
        pathmapping:
            Type: AWS::ApiGateway::BasePathMapping
            Properties:
                BasePath: oauth2
                DomainName: ${self:vars.domainName}
                RestApiId: 
                    Ref: ApiGatewayRestApi
                Stage: ${self:vars.stage}
Run Code Online (Sandbox Code Playgroud)

这需要你有变量domainName,并stageName在使用阶段serverless.env.yml文件.

编辑:对于rc1之前的无服务器框架1版本,您必须添加DependsOn: IamPolicyLambda到路径映射资源.这修复了:https://github.com/serverless/serverless/pull/1783

在rc1之前你应该使用RestApiApigEvent而不是ApiGatewayRestApi