AWS Lambda – 概述

AWS Lambda 是一种执行无服务器计算的服务,即无需任何服务器即可进行计算。代码根据 AWS 服务中事件的响应执行,例如在 S3 存储桶中添加/删除文件、更新 Amazon dynamo dB 表、来自 Amazon API 网关的 HTTP 请求等。

要使用 AWS Lambda,我们只需将代码推送到 AWS Lambda 服务中。所有其他任务和资源(如基础设施、操作系统、服务器维护、代码监控、日志和安全)均由 AWS 负责。

AWS Lambda 支持 Java、NodeJS、Python、C#、Go、Ruby 和 Powershell 等语言。请注意,AWS Lambda 仅适用于 AWS 服务。

什么是 AWS Lambda?

AWS Lambda 的官方文档给出的定义如下 −

AWS Lambda 是一种计算服务,可让您运行代码而无需配置或管理服务器。AWS Lambda 仅在需要时执行您的代码并自动扩展,从每天几个请求到每秒数千个请求。您只需为您使用的计算时间付费 - 代码未运行时无需付费。

AWS Lambda 如何工作?

以下框图通过五个简单步骤解释了 AWS Lambda 的工作原理 −

AWS lambda Block Diagram

步骤 1 − 使用 AWS lambda 支持的任何语言上传 AWS lambda 代码,即 NodeJS、Java、Python、C# 和 Go。

步骤 2 − 这些是可以触发 AWS lambda 的少数 AWS 服务。

步骤 3 − AWS Lambda 包含上传代码和触发事件的详细信息。例如,来自 Amazon S3、Amazon API Gateway、Dynamo dB、Amazon SNS、Amazon Kinesis、CloudFront、Amazon SES、CloudTrail、移动应用程序等的事件。

步骤 4 − 仅在以下场景下由 AWS 服务触发时执行 AWS Lambda 代码,例如 −

  • 用户在 S3 存储桶中上传文件
  • http get/post 端点 URL 被命中
  • 在 dynamo dB 表中添加/更新/删除数据
  • 推送通知
  • 数据流收集
  • 网站托管
  • 发送电子邮件
  • 移动应用程序等。

步骤 5 − 请记住,AWS 仅在 AWS lambda 代码执行时收费,而不是否则。

使用 AWS Lambda 的优势

当您使用 AWS Lambda 时,它提供了多种好处。本节将详细讨论这些好处 −

轻松使用代码

AWS Lambda 为您提供了上传代码的基础设施。它负责维护代码并在发生所需事件时触发代码。它允许您选择代码所需的内存和超时。

AWS Lambda 还可以根据事件触发器执行并行请求。

日志配置

AWS Lambda 提供代码执行次数、执行时间、内存消耗等详细信息。AWS CloudWatch 收集所有日志,有助于了解执行流程和代码调试。

根据使用情况计费

AWS Lambda 计费基于内存使用情况、发出的请求和执行,以最低 100ms 的增量计费。因此,对于 500ms 的执行,计费将每 100ms 一次。如果您指定 AWS lambda 代码在 500ms 内执行,并且执行时间仅为 200ms,则 AWS 将仅向您收取所花费的时间,即 200ms 的执行时间,而不是 500ms。AWS 始终按使用的执行时间收费。如果函数未执行,则无需付费。

多语言支持

AWS Lambda 支持 Node. js、Python、Java、C# 和 Go 等流行语言。这些是广泛使用的语言,任何开发人员都会发现为 AWS Lambda 编写代码很容易。

易于编写和部署代码

Lambda 有许多可用于编写和部署代码的选项。要编写代码,您可以使用 AWS 在线编辑器、Visual Studio IDE 或 Eclipse IDE。它还支持无服务器框架,这使得编写和部署 AWS Lambda 代码变得容易。除了 AWS 控制台,我们还有 AWS-cli 来创建和部署代码。

其他功能

您可以通过登录 AWS 免费套餐免费使用 AWS Lambda。它为您提供 1 年的免费服务。查看 AWS 免费套餐提供的免费服务。

使用 AWS Lambda 的缺点

尽管 AWS Lambda 具有许多优点,但它仍存在以下缺点 −

  • 它不适合小型项目。

  • 您需要仔细分析您的代码并确定内存和超时。如果您的函数需要的时间超过分配的时间,它将根据其上指定的超时终止,并且代码将无法完全执行。

  • 由于 AWS Lambda 完全依赖 AWS 的基础设施,因此如果您的代码需要,您无法安装任何其他软件。

触发 AWS Lambda 的事件

可以触发 AWS Lambda 的事件如下 −

  • 进入 S3 对象
  • 在 Dynamo DB 表中插入、更新和删除数据
  • 从 SNS 推送通知
  • 对 API 网关的 GET/POST 调用
  • 在查看器或 CloudFront 中的源请求/响应处修改标头
  • 在 AWS Kinesis 数据流中记录条目
  • CloudTrail 中的日志历史记录

AWS Lambda 的用例

AWS Lambda 是一种主要用于运行后台进程的计算服务。与其他 AWS 服务一起使用时,它可以触发。我们可以使用 AWS Lambda 的 AWS 服务列表如下 −

S3 对象和 AWS Lambda

当 S3 中有任何文件上传时,Amazon S3 会将事件详细信息传递给 AWS Lambda。文件上传或文件删除或文件移动的详细信息将传递给 AWS Lambda。AWS Lambda 中的代码可以在收到事件详细信息时采取必要的步骤。例如,创建插入 S3 的图像的缩略图。

DynamoDB 和 AWS Lambda

当表中添加、更新和删除数据时,DynamoDB 可以触发 AWS Lambda。 AWS Lambda 事件包含有关插入/更新或删除的 AWS DynamoDB 表的所有详细信息。

API 网关和 AWS Lambda

API 网关可以在 GET/POST 方法上触发 AWS Lambda。我们可以创建一个表单并与 API 网关端点共享详细信息,并将其与 AWS Lambda 一起使用以进行进一步处理,例如,在 DynamoDB 表中输入数据。

SNS 和 AWS Lambda

SNS 用于推送通知、发送短信等。当 SNS 中发生任何推送通知时,我们可以触发 AWS lambda。我们还可以在 AWS Lambda 收到触发时向电话号码发送短信。

计划事件和 AWS Lambda

计划事件可用于 cron 作业。它可以触发 AWS Lambda 以固定的时间模式执行任务。

CloudTrail 和 AWS Lambda

CloudTrail 有助于监控帐户上的日志。我们可以使用 AWS Lambda 进一步处理 CloudTrail 日志。

Kinesis 和 AWS Lambda

Kinesis 用于捕获/存储来自网站点击、日志、社交媒体源的实时跟踪数据,并且 AWS Lambda 的触发器可以对这些日志进行额外处理。

CloudFront 和 Lambda@Edge

CloudFront 是一个内容交付网络,您可以在其中托管您的网站,Lambda@Edge 可用于处理来自查看器请求、原始请求、原始响应和查看器响应的标头。标头修改包括修改 cookie 数据、URL 重写、用于 AB 测试以更改发送给用户的响应、出于安全目的添加额外标头信息等任务。