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 框图

步骤 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 根据内存使用情况、发出的请求和执行情况进行计费,按最小 100 毫秒的增量计费。因此,对于 500 毫秒的执行,将每 100 毫秒计费一次。如果您指定 AWS lambda 代码在 500 毫秒内执行,而执行时间仅为 200 毫秒,则 AWS 将仅根据所花费的时间向您计费,即执行 200 毫秒,而不是 500 毫秒。AWS 始终按使用的执行时间收费。如果该功能没有执行,则无需付费。

多语言支持

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

易于代码编写和部署

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

其他特性

您可以通过登录 AWS 免费套餐来免费使用 AWS Lambda。它为您提供一年免费服务。查看 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 Gateway 可以在 GET/POST 方法上触发 AWS Lambda。我们可以创建一个表单并与 API Gateway 端点共享详细信息,并将其与 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 测试以更改发送给用户的响应、出于安全目的添加额外标头信息等任务。