在当今互联网的时代,个人网站已经不再是一件仆仆的事情。对于许多前端开发人员来说,经营自己的网站是一项有趣且有益的活动,可以展示他们的技能和经验,同时也可以吸引其他人的注意和合作。
然而,搭建一个自己的网站并不是一项简单的任务。如果你熟悉服务器、框架和数据库,这可能不是一件令人望而生畏的事情。但对于那些没有这样的经验和技能的人来说,这可能是一道难以逾越的门槛。
有幸的是,Serverless 框架已经使搭建个人网站变得非常容易。Serverless 架构是一种基于云环境的架构,它将服务器管理和部署任务交给云服务提供商,并提供了丰富的 API、数据库等服务,使开发人员可以专注于业务逻辑的开发。相比传统的服务器架构,Serverless 可以节省更多的时间和成本。
本文将介绍如何利用 Serverless 框架来打造自己的个人网站。我们将使用 Serverless 框架搭建前端网站,包括静态页面部署和 API 网关构建。我们还将结合 Amazon Web Services(AWS)平台,使用 AWS Lambda、API Gateway 和 AWS DynamoDB 来实现一个简单的 TodoList 应用程序。
准备工作
在使用 Serverless 架构之前,你需要了解一些前端知识和技能,例如 HTML、CSS、JavaScript、React/Vue 等常见的前端技术,以及 Node.js、NPM、Webpack 等常用的工具。
另外,你需要注册一个 AWS 账户,并进行必要的身份验证。在注册过程中,AWS 会为你分配一个 Access Key 和 Secret Key,这对钥匙是用来访问你的 AWS 资源的。你需要保管好这些密钥,以避免安全问题。
静态页面部署
静态页面是网页中没有动态内容和交互的部分。通常,静态页面可以由 HTML、CSS 和 JavaScript 组成,不需要服务器的处理。因此,我们可以使用 Serverless 架构来部署静态页面并使其具有全球 CDN 加速。
在本例中,我们将使用 AWS S3 来托管我们的静态页面。AWS S3 是一种云对象存储解决方案,它允许开发人员存储和检索任意类型的文件,如文本、图片、视频等。使用 AWS S3 的主要优点是可靠性高、安全性好,并可用于任何规模的 Web 应用程序。
下面是一些简单的步骤来创建一个静态网页部署。
步骤 1:创建一个 S3 桶
在 AWS S3 控制台上,创建一个新的 S3 桶,例如,命名为 my-website
。
步骤 2:上传静态文件
将你的网页文件上传到 S3 桶中。可以使用 AWS S3 控制台、AWS CLI 或 AWS SDK 来上传文件。确保所有的文件(HTML、CSS、JS 等)都是公开可读的。
步骤 3:配置桶属性
为了使我们的静态网站能在全球范围内加速,我们需要设置一些选项,例如启用网站托管模式、配置重定向规则、允许公共读访问等。
在 S3 控制台中,打开你的 S3 桶并转到属性选项卡。在托管选项中,选择“在此桶上启用静态网站托管”。在重定向规则选项中,添加以下规则:
-- -------------------- ---- ------- -------------- ------------- ----------- ---------------------------------------- ------------ ---------- ---------------------------------------------------- ----------- -------------- ---------------
此规则将 docs/
目录下的文件重定向到以 #/docs/
为前缀的 URL。
在权限选项卡中,设置“公共访问权限”为“公共读取对象”。
步骤 4:配置桶策略
为了确保我们的网站内容能够公开访问,我们需要将 S3 桶策略设置为允许公共访问。可以通过点击“编辑存储桶策略”来完成此操作,如下所示:
-- -------------------- ---- ------- - ---------- ------------- ------------ - - ------ ---------------------- --------- -------- ------------ ---- --------- --------------- ----------- --------------------------- - - -
构建 API 网关
API 网关是一种将我们的应用程序和用户之间的交互转换为 API 请求的服务。使用 API 网关,我们可以实现前端与后端之间的无缝交互,并将后端服务部署到云服务器上。
在本例中,我们使用的是 AWS API 网关。API Gateway 可以将来自客户端的请求路由到 Lambda 函数,并将 Lambda 函数的响应返回给客户端。API 网关还可以处理高流量、路由交错等常见问题,并提供易于扩展的性能。
步骤 1:创建一个 Lambda 函数
在 AWS Lambda 控制台上,创建一个新的 Lambda 函数,并将其保存在默认 Region 中。在创建过程中,选择下述配置:
- 运行环境: Node.js 14.x
- 角色名称: 选择“从模板中创建新角色”,并选择基于 AWSLambdaBasicExecutionRole 模板的角色。
- 函数代码: 从模板创建新的 Node.js 文件。
在模板代码中,编写以下代码:
exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello from Lambda!'), }; return response; };
此代码创建了一个 Lambda 函数,并返回一个简单的 JSON 响应。
步骤 2:创建 API 网关
在 AWS API Gateway 控制台上,创建一个新的 API,并选择“REST API”类型。在创建过程中,选择以下配置:
- API 名称: 选择一个描述性的名称,例如
my-api
- 终端节点类型: 选择“Edge optimized”
- 创建新的 API 线程安全密钥: 选择“否”
步骤 3:添加资源路径和方法
在 API Gateway 控制台中创建一个新的资源,并将其命名为“hello”。添加一个 GET 方法,并将其与之前创建的 Lambda 函数相关联。
打开“Integration Request”选项卡,在“Integration Type”下选择“Lambda 函数”。在“Lambda 函数名称”下,选择先前创建的 Lambda 函数。
步骤 4:部署 API
在 API Gateway 控制台中,创建一个新的 API 部署,并选择“新部署”。选择一个合适的名称,并将其与刚刚创建的 API 相关联。在“部署描述”中,可以添加自己的描述信息。
添加数据存储
在上述步骤中,我们已经将我们的前端网站和后端 API 构建了起来。但是,这个网站还有一个重要的组成部分,那就是数据存储。为了动态地创建和更新数据,我们需要使用一个可靠、可扩展的数据库。
AWS DynamoDB 是一种完全托管的非关系型数据库,适用于任何规模的应用程序。它提供了快速而且无服务器的数据处理,具有可靠的性能和弹性负载特性。
在本例中,我们创建了一个简单的 TodoList 应用程序,并使用 DynamoDB 存储任务列表。
步骤 1:创建 DynamoDB 表格
在 AWS DynamoDB 控制台上创建一个新的表格,并指定以下配置:
- 表名:输入“TodoList”
- 主键:输入“id”(字符串类型)
步骤 2:创建 DynamoDB API
在 AWS API Gateway 控制台上创建一个新的资源,并命名为“todolist”。添加 GET、POST 和 DELETE 方法,并将其与 DynamoDB 相关联。
为了将我们的 API 与 DynamoDB 相关联,我们将在此处使用 AWS SDK for JavaScript。此 SDK 可以对 DynamoDB 表格进行 CRUD 操作,并提供了异步执行、错误处理等高级功能。
在 Lambda 函数中,我们将使用以下代码来连接 DynamoDB API:
const { DynamoDB } = require('aws-sdk'); const dynamodb = new DynamoDB.DocumentClient();
此代码导入 AWS SDK for JavaScript,并创建 DynamoDB.DocumentClient。该客户端对象提供了一些较高级别的函数,如批量操作、条件表达式等。
步骤 3:编写 Lambda 函数
在 Lambda 函数中,我们将使用以下代码来处理表格中的数据:
-- -------------------- ---- ------- -- -------- ------------ - ----- -- -- - ----- ------ - - ---------- ---------- -- ------ -------------------------------- -- -- ----- -------------- - ----- ------- -- - ----- ------ - - ---------- ----------- ----- - --- --------- ----- --------------- ----- ----- - -- ------ ------------------------------- -- -- ---- -------------- - ----- ------- -- - ----- ------ - - ---------- ----------- ---- - --- -------- - -- ------ ---------------------------------- --
在此代码中,我们使用 DynamoDB.DocumentClient 的 scan 函数来检索所有任务列表,使用 put 函数来添加新任务,使用 delete 函数来删除任务。
为了使我们的 Lambda 函数能够处理 HTTP 请求,我们需要使用 API Gateway 和 Lambda 集成器。首先,需要在 Lambda 函数中声明一个 handler
函数,例如:
-- -------------------- ---- ------- --------------- - ----- ------- -------- -- - -- -- ---- --------- ------ ------------------ - ---- ------ ------ ----------------- ---- ------- ------ --------------------------- ---- --------- ------ -------------------------------------------- -------- ------ - ----------- ---- ----- ------- --- -------- -- - --
然后,在 API Gateway 控制台中,添加一个新的 Lambda 集成器,将其与 Lambda 函数相关联。
最后,需要为每个方法添加一个操作,并将其与 Lambda 集成器关联。
部署网站
最终,我们可以将我们的网站部署到一个全球分布的 CDN 上,并启用 HTTPS 加密。可以使用 CloudFront 服务来实现此目的。
步骤 1:创建 CloudFront 发送器
在 AWS CloudFront 控制台上创建一个新的分布式发送器,并配置以下内容:
- 储存桶或网站端点作为源:选择先前创建的 S3 桶。
- 分发器设置:选择自定义设置,然后启用 HTTPS,选择自动分配的随机 ID。
- 价格级别: 选择“使用 AWS 的标准价格级别”。
步骤 2:配置 DNS 记录
为了使我们的网站可访问,我们需要将域名解析到 CloudFront 发送器上。可以使用 AWS Route53 服务来实现此目的。
在 AWS Route53 控制台中,创建一个新的 DNS 记录,例如,“my-website.com”。在此处选择 CloudFront 发送器的 end point。
最终,我们将得到一个完整的网站部署,涵盖了静态页面、API、数据库和 CDN。
结论
借助 Serverless 框架和云服务,个人网站的搭建变得简单而快捷。从静态页面部署到后端 API 构建,再到数据存储和访问,借助我们今天所介绍的工具和技术,开发人员可以轻松地完成功能丰富、性能卓越和高度可扩展的网站和应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/676f915ae9a7045d0d745b67