什么是 Serverless
Serverless 是一种架构风格,它不需要实际的服务器来运行应用程序代码。Serverless 的应用程序是由云提供商管理的虚拟环境中运行的,这些环境采用 "Function as a Service(FaaS)" 的模式。
Serverless 带来的好处是显而易见的。首先,它使应用程序开发和部署更容易。其次,Serverless 架构在处理高流量的 Web 应用程序时能够显着降低资源成本。
Serverless 应用场景
Serverless 提供了一个基于事件驱动的环境,可以实现自动扩展和无需显式地管理基础架构。这样一来,Serverless 在以下方面应用得很广泛:
网站后端应用
数据处理和自动化
API 开发
应用程序流程和任务自动化
机器学习模型部署
定时任务
Serverless 后端开发应用 实践
在这里,我们将考虑一个 Serverless 实践方案,其中我们将使用它来构建一个快递网站。我们选择 Serverless 方式的原因是:
减少资源成本
可以根据业务变化,动态调整资源需求
可以快速构建
架构设计
构建一个快递网站的 Serverless 架构,其中大部分请求将会跑在静态资源上,但与之相对应的后端服务是一个 Node.js 服务。为了实现这个服务器,我们需要通过以下步骤来完成:
创建 S3 存储桶并将静态文件添加到其中。
创建一个 Lambda 函数,该函数可以为应用程序提供后端功能。
安装 API Gateway,以便能够向应用程序中添加 API 路由。
通过执行基于 Node.js 的 Express 服务器上的 Lambda 函数,将请求路由到后端。
然后将用于身份验证和管理的 Cognito 添加到架构中。
最后加载所有这些资源以启用 Web 应用程序。
静态文件和资源
静态资源由 HTML、CSS、JavaScript、图像和其他文件组成,这些文件在 Web 应用程序中不会改变。在我们的例子中,静态资源由 HTML 页面和 JavaScript 文件构成。
我们需要创建一个 S3 存储桶,并将所有静态文件部署到 S3 上。可以使用 AWS CLI 或 AWS 管理控制台来执行此项任务。
# 创建存储桶 aws s3 mb s3://mybucket # 部署静态文件 aws s3 sync . s3://mybucket --exclude "*.md" --exclude ".*”
Lambda 函数
为了提供我们的 Web 应用程序的后端功能,我们需要编写代码来创建一个 Lambda 函数。我们使用 Node.js 作为我们的后端、运行语言。
-- -------------------- ---- ------- ---- -------- ----- ------- - ------------------- ----- --- - ---------- --------------------- -------- ----- ---- - ----- ---------- - --------------------- ----- ------------ - - ------------- ------------- ---- ------------- ------- ----------- -- ----------------------------------- --- -------------- - ----展开代码
此 Lambda 函数要求 Express 框架的使用,并提供了一个路由。在这种情况下,路由处理从 URL 中获得请求参数并返回其跟踪信息。
使用以下命令将 Lambda 函数部署到 Lambda。
aws lambda create-function \ --region us-east-1 \ --function-name my-function \ --code S3Bucket=<my-bucket>,S3Key=<my-key> \ --handler index.handler \ --runtime nodejs14.x \ --role arn:aws:iam::<AWS_ACCOUNT_ID>:role/<ROLE_NAME>
API Gateway
API Gateway 允许 Web 应用程序向 Lambda 函数发送请求。我们可以通过以下方式来添加 API 路由:
打开 API Gateway 控制台。
点击 "创建 API",然后选择 "REST API"。
选择我们的 Lambda function,轻松配置路由。
一旦您的 API 完成,我们可以通过测试 url 调用该 API。
Cognito
最后,Cognito 允许您添加身份验证和访问控制。我们可以使用 Cognito 在 Web 应用程序中添加注册、登录、密码重置等功能。
打开 Amazon Cognito 控制台并创建一个新的 Cognito 用户池。
点击 "用户池",然后选择默认设置。
自定义用户密钥和密码政策。
最后,为我们的应用程序创建一个新的 App Client。
加载所有资源
最终步骤是将所有这些资源加载到 Web 应用程序中,以启用应用程序。可以使用 React、Vue 或纯 JS 等技术来实现此目标。
这里是一个简单的 HTML 和 JavaScript 代码示例:
-- -------------------- ---- ------- --------- ----- ------ ------ ----- ---------------- ----------------- ------------------- ------- ------ ---- ------------------ --------------- ------ ----------- --------------- -------------------- -------- ------- --------------------------------- ------------- ---- ------------ ------ ------ -------- -------- ----------- - ----- ---------- - -------------------------------------------- ------------------------------ - ----------- -------- ------- -------------- -- ---------------- ------------ -- - ----- --------- - ---------------------------------- ------------------- - - -------- ------------------------ ---------- --------------- -------- ------------------ -- -- -------------- -- - ---------------------- ------- --- - --------- ------- -------展开代码
这个 Web 应用程序的前端代码可以是任何想象得到的技术。重要的是,它结合了 Lambda 和 API Gateway,实现了 Serverless 架构,从而降低了 Web 应用程序的部署和运营成本,同时也可以根据实际业务情况实现动态升级。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67baac12306f20b3a69a4741