如何为定义/部署API的serverless--1.0.0框架添加自定义域



Serverless--1.0.0-rc.1允许部署API以通过AWS API网关进行访问。

问题:我需要通过具有SSL证书的自定义域公开部署的API,而不是随机分配的域(URLhttps://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

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

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

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

在您拥有自定义域之后,您需要从CloudFormation的角度进行思考。

就像无服务器框架中的其他一切一样;您可以利用CloudFormation模板来管理AWS中的资源。

因此,您的问题变成了如何在CloudFormation中将您的API网关添加到您的自定义域(提示:如果您搜索CloudFormation而不是Serverless Framework,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之前的Serverless Framework 1版本,您必须将DependsOn: IamPolicyLambda添加到路径映射资源中。此问题已修复于:https://github.com/serverless/serverless/pull/1783

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

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

custom:
  customDomain:
    domainName: "api.example.com"
    certificateName: "*.example.com"
    createRoute53Record: true
plugins:
  - serverless-domain-manager

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

serverless create_domain

来源和其他选项可以在这里找到。

相关内容

  • 没有找到相关文章

最新更新