如何为 serverless-1.0.0 框架添加自定义域 defined/deployed API?
How to add a custom domain for a serverless-1.0.0 framework defined/deployed API?
Serverless-1.0.0-rc.1 可以部署一个 API 以通过 AWS API 网关访问。
问题:我需要部署的 API 通过带有 SSL 证书的自定义域公开,而不是随机分配的 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 而不是无服务器框架,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
我认为这个主题值得更新,所以我会试一试。请务必先使用 Certificate Manager 创建证书。然后确保您的 "serverless user" 具有修改 Route53 记录集的正确管理员权限。然后将以下内容添加到您的 serverless.yaml:
custom:
customDomain:
domainName: "api.example.com"
certificateName: "*.example.com"
createRoute53Record: true
plugins:
- serverless-domain-manager
部署之前 运行(这可能需要一段时间):
serverless create_domain
可以找到来源和其他选项 here。
Serverless-1.0.0-rc.1 可以部署一个 API 以通过 AWS API 网关访问。
问题:我需要部署的 API 通过带有 SSL 证书的自定义域公开,而不是随机分配的 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 而不是无服务器框架,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
我认为这个主题值得更新,所以我会试一试。请务必先使用 Certificate Manager 创建证书。然后确保您的 "serverless user" 具有修改 Route53 记录集的正确管理员权限。然后将以下内容添加到您的 serverless.yaml:
custom:
customDomain:
domainName: "api.example.com"
certificateName: "*.example.com"
createRoute53Record: true
plugins:
- serverless-domain-manager
部署之前 运行(这可能需要一段时间):
serverless create_domain
可以找到来源和其他选项 here。