Serverless 框架下自定义域名与 HTTPS 的实现方式
随着云计算和微服务的兴起,Serverless 架构正在成为越来越多企业的首选方案。Serverless 架构的特点是无需关注服务器的配置和管理,只需要编写函数代码,上传至云端,就可以实现高可用性、弹性伸缩、低成本等优势。但是,在实际应用中,我们常常需要对 Serverless 服务进行一些定制化的配置,比如自定义域名和启用 HTTPS。
本文将介绍在 Serverless 架构下,如何实现自定义域名和启用 HTTPS 的方法,并提供示例代码和指导意义。
一、自定义域名
默认情况下,Serverless 服务的访问地址是由云服务商自动生成的,比如 AWS Lambda 的地址是一个随机字符串,不太友好。而自定义域名可以使访问地址更加直观、易记,也更有利于品牌推广。
在 Serverless 框架中,自定义域名可以通过以下步骤实现。
- 在 DNS 服务商处添加域名解析记录
首先,在 DNS 服务商处添加一条域名解析,将自定义域名指向 Serverless 服务的访问地址。这里以阿里云 DNS 服务为例,具体操作如下:
- 登录阿里云控制台,进入 DNS 解析控制台。
- 在左侧导航栏中选择需要添加解析记录的域名。
- 点击“添加记录”,选择“CNAME”类型,并填写记录值为 Serverless 服务的访问地址,例如 abcdefg.ap-southeast-1.amazonaws.com。
- 在“主机记录”中填写自定义域名,例如 api.example.com。
- 点击“确认”保存记录。
- 在 Serverless 项目中配置自定义域名
接下来,在 Serverless 项目中配置自定义域名。以 AWS Lambda 为例,具体操作如下:
- 打开 serverless.yml 文件,添加以下配置:
custom: customDomain: domainName: api.example.com basePath: '' stage: ${self:provider.stage} certificateName: '*.example.com' createRoute53Record: true
其中,domainName 表示自定义域名,certificateName 表示 SSL 证书名称,createRoute53Record 表示是否在 AWS Route 53 中自动添加 DNS 解析记录。
- 在 provider 配置中添加以下内容:
customDomain: domainName: ${self:custom.customDomain.domainName} basePath: ${self:custom.customDomain.basePath} stage: ${self:custom.customDomain.stage} certificateName: ${self:custom.customDomain.certificateName}
- 部署 Serverless 服务
最后,部署 Serverless 服务。在命令行中执行以下命令:
sls create_domain sls deploy
执行成功后,就可以通过自定义域名访问 Serverless 服务了。
二、启用 HTTPS
启用 HTTPS 可以保证数据传输的安全性和完整性,防止中间人攻击和数据篡改。在 Serverless 架构中,启用 HTTPS 的方法主要有两种:使用云服务商提供的 SSL 证书或者自定义 SSL 证书。
- 使用云服务商提供的 SSL 证书
云服务商通常会提供一些免费的 SSL 证书,可以直接在 Serverless 服务中使用。以阿里云函数计算为例,具体操作如下:
- 登录阿里云控制台,进入函数计算控制台。
- 在左侧导航栏中选择需要启用 HTTPS 的函数,点击“函数配置”。
- 在“域名与证书”中,选择“使用系统默认证书”,并填写自定义域名。
- 点击“保存”。
- 自定义 SSL 证书
如果需要使用自定义 SSL 证书,则需要先在云服务商处申请证书,然后将证书上传至 Serverless 服务中。以 AWS Lambda 为例,具体操作如下:
- 在 AWS Certificate Manager 中申请 SSL 证书,并验证域名所有权。
- 在 Serverless 项目中的 serverless.yml 文件中添加以下配置:
custom: customDomain: domainName: api.example.com basePath: '' stage: ${self:provider.stage} certificateArn: arn:aws:acm:us-east-1:123456789012:certificate/abcd1234-abcd-1234-abcd-1234abcd1234
其中,certificateArn 表示 SSL 证书的 ARN(Amazon 资源名称)。
- 在 provider 配置中添加以下内容:
customDomain: domainName: ${self:custom.customDomain.domainName} basePath: ${self:custom.customDomain.basePath} stage: ${self:custom.customDomain.stage} certificateArn: ${self:custom.customDomain.certificateArn}
- 部署 Serverless 服务
最后,部署 Serverless 服务。在命令行中执行以下命令:
sls create_domain sls deploy
执行成功后,就可以通过 HTTPS 访问 Serverless 服务了。
三、总结
本文介绍了在 Serverless 框架下,如何实现自定义域名和启用 HTTPS 的方法。通过自定义域名和启用 HTTPS,可以提升 Serverless 服务的可用性和安全性,也更有利于企业品牌推广。希望本文对读者有所帮助,也欢迎读者提出宝贵意见和建议。
示例代码:
# serverless.yml service: my-service provider: name: aws runtime: nodejs12.x stage: dev region: ap-southeast-1 custom: customDomain: domainName: api.example.com basePath: '' stage: ${self:provider.stage} certificateArn: arn:aws:acm:us-east-1:123456789012:certificate/abcd1234-abcd-1234-abcd-1234abcd1234 stageVariables: foo: bar functions: hello: handler: handler.hello events: - http: path: /hello method: get cors: true private: true plugins: - serverless-plugin-custom-domain # handler.js module.exports.hello = async (event, context) => { return { statusCode: 200, body: JSON.stringify({ message: 'Hello, world!' }) }; };
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65893a60eb4cecbf2de7a3aa