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文件中为所使用的阶段设置domainName
和stageName
的变量。
编辑:对于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
来源和其他选项可以在这里找到。