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 工作的框图如下所示-
第 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 等流行语言。 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 Gateway 可以在 GET/POST 方法上触发 AWS Lambda。我们可以创建一个表单并与 API 网关端点共享详细信息,并将其与 AWS Lambda 一起使用以进行进一步处理,例如,在 DynamoDB 表中输入数据。
SNS 和 AWS Lambda
SNS 用于推送通知、发送 SMS 等。当 SNS 中发生任何推送通知时,我们可以触发 AWS lambda。我们还可以在 AWS Lambda 收到触发器时向该电话号码发送 SMS。
预定事件和 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 测试以更改发送给用户的响应、出于安全目的添加额外标头信息等任务。