无服务架构是最近比较流行的一个技术趋势,它能够使开发者从管理和维护服务器等复杂的基础架构中解放出来,从而将更多的精力放在关注业务本身。而 Serverless 框架是在无服务架构下的一个重要工具,它可以帮助我们更快速地构建无服务器的应用程序,同时实现更高效的开发流程和维护过程。
在本文中,我们将使用 Serverless 框架构建一个无服务异步工作流,这个工作流适用于许多场景,比如在短信验证码发送、邮件发送、跨不同系统实现数据同步等。
什么是无服务异步工作流
无服务器异步工作流是指通过将任务处理分解为不同的阶段,使用不同的函数和服务进行处理,从而实现异步处理。这个流程的中心思想是任务处理的各个环节都是无状态的、随时可扩展的。整个工作流程可以根据实际的需求,使用适当的服务组合而成,最终以高可用、高可扩展、高灵活性等特点运行在云端。
下面,我们来看一下使用 Serverless 框架实现无服务异步工作流的步骤。
创建 Serverless 项目
首先,我们需要创建一个新的 Serverless 项目。这可以通过安装 Serverless Framework 来实现。安装 Serverless Framework 十分简单,只需在命令行中输入以下指令:
npm install -g serverless
安装完毕后,我们可以用以下指令创建一个新的 Serverless Framework 项目:
serverless create -t aws-nodejs -p my-serverless-project cd my-serverless-project
这将使用 Node.js 运行时(aws-nodejs)创建一个新的项目,并将其保存在名为 my-serverless-project 的文件夹中。
编写 Serverless Yaml 文件
接下来,我们需要编写一个 Serverless Yaml 文件来定义我们的 Serverless 项目。这个文件是 Serverless Framework 的一个核心组件,它描述了如何对你的代码进行打包、部署、以及配置等方面的信息。它包含了很多配置项,比如函数、事件、资源等。
下面是一个简单的 Serverless Yaml 文件的示例:
-- -------------------- ---- ------- -------- --------------------------- --------- ----- --- ------- --------- ---------- ------ -------- ------------- ------- - ----- ----- ----- ------- ---
这个示例定义了一个名称为 serverless-workflow-example 的服务,并声明了一个名为 hello 的函数。在这个函数中,我们将使用 handler.hello 函数来作为入口点,当收到 HTTP GET 请求时,执行该函数的处理逻辑。需要注意的是,这里我们把 provider 设置为了 AWS,也就是 Amazon Web Services。另外,我们还需要通过 provider 指定我们使用的 AWS 区域,这里设置了 us-east-1。
编写函数代码
下一步,我们需要编写实际的函数代码,也就是我们之前定义的 hello 函数。在这个函数中,我们需要调用一些 AWS 资源来发送短信或者邮件等。
-- -------------------- ---- ------- ---- -------- ----- --- - ------------------- -------------------- - ----- ------- -------- --------- -- - ----- --- - --- -------------------- --------------- ----- - ------------- ------- - - ---------------------------- ----- ------ - - ------------ ------------- -------- ------- -- --- - ----- ------------------------------ -------------- - ----------- ---- ----- ---------------- -------- ----- - ------- -- - - ------------ -- --- - ----- --- - -------------- - ----------- ---- ----- ---------------- -------- ------- -- ---- - -------- -- --- - --
这个函数使用了 AWS SDK 中的 SNS(Simple Notification Service)服务来发送消息。在函数执行中,我们需要从查询参数中获取电话号码和消息内容等信息,然后组成一个参数对象,最后调用 SNS 服务的 publish 方法来发送短信。
需要注意的是,我们在最后通过调用 callback 函数返回响应。这个函数是 Serverless Framework 内置的一个简单解决方案,可用于 HTTP 等事件的响应。在本例中,当成功或失败时,我们使用 callback 函数分别返回 statusCode 和 body 的值,把响应返回给调用者。
配置事件
接下来,我们需要在 Serverless Yaml 文件中配置一个 HTTP 事件,以便在收到请求时,能够调用之前编写的 hello 函数。在这个例子中,我们使用 HTTP 事件作为我们 Serverless 项目的一个触发器,以便在接收到网站来的请求时能够发送短信、邮件等内容。
-- -------------------- ---- ------- -------- --------------------------- --------- ----- --- ------- --------- ---------- ------------- -------- ------------------ ------- - ----- ----- ------------ ------- ---
如上述代码所示,我们将 path
设置为 send-message,并将 method
设置为 GET。这将导致我们的 Serverless 服务将监听 host:port/send-message 的 GET 请求,并将它们路由到我们的 send-message 函数上。需要注意的是,这里我们将函数名称改为了 send-message,而不是之前的 hello,这是因为我们已经改变了函数的含义。
测试 Serverless 工作流
最后,我们需要部署我们的 Serverless 项目,并对其进行测试。
要发布代码并部署服务,我们可以在项目目录中运行以下命令:
sls deploy
这个命令将在 AWS S3 中创建一个 Lambda 函数包,然后在 AWS Lambda 上创建一个 Lambda 函数,并且设置 API Gateway,从而使 API Gateway 可以触发我们的 Lambda 函数。
当完成部署后,我们可以使用浏览器,Postman 或其他 HTTP 客户端来测试我们的服务。通过在查询字符串中传递电话号码和消息内容,即可向目标电话号码发出指定短信。比如,我们可以访问下面这个 URL:
https://my-account-id.execute-api.us-east-1.amazonaws.com/dev/send-message?phone_number=+1-555-555-1234&message=hello%20there
这个 URL 将会发送一个内容为 hello there 的消息到 +1-555-555-1234 号码。
至此,我们成功地使用 Serverless 框架构建了一个简单的无服务异步工作流。当然,这只是一个简单的例子,实际应用中,还有很多需要处理的问题,比如异步处理等。但本文的目的是为各位读者提供一个可以入门的指导,为以后的开发提供帮助。
总结
在本文中,我们使用 Serverless Framework 构建了一个无服务器异步工作流,并使用 AWS SNS 服务实现了发送短信。整个过程中,我们了解了 Serverless 框架以及无服务器异步工作流的核心思想,并提供了代码示例,以便读者更好地了解和学习这一技术。
无服务器计算是云计算和大数据技术的一部分,已经成为许多后端和前端技术开发者的首选技术。正是通过无服务器计算这一技术革新,让开发者不再局限于传统的服务器架构、操作系统和监控等方面的问题。无服务器计算为开发者的效率和代码的可靠性注入了一股全新的动力,更重要的是,在开发的过程中,代码的执行效率变得更加优化、更加富于充满了创造性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/651d06bc95b1f8cacd48ad7a