前言
Serverless 架构是近年来出现的一种新型架构,它可以让我们更加聚焦于业务逻辑,而不是服务器和运维。本文将介绍如何在 Serverless 架构下快速开发一个项目。
准备工作
在开始之前,你需要:
- 具备一定的前端开发基础技能;
- 熟悉 Node.js 和 serverless 框架。
技术选型
在 Serverless 架构下,我们有多种选择:
- AWS Lambda:Amazon 的函数即服务服务,支持多种语言,提供丰富的生态环境和工具链,如 SAM 和 Serverless Framework;
- Google Cloud Functions:Google 的函数即服务服务,类似于 AWS Lambda,也支持多种语言;
- Azure Functions:Microsoft 的函数即服务服务,类似于 AWS Lambda,也支持多种语言;
- Alibaba Cloud Function Compute:阿里云的函数计算服务,类似于 AWS Lambda;
- 腾讯云云函数:腾讯云的函数计算服务,类似于 AWS Lambda。
本文选择 AWS Lambda 作为案例,使用 Node.js 开发。
数据库选择
在传统服务器环境下,我们可以使用各种数据库技术,如 MySQL、MongoDB、Redis 等。在 Serverless 架构下,我们同样也有多种选择:
- Amazon S3:亚马逊的对象存储服务,可以结合 AWS Lambda 使用;
- Amazon DynamoDB:亚马逊的 NoSQL 数据库服务,可以结合 AWS Lambda 使用;
- Azure Cosmos DB:Microsoft 的分布式数据库服务,支持多种数据模型(如 MongoDB,Cassandra 等),可以结合 Azure Functions 使用;
- Google Cloud Firestore:Google 的文档数据库服务,可以结合 Google Cloud Functions 使用。
本文选择 Amazon DynamoDB 作为案例,作为数据存储服务。
开始开发
步骤一:创建 Serverless 项目
我们可以使用 Serverless Framework 快速创建一个 Node.js 项目:
npm install -g serverless serverless create --template aws-nodejs --path my-project cd my-project npm install aws-sdk --save
其中,aws-nodejs
模板是用来创建 Node.js 项目结构的,my-project
是项目名称。
步骤二:配置 AWS
在使用 AWS Lambda 和 DynamoDB 之前,你需要配置你的 AWS 账户,并获得相关的 Access Key 和 Secret Key。你可以在这里注册一个 Amazon Web Services 帐户,然后在 AWS 控制台中创建一个 IAM 用户并获取相应的 Key。
接下来,使用以下命令将配置信息保存到本地:
serverless config credentials --provider aws --key <YOUR_ACCESS_KEY> --secret <YOUR_SECRET_KEY>
其中 <YOUR_ACCESS_KEY>
和 <YOUR_SECRET_KEY>
是你在 AWS 控制台中获取到的 Access Key 和 Secret Key。
步骤三:创建 DynamoDB 表
使用以下代码创建一个 DynamoDB 表:
-- -------------------- ---- ------- ----- --- - ------------------- ----- -------- - --- --------------- ---------------------- ---------- ----------- ---------- - - -------------- ----- -------- ------ - -- --------- --- -- --------------------- - - -------------- ----- -------------- --- - -- ---------------------- - ------------------ -- ------------------- - - -- ----- ----- -- - -- ----- - --------------------- -- ------ ------ ----- ------- ------------------- ----- ---- - ---- - -------------------- ------ ----- ----------- ------- -------------------- ----- ---- - ---
其中,my-table
是表名,id
是主键名。
步骤四:编写 Lambda 函数
现在,我们可以开始编写 Lambda 函数了。在 handler.js
文件中添加以下代码:
-- -------------------- ---- ------- ----- --- - ------------------- ----- -------- - --- ------------------------------ ----------------------- - ----- ------- -- - ----- ---- - ----------------------- ----- --------- - --- ----------------- ----- ------ - - ---------- ----------- ----- - --- ------------------ ------ ----------- -------- ------------- ---------- --------- - -- --- - ----- ------------------------------- ------ - ----------- ---- ----- ---------------- -------- ----- ------------ --------- ----- ----------- -- -- - ----- ------- - --------------------- ------ - ----------- ---- ----- ------- -- ------ ----- -- - -- ---------------------- - ----- ------- -- - ----- ------ - - ---------- ----------- ---- - --- ----------------------- - -- --- - ----- ------ - ----- ------------------------------- -- ------------- - ------ - ----------- ---- ----- --------------------------- -- - ---- - ------ - ----------- ---- ----- ---------------- -------- ----- --- ------ -- -- - - ----- ------- - --------------------- ------ - ----------- ---- ----- ------- -- --- ----- -- - --
其中,postNote()
函数用于创建笔记,getNote()
函数用于获取笔记。这些函数将使用上一步中创建的 DynamoDB 表。我们使用 AWS SDK 的 DocumentClient()
来操作 DynamoDB 表,这使得代码更加简单。
步骤五:测试函数
使用以下命令运行 postNote()
函数:
serverless invoke local --function postNote --data '{"title": "my title", "content": "my content"}'
使用以下命令运行 getNote()
函数:
serverless invoke local --function getNote --path my-path.json
my-path.json
文件的内容如下:
{ "pathParameters": { "id": "1577207433335" } }
其中,id
是一个时间戳,可以从 postNote()
函数的返回值中获取。
步骤六:部署函数
使用以下命令部署 Lambda 函数和 DynamoDB 表:
serverless deploy
步骤七:测试函数
使用以下命令测试函数:
curl -X POST https://xxxx.execute-api.yy-xx.amazonaws.com/dev/note --data "{\"title\":\"my title\",\"content\":\"my content\"}" curl https://xxxx.execute-api.yy-xx.amazonaws.com/dev/note/1577207433335
其中,xxxx
是你的服务名,yy-xx
是你的区域。你可以在控制台中获取到这些信息。
步骤八:移除函数
使用以下命令移除 Lambda 函数和 DynamoDB 表:
serverless remove
以上就是一个简单的 Serverless 项目的开发流程。当然,实际项目会更加复杂,但是这个案例可以为你提供一个基本的思路。
结论
Serverless 架构是一种非常有前景的架构,可以大大提高开发效率和灵活性。在深入学习 Serverless 架构之前,你应该具备一定的前端开发能力,并且熟悉 Node.js 和服务器端开发。您可以选择使用 AWS Lambda、Google Cloud Functions、Azure Functions、Alibaba Cloud Function Compute 或腾讯云云函数等服务,推荐使用 Serverless Framework 管理您的项目。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672c37faddd3a70eb6d67dc3