19

Serverless-1.0.0-rc.1允许部署 API 以通过 AWS 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

有一个与此相关的问题:此处的答案,但未提供适用的答案。尤其是如何从内部分配自定义域serverless.yml

它认为是否可以创建一个 AWS::Route53 资源并利用它,但是我不知道如何在无服务器中做到这一点。

4

2 回答 2

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}

这要求您在使用的阶段的 serverless.env.yml 文件中具有domainName和的变量。stageName

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

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

于 2016-09-20T13:12:03.193 回答
2

我认为这个主题值得更新,所以我会尝试一下。请务必先使用证书管理器创建证书。然后确保您的“无服务器用户”具有修改 Route53 记录集的正确管理员权限。然后将以下内容添加到您的 serverless.yaml 中:

custom:
  customDomain:
    domainName: "api.example.com"
    certificateName: "*.example.com"
    createRoute53Record: true

plugins:
  - serverless-domain-manager

在部署之前运行(这可能需要一段时间):

serverless create_domain

可以在此处找到源和其他选项。

于 2019-09-09T13:51:43.650 回答