## 引言
虽然在二十一世纪初就诞生了世界第一个 **Serverless** 平台:**Zimki**,但是当时还没有使用 **Serverless** 这个概念。直到 **2012** 年的时候,才被 **Iron.io** 的高管首次提出 **Serverless**,至此 **Serverless** 这个概念正式诞生。
**2014** 年末,亚马逊云科技率先推出第一款真正意义的 **Serverless FaaS** 服务: **Lambda**,从此全球各大云厂商开始紧跟亚马逊云科技的脚步。亚马逊云科技推出的 **Lambda**(下文简称 “**Lambda**”),它是一个用于部署代码、管理服务以及监控轻量级服务运行状态的细粒度方法,也就是[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算服务,可以让使用者无需维护管理服务器相关的内容,只用关注业务需求即可。由于上手使用比较简单,且真正利用云技术的优势,使得 Lambda 快速成为一个爆款服务。那么本文就来分享一下关于 Lambda 的使用经验。
## Serverless 的概念
见名知意,**Serverless** 由 **server** 和 **less** 组成,字面意思就是“[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)”,但是云领域通常所说的 **Serverless** 主要指的是“[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算”。**Serverless** 是根据 **CNCF** 定义的,是指构建和运行不需要服务器来管理的应用程序的概念。**Serverless** 指的“[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算”,其实并不是真的不涉及[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail),而是相对于使用者来说服务器成为了“隐形”状态的存在,也可以说是使用者“无感知”了,使用者不再需要考虑太多关于服务器相关的事情,只用把工作中心放到任务开发中即可。
其实 **Serverless** 是一种[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算的方法,为什么是[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算?那是因为在传统的IT架构中都是用服务器作为载体,部署了一个或者多个服务来提供 api 等服务给客户端,在服务器上需要配置很多内容:语言、框架、环境、负载均衡等,因此使用者要进行系统地学习和实践才能掌握这些技术。随着技术的革新和发展,为了简化传统服务器的部署模式,**Serverless** 应运而生,使用者只需要实现业务逻辑代码,剩下的事情都交给 **Serverless** 来完成,因此 **Serverless** 可以帮助开发者、帮助开发团队节省在服务器上耗费的大量时间,进而做到更加智能、简便的运维。
## Lambda 的概念
了解完 **Serverless** 的概念,再来看一下亚马逊云科技 **Lambda** 是什么? **Lambda**(下文简称 “**Lambda**”)其实是一个基于[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)事件驱动型的计算服务,它可以运行几乎所有类型的应用程序,且不用预置和管理服务。**Lambda** 可以在可用性高的计算基础设施上运行应用代码,执行计算资源中的所有管理任务,包括操作系统和服务器的维护、服务器容量动态调配、弹性伸缩和记录。Lambda 其实在很多应用程序场景中属于理想计算服务,只用在 **Lambda** 标准运行时环境和 **Lambda** 提供的资源中运行应用程序。
## 为什么要使用 Lambda
上面也介绍 **Lambda** 的作用,其实 **Lambda** 最适合比较短的事件驱动型工作负载,原因就是 **Lambda** 函数在每次调用的时候最多可运行15分钟左右,而且用户无需登录计算实例,那是因为 **Lambda** 就是代表使用者执行操作和管理的,包含容量管理、监控记录使用者的 **Lambda** 函数。
**Lambda** 其实是一个函数编写平台,只需编写代码并将编写后的代码打包成文件后上传即可。再来看看 **Lambda** 的使用场景,**Lambda** 有5种应用模式(摘自亚马逊云科技 **Lambda** 官方文档)。
##### 1、文件处理
**使用方式**:在 **[Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)** 上传后,实时触发 **Lambda** 的数据;或者直接连接到现有的 **[Amazon EFS](https://aws.amazon.com/cn/efs/?trk=cndc-detail)** 文件系统。进而为大规模文件处理启用大规模并行共享访问。
![image.png](https://dev-media.amazoncloud.cn/c7b5e2d90d9843729f80552711a2526a_image.png "image.png")
##### 2、流处理**
**使用方式**:通过 **Lambda** 和 [Amazon Kinesis](https://aws.amazon.com/cn/kinesis/?trk=cndc-detail)** 结合处理实时流数据,进而实现跟踪应用程序活动、处理事务处理顺序、分析单击数据流、整理数据、筛选日志、建立索引、分析社交媒体、遥测和计量 IoT 设备数据。
![image.png](https://dev-media.amazoncloud.cn/4554c6e697ae4260bd02c54b7aa40b4c_image.png "image.png")
##### 3、Web 应用程序
**使用方式**:通过 **Lambda** 与其他的亚马逊云科技服务结合使用,以构建强大且完整的 Web 应用程序,这些应用程序可自动扩展和缩减并可以跨多个数据中心在高度可用的配置中运行。
![image.png](https://dev-media.amazoncloud.cn/b6dd6aafa08f4a0dbf778bf0bfbef619_image.png "image.png")
##### 4、IoT 后端
**使用方式**:使用 **Lambda** 构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)后端,以处理 Web、移动、物联网 (IoT) 和第三方 API 请求。
![image.png](https://dev-media.amazoncloud.cn/17047d4bd0fd48579cf369d4b1099315_image.png "image.png")
##### 5、移动后端服务
**使用方式**:通过 **Lambda** 和 **[Amazon API Gateway](https://aws.amazon.com/cn/api-gateway/?trk=cndc-detail)** 构建后端,以验证和处理 API 请求。使用 Amplify 可以轻松将后端与 iOS、Android、Web 和 React Native 前端集成。
![image.png](https://dev-media.amazoncloud.cn/4f8e2f5f1ad7416885bab9684002a538_image.png "image.png")
**注意事项**:**Lambda** 不能单独使用,它需要结合 **API Gateway** 一起使用。
## Lambda 的使用示例
接下来通过一个简单使用示例来分享一下关于 **Lambda** 的使用,大概的操作步骤如下所示。
##### 1. 首先,登陆亚马逊云科技控制台
开启使用 **Lambda** 的第一步,直接打开并进入亚马逊云科技官网之后,点击右上角的登录按钮,接着输入用户名和密码后登录进入。
![image.png](https://dev-media.amazoncloud.cn/ba019d326ecd42cdbdacee0d9f6f33e4_image.png "image.png")
##### 2. 接着,进入 Lambda 服务
登录进入亚马逊云科技控制台之后,在搜索框中搜索 **Lambda** 服务,并直接点击进入 **Lambda** 服务。
![image.png](https://dev-media.amazoncloud.cn/839ce64ea5b24324bf319564870df305_image.png "image.png")
##### 3. 点击创建 Lambda 函数
进入 **Lambda** 服务之后,点击创建 **Lambda** 函数。
![image.png](https://dev-media.amazoncloud.cn/21659699068a423fa9bd2d5b142d6d4c_image.png "image.png")
##### 4. 创建 Lambda 函数的时候,选择从模版创建
在创建 **Lambda** 函数的时候,根据提示选择从模版创建。命名函数名,选择语言环境,最后点击创建函数按钮即可(这里以 Node18 为例)。
![image.png](https://dev-media.amazoncloud.cn/9a42c1256b88409c8e81e3e61f80d2ac_image.png "image.png")
##### 5. 修改编辑代码
看到创建时候的情况,由于是用的模版创建的,所以会默认自带一些示例代码的内容,这里做一个小测试,把模版中返回的 Hello from Lambda改为Hello SanZhangGui。
![image.png](https://dev-media.amazoncloud.cn/0a730802146a4da1beab802be2c16c93_image.png "image.png")
##### 6、运行测试
修改代码内容之后,首先点击 **Deploy** 按钮,然后再点击测试按钮,即可看到返回值已经变成刚才自定义的提示语了。
![image.png](https://dev-media.amazoncloud.cn/a4f47f8d063c443193c3f04e7e108c2e_image.png "image.png")
##### 7、新创建API Gateway
在实验过程中为了让外部也可以调用使用创建的这个 **Lambda** 函数,需要去配置亚马逊云科技的 **API Gateway**,同理在搜索框,搜索并找到 **API Gateway** 服务,点击进入。
![image.png](https://dev-media.amazoncloud.cn/3098df294bbc439ba2eff4c6cc50bae6_image.png "image.png")
进入 **API Gateway** 之后点击 **APIs**,然后选择 **REST API** 的构建按钮。
![image.png](https://dev-media.amazoncloud.cn/4c899d2c179c4fc39519f687a116c18d_image.png "image.png")
然后选择新建 **API**,接着输入 **API** 的名称,最后点击创建 **API** 按钮即可。
![image.png](https://dev-media.amazoncloud.cn/ccf2f3ccec04409a9a9574a6e15aa803_image.png "image.png")
##### 8、新创建资源和方法
进入创建的 **API** 之后,然后在/路由下选择创建资源。
![image.png](https://dev-media.amazoncloud.cn/638d580cfb9c4026ae7bf2acbc81215f_image.png "image.png")
然后在资源下新创建方法。
![image.png](https://dev-media.amazoncloud.cn/aa92a31b9b5b4533a9ed84d71b5b024c_image.png "image.png")
接着选择映射到上面刚创建好的 **Lambda** 函数。
![image.png](https://dev-media.amazoncloud.cn/58af6d83bbc94a06bc809a5e3fb751a4_image.png "image.png")
最后,即可完成资源和方法的创建操作。
##### 9、部署 API Gateway
同理,找到对应的在方法上点击部署 **API** 选项。
![image.png](https://dev-media.amazoncloud.cn/8bc11179ba254bbba778c1514c20b743_image.png "image.png")
然后切换到阶段选项栏,即可查看到部署好的 **API Gateway**。
最后,可以看到有一个链接,然后可以在 **Postman** 接口调用工具中通过这个链接,即可通过 **API Gateway** 调用 **Lambda** 函数。以上就是本次示例的核心操作部分,如有不懂之处,请与笔者联系,共同交流学习。
## 结束语
通过本文关于亚马逊云科技的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算 **Lambda** 的使用以及产品了解,可以看出亚马逊云科技在[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算领域的行业领先地位,以及亚马逊云科技在云领域的持续投入和创新,尤其是在 **Serverless** 领域的重点发展,再次验证了 **Serverless** 对于云领域的非常重要的地位。所以在未来一段时间内,**Serverless** 会不断地优化完善,它会继续引领云领域的发展趋势,更会继续打破传统服务器架构模式,助力企业和用户转向创新方式,助力云领域成为社会发展的主力,可以跟着亚马逊云科技的脚步,一起见证 **Serverless** 创造新的辉煌!
## 参考文献
亚马逊云科技官网--**Lambda** 入门[https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/getting-started.html](https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/getting-started.html?trk=cndc-detail)