亚马逊AWS官方博客
开发者的无服务入门课程:第一部分
原文链接:
https://aws.amazon.com/cn/blogs/compute/getting-started-with-serverless-for-developers-part-1/
- 第二部分:业务逻辑
- 第三部分:入口
世界各地的开发人员已经开始在生产环境中广泛使用无服务器应用程序,由此摆脱了服务器部署与管理带来的沉重负担。这份新的系列入门教程主要面向希望加入无服务器行列的开发者朋友,我们将共同跟随教程的脚步接触代码示例与实践练习,了解如何在本地集成化开发环境(IDE)当中构建无服务器应用程序。
在本文中,我们首先探讨开发者为什么需要无服务器技术、无服务器技术又能解决哪些实际挑战。我们将尝试将一款小型无服务器应用程序部署至AWS账户内,这款应用负责将Slack与GitHub对接起来。通过这个简单的小案例,大家应该可以初步了解无服务器技术为何受到广大开发者的青睐。
无服务器对开发人员意味着什么?
无服务器本身是个比较宽泛的术语,包含丰富的内容。对开发人员来说,无服务器代表一种构建可自动扩展的新型应用程序的具体方式,其中最大的优势在于无需维护、运行或修复包括服务器、集群乃至负载均衡器在内的各类基础设施元素。
对一部分朋友来说,使用无服务器技术构建应用程序似乎是种重大转变。其中可能涉及采用函数式编程模型、由单体式服务转移至微服务,或者使用托管服务以减少代码编写量等。
但是,要不要构建无服务器应用程序绝对不是非此即彼的二元选择。无服务器技术能够对传统应用程序模型加以补充。对大多数开发者而言,第一款无服务器应用程序完全可以是对传统应用的扩展、集成或连接。也正因为如此,我们不妨先从最适合无服务器模式的工作负载类型聊起。
开发人员为什么需要无服务器?
“我只想编写业务逻辑”
很多开发者面临的典型场景,是对某些数据执行“某些操作”以产生有价值的输出。这就是所谓业务逻辑,在每一款应用程序中都扮演着核心角色。
对于传统(非无服务器)应用程序,开发人员在着手创建业务逻辑之前需要做好一系列准备。其中大部分属于常规的重复性任务,例如配置数据库与服务器、或者设置备份与还原系统等等。使用无服务器技术能够帮助我们将大部分常见重复性任务抽象出来。
“希望我的应用程序能够自行扩展”
随着应用程序的发展成熟与规模增长,它们可能需要处理不断增加的流量。这时候,可扩展性挑战又接踵而来。开发人员可能需要采用其他架构甚至引入新的合作伙伴以应对这方面难题。
无服务器技术可以通过自动扩展满足需求增长,高效解决这个难题。无服务器中的可扩展性主要着眼于横向扩展(而非纵向扩展)。
纵向扩展与横向扩展
想象一个人需要从家中赶赴朋友的生日宴会。很明显,一个人骑辆自行车就刚刚好。但如果是两个人同行,那自行车就太小了,所以需要打个出租。那么如果是更多人旅行,没准就需要坐公交车。
但这里的思路属于纵向扩展,即负载的每次增加都要求购置容量更大的运输方式进行消化。把同样的方式引入应用程序扩展,就意味着每当服务器遭遇容量耗尽时,就需要内置新的服务器来拉升上限。
但我们也完全可以找多辆自行车,每个人一辆。这样一来,负载就得到了平均分配,整个体系也更加灵活。因为随着流量的增长,我们只需要额外添加额外的容量单位、而非整体服务器设备。这就是所谓横向扩展,也是无服务器强大扩展能力的基础所在。
“代码不运行的时候,我觉得不应该继续计费”
对于传统应用程序,我们往往需要过度配置。换句话说,我们得预先保留额外的资源容量以适应需求激增。但这些额外的容量在很大程度上得不到充分利用。而使用无服务器技术,您只需要为实际消耗的资源付费。横向扩展模型意味着资源消耗将根据您应用程序的实际需求随时伸缩。对于可变流量应用程序,无服务器模式明显正是最具成本效益的选项。
无服务器实践
无服务器技术的一种常见、高效的使用方法,就是将两款或者多款应用的功能连接起来。例如,开发人员可以快速创建商战以处理入站webhook,在webhook载荷上运行业务逻辑,再将结果输出到另一服务。以下无服务器应用程序使用GitHub的webhook集成功能,负责在repo获得新星时经由Slack通知用户。
使用无服务器技术,将GitHub与Slack对接起来
如果应用程序是以传统技术堆栈构建而成,开发人员必须配置服务器以接收入站webhook,还往往需要向运营部门求助。此外,服务器本身必须始终可用、时刻准备好接收入站webhook。再有,整个体系必须配置有充足的备用容量以处理流量峰值,或者搭载负载均衡器以平均分配流量。应用程序需要开放公共互联网访问,并具备入站GitHub webhook的附加授权。最后,我们需要使用定期修复程序与安全更新维护应用程序服务器中的操作系统与运行时。这是一份长长的准备与维护任务清单,足以毁了大家一天的好心情。
相比之下,无服务器模式下的应用程序就不涉及那么多传统堆栈操作。开发人员可以直接从业务逻辑入手,并通过单一命令将其部署至AWS账户当中。
在接下来的分步讲解中,我们共同了解如何从GitHub repo中部署并测试最终应用。在本系列教程的后续文章中,我们还将探讨如何直接在本地集成化开发环境(IDE)中从零开始构建这款应用程序,并解释开发过程中涉及的各项AWS服务与概念。
先决条件
要部署这款应用程序,我们需要:
- 安装已设置有AWS账户的AWS无服务器应用模型(AWS SAM CLI)。
- 一个GitHub账户,以及您拥有管理员权限的repo。
- 一个可用于创建应用的Slack账户。
设置您的入站Slack webhook
我们这款应用能够使用Slack webhook URL向Slack频道发送POST请求,负责在有用户给GitHub repo打星时发布通知。
要创建Slack webhook:
- 在Slack中创建一个新频道,以供信息发送使用。
- 在新频道中,选择Add apps
- 搜索“Incoming Webhook”应用,之后为您的频道创建一个新应用。
在创建完成后,Slack webhook URL就会显示在界面中。我们的无服务器应用程序会使用此URL向Slack频道发送数据。请记下该URL,我们将在后续应用程序部署时再次使用。
部署无服务器应用程序
关于本文中的无服务器应用程序代码,请参阅GitHub repo。首先,将应用程序代码克隆至本地计算机,而后将其部署至您的AWS账户:
- 在本地设备的终端窗口中运行以下命令:
git clone https://github.com/aws-samples/getting-started-with-serverless
- 运行以下命令,将目录更改为应用程序的根目录:
cd part_1
- AWS SAM是一套用于无服务器应用程序构建及部署的框架。我们使用以下AWS SAM CLI命令将应用程序部署到AWS账户当中:
- sam build
sam deploy --guided --config-file ../samconfig.toml
这条命令将为您提供引导式部署服务,部署期间大家需要输入一些参数。请输入堆栈名称,例如“GitHubToSlackApp”。输入作为部署目标的AWS区域,在“webhookHandler may not have authorization defined”(webhookHandler可能未定义授权)提示下输入Y,其余部分可以直接保留默认值。请确保使用之前记录下来的Slack URL替换掉Parameter slackUrl提示符:
-
- 整个部署过程需要一点时间。完成之后,输出结果如下:
记录下GitHubEndpoint的值。此URL是无服务器应用程序的网关。指向该URL的POST请求以及其他具有正确格式的有效载荷,都将触发应用程序运行。触发之后,应用程序会向Slack Webhook URL发送一条消息。下面就是最后一项任务了,告知GitHub何时向此URL发送POST请求:
设置GitHub webhook
-
- 前往需要跟踪的GitHub repo,选择 Settings, 之后选择 Webhooks。
- 选择 Add webhook。
- 在 Payload URL字段当中,输入之前记录下来的 GitHubEndpoint 值:
- 在 Content type 字段处,选择 application/json。
- 在 Which events would you like to trigger this webhook? (您希望使用哪种事件触发此webhook?)中,选择 Let me select individual events, 而后选择 Watches。
- 选择 Add webhook。
运行示例无服务器应用程序
恭喜大家!到这里,我们的无服务器应用程序已经部署完成。
要查看GitHub repo中的应用程序运行效果:
- 选择 star 图标。
这项操作会将GitHub事件发送至示例无服务器应用程序,由该应用在处理后向Slack webhook URL发送消息。消息内容将显示在Slack频道当中,包括谁为repo打了星以及目前repo共有多少颗星。
总结
本文是新的无服务器入门课程系列的第一篇。本系列主要面向开发者群体,具体包含博文、代码示例与上手演练,希望帮助开发者朋友们从本地IDE开始轻松构建无服务器应用程序。本文主要介绍了无服务器技术能够为开发人员带来哪些便利与助益,同时介绍了如何将示例无服务器应用程序由本地计算机克隆并部署至您的AWS账户。
只需几个简单的步骤,大家就能看到无服务器技术如何快速构建应用程序、消除重复劳动并帮助您专注于实现业务逻辑。
在本系列的后续文章中,我们将更具体地探讨这款无服务器应用程序。各位读者将由此了解如何通过本地IDE构建及更新应用程序、在哪里编写业务逻辑、创建应用程序需要使用哪些AWS服务,以及如何对应用成果进行测试与扩展。
关于构建无服务器应用程序的更多资源,请访问serverlessland.com。