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文件中为使用的阶段提供
domainName
和stageName
的变量。编辑:
对于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/