利用 Serverless 框架打造个人网站

阅读时长 10 分钟读完

在当今互联网的时代,个人网站已经不再是一件仆仆的事情。对于许多前端开发人员来说,经营自己的网站是一项有趣且有益的活动,可以展示他们的技能和经验,同时也可以吸引其他人的注意和合作。

然而,搭建一个自己的网站并不是一项简单的任务。如果你熟悉服务器、框架和数据库,这可能不是一件令人望而生畏的事情。但对于那些没有这样的经验和技能的人来说,这可能是一道难以逾越的门槛。

有幸的是,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 文件。

在模板代码中,编写以下代码:

此代码创建了一个 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:

此代码导入 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

纠错
反馈