Serverless-1.0.0-rc.1允许将API部署为可通过AWS API Gateway进行访问。

问题:我需要通过具有SSL证书的自定义域公开部署的API,而不是随机分配的API(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资源并加以利用,但是我不知道如何在无服务器环境中做到这一点。

最佳答案

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

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

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

因此,您的问题变成了如何将API网关添加到CloudFormation中的自定义域中(提示:如果您搜索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

关于amazon-web-services - 如何为无服务器1.0.0框架定义/部署的API添加自定义域?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39507004/

10-12 15:28