什么是 Serverless?
Serverless 是一种新型的云计算模型,由亚马逊 AWS Lambda 推出后迅速风靡起来。Serverless 的核心思想是将应用程序的处理逻辑从基础设施中抽象出来,以此降低开发者对底层基础架构的关注点。换言之,Serverless 环境提供一种无需手动管理服务器、中间件及其他基础构建块就能够快速进行应用程序开发的方式。
Serverless 环境中的应用部署方式
一般而言,Serverless 应用部署方式有以下两种:
- Framework 方式:通过 Serverless Framework 发布和管理应用
- Console 方式:通过控制台进行操作,只需要进行几个简单的配置即可。
Framework 方式
Serverless Framework 是 Serverless 应用程序开发、部署和管理的框架,支持多种编程语言,包括 JavaScript、Java、Python 等,同时该框架支持多种部署方式,提供了一些常见功能,如实现自动化测试、多环境部署、自动伸缩等。
步骤如下:
- 安装 Serverless Framework:
$ npm install -g serverless
- 创建一个 Serverless 应用程序。
$ sls create --template aws-nodejs --path my-service
- 配置 Serverless 应用程序。
打开 serverless.yml
文件,填写应用程序配置。
-- -------------------- ---- ------- -------- ---------- --------- ----- --- -------- ---------- ---------- ------ -------- -------------展开代码
- 编写应用程序代码。
打开 handler.js
文件,编写 Serverless 应用程序的处理函数。
-- -------------------- ---- ------- ---- -------- -------------------- - ----- ------- -------- -- - ------ - ----------- ---- ----- ---------------- -------- ------ ------------ -- -- --展开代码
- 部署应用程序。
$ sls deploy
- 测试应用程序。
$ sls invoke -f hello
Console 方式
部署 Serverless 应用程序的另一种方式是通过控制台进行操作,只需要进行几个简单的配置即可。
在 AWS 控制台上进入 Lambda 服务。
点击「Create function」创建一个新的 Lambda 函数。
填写函数的相关配置,选择相应的运行环境等。
在「Function code」中编写应用程序代码,使用语言不限,可以通过上传 zip 包或者直接编辑实现。
配置函数的触发器,设置函数被调用的条件和触发方式。
提交并测试应用程序。
如何在 Serverless 环境中进行测试
与传统的应用程序不同,Serverless 应用程序需要进行多种类型的测试,如单元测试、集成测试、端到端测试等。特别需要注意的是,Serverless 应用程序的测试还需要考虑到事件、资源管理等方面的特殊情况。
如何进行单元测试
Serverless 应用程序的单元测试与传统应用程序的单元测试相似,需要针对不同的函数编写单元测试,并对测试结果进行断言。
以 AWS Lambda 为例,我们使用 AWS SDK 中提供的 lambda-local
工具进行测试,这个工具能模拟函数调用、传入参数等行为,使得测试更为灵活方便。
使用步骤如下:
- 安装
lambda-local
。
$ npm install -g lambda-local
- 编写测试用例代码。
-- -------------------- ---- ------- ----- ----------- - ------------------------ ----- ------ - ------------------ ----- ----- - ----------------- ----- ------- - ---------------------- -------------- --------- ---------- - --- ------- -------- --------------------- - ------- - ---------------------- ------ - - ------- -------------- -- ------------------------------ --- -------------------- - ------------------ --- ---------- ------ ----- ------- -------------- - ----- ----- - - ---- ------- -- ----- ------- - --- ----- -------------- - - -------- ------- ------- -- ----------------------------- ----- - -------- ------------------------------ --- ---------------------- -------- --------------- ------- - -- ------- ------------ ------------------------------ --------------- ------- -------- ---------- --------- ------- --- --- ---展开代码
- 运行测试用例。
$ npm test
如何进行集成测试
除了进行单元测试之外,还需要进行更为全面的集成测试,确保在 Serverless 环境下,所有函数间协同工作的正确性。
AWS 提供了 AWS SAM(Serverless Application Model)框架,可以将 Lambda 函数和其他资源资源以及整个应用作为一项单元来定义、运行和测试。可以使用 SAM 执行本地模拟、打包和部署应用程序。
使用步骤如下:
- 安装 AWS SAM。
$ brew install aws-sam-cli
- 编写 YAML 文件来描述 Serverless 应用程序的函数、触发器和其他资源。
-- -------------------- ---- ------- ------------------------- ------------ ---------- ---------------------------- ---------- ------------------- ----- --------------------------- ----------- -------- ----------- -------- ---------- -------- ----------------- ------- -------------- ----- --- ----------- ---------- ---- ------------------ ----- ------ ------- --- -------- -------------- ------------ ---- ------- -------- ---- ------ ---- ----------------------------------------------------------------------------------- ------- ----- ------------------展开代码
- 执行本地测试。
$ sam local start-api
- 执行部署。
$ sam deploy
如何进行端到端测试
Serverless 应用程序的端到端测试,则需要涵盖触发器的各种情况、异常场景、调用事件等一系列复杂情况的测试。同时,又要保证测试的可重复性和独立性。
可以使用测试框架,如 Cypress、Puppeteer 等,进行测试。这里使用 Cypress 测试 Serverless 应用程序。
使用步骤如下:
- 安装 Cypress。
$ npm install --save-dev cypress
- 写测试代码。
describe('Hello World', () => { it('Should display hello message', () => { cy.visit('https://example.com') cy.get('#hello-button').click() cy.get('#hello-message').should('contain', 'Hello World!') }) })
- 运行测试。
$ npm run test:cypress
如何进行 Serverless 应用程序的排错
排错是 Serverless 应用程序开发中的常见问题。由于 Serverless 应用程序的分布式、异步性质,故而需要根据其特点采取一些特殊的排错方法。针对 Serverless 应用程序的排错,我们可以采取以下一些方式:
- 日志记录
- 远程追踪工具
- 监控工具
结语
Serverless 技术是现代应用开发的一个重要方向,其能够大大降低我们开发应用程序的成本,提高开发效率。在 Serverless 应用程序开发和测试过程中,我们需要更多的针对性和专门工具,以适应 Serverless 的特殊侧重点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bd317ea231b2b7edf540c8