如何在 Serverless 框架中实现免费 SSL 证书和 HTTPS 访问服务
Serverless 框架是近年来开发领域中流行的技术之一,它极大地提高了开发流程的效率,同时让前端工程师也能参与开发后端服务。然而,很多 Serverless 框架还无法提供 SSL 证书和 HTTPS 访问服务,这导致部署后端服务时需要进行额外的工作。在本篇文章中,我们将探讨如何在 Serverless 框架中实现免费 SSL 证书和 HTTPS 访问服务的方法,以及如何使用该服务。
实现方法
为了实现免费 SSL 证书和 HTTPS 访问服务,我们需要使用下面两个服务:
- Let’s Encrypt证书颁发机构
Let’s Encrypt是一个开放的证书颁发机构,它致力于让互联网上的所有网站都可以使用免费的SSL证书。要获取 Let’s Encrypt 的SSL证书,您需要拥有与您的域名相关联的证书电子邮件,并且您需要执行一些自动化的操作来证明您对该域名的拥有权。
- Amazon Web Services (AWS) Certificate Manager
AWS Certificate Manager是一个亚马逊提供的免费证书管理服务。它允许您将 SSL/TLS 证书部署到 AWS 服务上,以便使用 HTTPS 访问服务。
在 Serverless 框架中,我们需要使用 AWS Lambda 和 AWS API Gateway 来实现免费的 SSL 证书和 HTTPS 访问服务。AWS Lambda是一项无服务器计算服务,用于在云上运行代码,而 AWS API Gateway 则是一个完全托管的服务,它可以接受客户端和前端发送的 HTTP 请求,并将其转发到后端 Lambda 函数。
下面是使用 Serverless 框架和 AWS Lambda 和 API Gateway 来实现免费 SSL 证书和 HTTPS 访问服务的方法:
- 首先,需要在 Serverless 框架中配置 AWS Lambda 和 API Gateway。您可以在项目根目录下创建一个
serverless.yml
文件来定义您的 AWS Lambda 函数和 API Gateway 配置。例如:
-- -------------------- ---- ------- -------- ----------------- --------- ----- --- -------- ---------- ---------- ------ -------- ------------- ------- - ----- ----- - ------- ---
这份 serverless.yml
文件配置了一个名为 hello
的 Lambda 函数,它接受来自 API Gateway 的 HTTP GET 请求,并调用 handler.hello
处理这些请求。
- 接下来,需要将 AWS API Gateway 配置为接受 HTTPS 请求。要做到这一点,您需要在 Serverless 框架中的
serverless.yml
文件中添加下面这些内容:
-- -------------------- ---- ------- -------- - ------------------------- ------- ------------- ----------- -------------------- ---------------- -------------- --------- -- ------ ---------------------- -------------------- ----
这里,我们使用了 serverless-domain-manager
插件,它可以帮助我们在 AWS 上设置自定义域名和 SSL 证书。另外,我们在 customDomain
中定义了您的自定义域名和证书名称。
然后,需要将您的域名指向您创建的 API Gateway。要做到这一点,您需要在 DNS 服务提供商处设置一条 CNAME 记录指向 API Gateway。
最后,需要使用 Let’s Encrypt 工具从 Let’s Encrypt 颁发机构中获取 SSL 证书并将其上传到 AWS Certificate Manager 中。可使用 Certbot 工具自动获取证书,例如:
sudo apt-get install certbot sudo certbot certonly --manual --preferred-challenges=dns --email your-email@example.com -d your-domain-name.com
接下来,您将需要按照工具提示的内容在 DNS 服务提供商处添加一个 TXT 记录。完成之后,Certbot 工具将自动完成证书的签发过程。签发完毕的证书存储在 /etc/letsencrypt/live/your-domain-name.com
目录下。
最后,将证书上传到 AWS Certificate Manager 中。要做到这一点,只需使用以下命令:
aws acm import-certificate --certificate file:///etc/letsencrypt/live/your-domain-name.com/fullchain.pem --certificate-chain file:///etc/letsencrypt/live/your-domain-name.com/chain.pem --private-key file:///etc/letsencrypt/live/your-domain-name.com/privkey.pem
现在,您已经实现了免费 SSL 证书和 HTTPS 访问服务。您可以使用 https://your-domain-name.com/ 访问您的 Lambda 函数。
示例代码
在下面的示例代码中,我们将使用 Serverless 框架和 AWS Lambda 和 API Gateway 来实现一个简单的 Lambda 函数。该函数接受来自 API Gateway 的 HTTP GET 请求,并返回字符串 “Hello, World!”。我们将配置 AWS API Gateway 以接受 HTTPS 请求,并使用 Let’s Encrypt 工具获取 SSL 证书。
首先,我们需要在项目根目录下创建名为 handler.js
的 Lambda 函数。该函数使用 Node.js 编写并定义了一个名为 hello
的函数,该函数接受 event
和 context
两个参数,并返回字符串 “Hello, World!”。例如:
module.exports.hello = async (event, context) => { return { statusCode: 200, body: 'Hello, World!' } }
接下来,我们可以在 serverless.yml
文件中添加下面这些内容来定义 AWS Lambda 函数和 API Gateway 配置。例如:
-- -------------------- ---- ------- -------- ----------------- --------- ----- --- -------- ---------- ---------- ------ -------- ------------- ------- - ----- ----- - ------- --- -------- - ------------------------- ------- ------------- ----------- -------------------- ---------------- -------------- --------- -- ------ ---------------------- -------------------- ----
最后,将下面的命令输入到终端中以部署服务,即可在 AWS 上创建该 Lambda 函数和 API Gateway 配置,并启用 HTTPS 访问服务:
serverless deploy
结论
在本篇文章中,我们已经介绍了在 Serverless 框架中实现免费 SSL 证书和 HTTPS 访问服务的方法。我们探讨了如何使用 Let’s Encrypt 颁发机构和 AWS Certificate Manager 服务来获得 SSL 证书,并使用 AWS Lambda 和 API Gateway 部署服务并启用 HTTPS 访问。希望这篇文章能帮助您更轻松地构建 Serverless 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674fa9e9e884a3e30f2f7380