1. What is it?
云环境部署项目的一大好处就是,你可以很方便的根据需求,选择拥有合适性能的 AWS EC2 实例类型,并添加 load balancing 和 auto scaling 来扩展规模。而 Serlverless 计算服务进一步优化了基础架构,在架构中不存任何 EC2 实例,不用配置实例,不用更新操作系统,不用配置 load balancing 和 auto scaling,现在需要你做的只是构建和部署应用到 lambda 服务上,并对应用进行监控和维护。
AWS Lambda 是 Serverless 架构中的计算服务。它可以在不使用服务器的情况下运行代码,你只需要按照消耗的计算时间进行付费,代码未运行时不产生费用。
在使用 AWS Lambda 时,您只需负责自己的代码。AWS Lambda 管理提供内存、CPU、网络和其他资源均衡的计算机群。这是以灵活性为代价的,这意味着您不能登录计算实例,或针对提供的运行时自定义操作系统。通过这些约束,AWS Lambda 可以代表您执行操作和管理活动,包括预置容量、监控机群运行状况、应用安全补丁、部署您的代码以及监控和记录您的 Lambda 函数日志。
举例,在 Serverless 中的一个简单 web 服务:
- 将 http 请求视为对我们服务有一定意义的 Event,中间处理请求的逻辑代码视为 Handler,backend 可能一些与 handler 交互的后端服务。
- Handler 就是 Lambda function,用于实现你的业务逻辑,它支持
JavaScript
,Python
,Java
,C#
或者Go
。 - 那如何构建和部署 Lambda function 呢?
- 与传统应用开发唯一不同的是,你需要写一个 handler method 作为你的代码入口。
- 然后将这些代码打包成 zip 文件,将 zip 文件上传到 AWS Lambda Service。
- 然后为你的 lambda function 配置 event sources,代码将在这些事件发生时自动运行以响应它们。
- Lambda Service 会负责提供底层计算和运行时环境。
管理和调用 Lambda 资源的几种方式:
- 你可以使用 AWS Lambda
控制台
创建 Lambda 函数,使用 Designer 配置 Trigger、Layers、Destination。 - 你也可以使用
AWS CLI
管理和调用 Lambda 函数。AWS CLI 使用 AWS SDK for Python (Boto) 与 Lambda API 进行交互。 - AWS Serverless Application Model,
AWS SAM
受到 AWS CloudFormation 的直接支持,你可以编写模板来定义你的无服务器应用程序。
2. How to use it?
Lambda 支持多种编程语言
- Lambda 支持多种语言:Node.js、Java、C#、Python、Ruby、Go、PowerShell。
- Lambda 通过使用运行时支持多种语言,可以在创建函数时选择运行时,也可以在更新函数更改运行时。没用语言的运行时都有多个版本可以选择。
- Java 编写 Lambda 的开发工具:
- Eclipse,安装 AWS Toolkit for Eclipse
- IntelliJ,安装 AWS Toolkit for IntelliJ
Sample:
- AWS Lambda 的 Java 示例应用程序
在 AWS Lambda 上构建应用程序时,核心组件是 Lambda 函数和触发器。触发器是调用函数的 AWS 服务或应用程序,而 Lambda 函数是处理事件的代码和运行时。为了清晰起见,请考虑以下情景:
- 文件处理 – 假设您有一个照片共享应用程序。人们使用您的应用程序上传照片,应用程序将这些用户照片存储到 Amazon S3 存储桶中。然后,您的应用程序创建每个用户照片的缩略图版本,并在用户的资料页面上显示这些缩略图。在这种情景下,您可以选择创建 Lambda 函数来自动创建缩略图。Amazon S3 是支持的 AWS 事件源之一,可以发布对象创建的事件并调用您的 Lambda 函数。您的 Lambda 函数代码可以从 S3 存储桶读取照片对象、创建缩略图版本,然后将其保存到其他 S3 存储桶中。
- 数据和分析 – 假设您在构建分析应用程序并将原始数据存储到 DynamoDB 表中。在您编写、更新或删除表中的项目时,DynamoDB 流可以将项目更新事件发布到与表关联的流。在这种情况下,事件数据提供项目键、事件名称 (例如插入、更新和删除) 以及其他相关详细信息。您可以编写 Lambda 函数,通过聚合原始数据来生成自定义指标。
- 网站 – 假设您在创建网站并且希望在 Lambda 上托管后端逻辑。您可以在 HTTP 上调用 Lambda 函数,使用 Amazon API Gateway 作为 HTTP 终端节点。现在,您的 Web 客户端可以调用 API,然后 API 网关 可将请求路由到 Lambda。
- 移动应用程序 – 假设您有生成事件的自定义移动应用程序。您可创建 Lambda 函数来处理由自定义应用程序发布的事件。例如,在此情景中,您可以配置 Lambda 函数来处理自定义移动应用程序中的点击。
AWS Lambda 支持将多种 AWS 服务作为事件源。有关更多信息,请参阅 将 AWS Lambda 与其他服务一起使用。当您配置了这些事件源触发 Lambda 函数时,Lambda 函数在出现事件时自动调用。您可以定义事件源映射,这是您如何确定要跟踪的事件以及要调用的 Lambda 函数。