AWS Lambda - 同步/异步调用,事件源,目标

这篇具有很好参考价值的文章主要介绍了AWS Lambda - 同步/异步调用,事件源,目标。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

AWS Lambda - 同步/异步调用,事件源,目标,aws,aws认证,sap,云计算,lambda

Hello大家好,我们今天继续讨论AWS Lambda的内容。

同步调用

AWS Lambda - 同步/异步调用,事件源,目标,aws,aws认证,sap,云计算,lambda

Lambda函数有三种调用方式。

第一种方式是同步调用。

当我们使用API、CLI以及API网关等调用函数时,就是同步调用。

当您同步调用函数时,Lambda会运行该函数并等待响应,当函数完成时将结果同步返回,所以您的代码将等待这个响应结果。

如果在这调用过程中需要错误控制,这是需要在您在客户侧实现的。您负责确定处理错误的策略,如可以重试、将事件发送到队列以进行调试,或者忽略该错误。

我们看两个例子:

  1. 第一个,您的SDK要调用Lambda函数,然后Lambda函数会运行,SDK等待响应。如果响应不是您期望的结果,如返回错误时,您希望重试调用函数,这是您需要实现的。
  2. 第二个例子,是客户端通过API网关调用函数。客户端调用RESTAPI,API网关将请求发送给Lambda函数,函数就会执行。然后向API网关返回响应,然后您从API网关收到响应。

这两个例子都是同步调用。在同步调用过程中如果出现了错误,需要您自行处理错误,如忽略、重试、发送到队列进行调试等等。

好,我们继续。

异步调用

AWS Lambda - 同步/异步调用,事件源,目标,aws,aws认证,sap,云计算,lambda

接下来是异步调用。

当事件源是S3、SNS等服务调用函数时是通过异步调用的方式。

在异步调用函数时,您不必等待函数代码的响应。将事件交给 Lambda,剩下的事情由Lambda 进行处理。

在异步调用时, Lambda 会针对函数错误重试两次。比如在上传至S3图片处理缩略图的案例中,如调用函数时发生错误,那么将会在重试两次。

您需要确保这个过程是幂等的,这是非常重要的。假设您的函数重试了2次写入数据库操作,对数据库做了一些更改,您要保证每次的操作结果是一致的。如果不是幂等的,重试2次产生了两次不同的更改,那么可能会出问题。

我们看个例子,上传一个文件到S3,然后其触发一个Lambda函数,这就是一个异步调用,当调用发生错误时会进行重试,如果所有重试都失败了,您可以通过定义一个死信队列,它可以是一个SQS队列,或者SNS主题,保存失败的的事件供近一步处理。

对于我们的这个例子是通过SQS作为死信队列,当所有的重试都失败之后,不是丢弃这些事件,而是将失败的事件发送至死信队列,供后续处理。

好,以上是异步调用。

事件源映射

AWS Lambda - 同步/异步调用,事件源,目标,aws,aws认证,sap,云计算,lambda

第三种调用类型称为事件源映射。

事件源映射是一个从事件源读取并调用 Lambda 函数的Lambda 资源。它从 Amazon SQS 队列、Amazon Kinesis 流或 Amazon DynamoDB 流中轮询批量读取项目,并将它们发送到您的函数。
所有的记录都会按照正确的顺序进行处理,除了SQS标准队列。

  • 对于SQS标准队列,项目不一定按顺序处理,函数可能会处理任意的批次,
  • 对于Kinesis数据流,将按每个Shard的顺序处理记录,
  • 对于SQS FIFO,将按每个消息组的顺序进行处理,
  • 对于DynamoDB流,它将对DynamoDB流的每个分区进行排序处理。

我们举个例子看一下事件源映射,这里是kinesis作为事件源,然后这是您的Lambda函数,Lambda事件源映射会作用在这两者之间,它会轮询kinesis,然后kinesis可能会返回一批记录,事件源映射将调用我们的Lambda函数进行处理,这就是事件源映射的工作原理。

如果在这个过程中您的函数返回错误,那么将重新处理整个批次直到成功,要注意这一点。

这也就是说,如果是Kinesis或DynamoDB Stream,他们将停止分片处理,因为它是按顺序处理的,如果第一批无法处理,将无法获得下一批,直到第一批已成功处理。

对于SQS FIFO,它将会停止处理,除非您定义了SQS 死信队列,在定义了死信队列的情况下,SQS会将失败的批次发送到死信队列,然后继续处理。

再一次强调,您需要确保的您的Lambda函数是幂等的,以防如果发生错误后两次处理同一批次事件出现问题。

配置目标

AWS Lambda - 同步/异步调用,事件源,目标,aws,aws认证,sap,云计算,lambda

目前您还可以配置您的Lambda函数将结果发送到一个称为目标destinations的地方。
目标可以配置在异步调用以及事件源映射,我们下面就来详细讨论下。

对于异步调用,您可以为成功和失败的事件定义目标。如果您没有定义目标,如果您的Lambda函数会返回一些信息,就无法看到,这些信息会被完全忽略。您可以配置将这些信息发送到SQS、SNS、另一个Lambda函数、或者EventBridge bus。

也就是说,Lambda函数从事件队列中获取事件进行异步处理时,如果返回成功,我们可以定义一个成功的目标,如SQS、SNS、Lambda等等;如果处理失败了,我们也可以将这些记录发送到定义的失败的事件目标。

所以可以配置两种destinations,成功事件和失败事件的目标。

好,有的学友可能会问了,那前面的死信队列和这个目标配置的功能是不是有些相似?

是的 ,配置失败的事件目标 和 死信队列的用途非常相似,AWS建议在异步调用您的Lambda函数时,使用目标配置来代替死信队列。当然两者有一些重叠的功能,且他们两个是可以同时使用的。使用目标配置,支持配置更多的目标类型:如SQS、SNS、Lambda、或者EventBridge bus,而死信队列只能配置为SQS和SNS。

接下来,对于事件源映射,只能配置失败事件的目标,用于接收处理失败的事件。如果一批事件处理失败了,则事件源映射将有关该批次的详细信息发送SQS或SNS。

来看一下这个图。事件源映射读取Kinesis的记录,会将其发送给Lambda函数。在这个过程中如果处理这些记录出现失败,我们可以选择将它们发送到SQS或SNS作为失败的事件目标,然后 Kinesis可以继续处理,这样的好处是当有无法处理某些记录时不会一直卡在这里。

如果您是处理SQS队列中的内容,当然也可以直接从SQS创建死信队列,作为上面目标的替代方案。
所以,达成的方案可能会有多种,但是作为解决方案架构师,您需要深入了解需求后,然后选择最佳方案和最佳实践。

好的,以上就是我们今天课时的内容,我们讨论了AWS Lambda - 第三部分的内容,希望能够给大家带来帮助。文章来源地址https://www.toymoban.com/news/detail-691981.html

到了这里,关于AWS Lambda - 同步/异步调用,事件源,目标的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SERVERLESS】AWS Lambda上实操

    通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。 无服务器计算近年来与云原生计算都是在互联网背景下产生,其顾名思义是指开发者在构建和运行应用时无需管理服务

    2024年04月15日
    浏览(40)
  • 如何使用 AWS Lambda 运行 selenium

    借助 AWS Lambda 运行 selenium 来爬取网络数据。 与手动从网站收集数据相比,爬虫可以为我们节省很多时间,对于爬虫的每次请求而言,这相当于 AWS Lambda 的每次函数的运行。 AWS Lambda 是一种将脚本部署到云的简单且价格低廉的服务,如果我们要实现在 AWS Lambda 上运行 selenium 实

    2024年02月03日
    浏览(39)
  • 使用AWS Lambda函数的最佳实践!

    主题 函数代码 函数配置 指标和警报 处理流 安全最佳实践 有关 Lambda 应用程序最佳实践的更多信息,请参阅 Serverless Land 中的 Application design。 从核心逻辑中分离 Lambda 处理程序。这样您可以创建更容易进行单元测试的函数。在 Node.js 中可能如下所示: 利用执行环境重用来提

    2024年02月07日
    浏览(44)
  • AWS中lambda与DynamoDB的集成

    前言:我在整个集成过程中,存在最大的问题有两个, 1. 没有考虑到lambda函数的权限,即对DynamoDB或者其他如Kinesis的权限授权,导致无法写入或者读取。 2.最初使用了异步方式调用,导致无法写数据到DynamoDB,把代码改成同步调用即可  创建好之后保存,然后进行部署(deplo

    2024年02月13日
    浏览(72)
  • 基于 AWS Lambda 的 SaaS 应用教程

    在本教程中,我们将探讨如何使用 AWS Lambda 构建一个简单的 Software as a Service (SaaS) 应用程序。我们的示例应用将是一个用于短链接生成的服务。我们将使用 Node.js 来编写 Lambda 函数,并使用其他 AWS 服务来管理和扩展我们的应用。 步骤 1: 准备工作 确保你已经拥有 AWS 账户,并

    2024年01月21日
    浏览(41)
  • AWS Lambda Golang HelloWorld 快速入门

    以下测试基于 WSL2 Ubuntu 22.04 环境 来到 Lambda 控制台, 创建新的函数, Runtime 选择 Go 1.x Code Upload from .zip file 选择前面编译并打包的 main.zip 文件上传. 随后创建新的 Test 匹配 Lambda 处理的 Event 数据格式: Test, 欧耶~报错了! 返回 Code 标签页, 看到默认的 Handler 设置的是 hello , 这和我们

    2024年02月07日
    浏览(60)
  • aws认证,aws有哪些认证,有什么用

    亚马逊云服务是全球市场份额最大的云计算厂商,由光环新网和西云数据运营,可以在中国监管环境下运营公有云。从全球数据中心提供超过 200 项功能齐全的服务。数百万客户(包括增长最快速的初创公司、最大型企业和主要的政府机构)都在使用 AWS 来降低成本、提高敏捷性

    2024年02月02日
    浏览(45)
  • aws对象存储s3基于lambda实现图片裁剪

    存储桶名称:wmmzz 1.存储桶策略设置 2. 创建lambda函数 点击跳转到IAM控制台,创建自定义角色,选择服务类型lambda,创建策略 输入策略下一步取名resize-policy,回到创建角色页面,搜索刚才创建的策略选中,再搜索AmazonS3FullAccess选中 点击下一步,输入角色名称resize-role,点击“创建角色

    2024年02月11日
    浏览(44)
  • AWS Lambda – 函数版本,别名,API网关,CodeDeploy协同

    Hello大家好,我们今天继续讨论AWS Lambda的内容。 Lambda函数的版本 Lambda函数的版本和别名是辅助资源,我们可以通过创建这些资源管理函数的部署和调用。 首先,让我们来看一下Lambda 函数版本的概念。您可以使用版本来管理函数的部署。例如,您现在生产环境上运行了一个函

    2024年02月07日
    浏览(42)
  • AWS EC2定时开关机(lambda+cloudwatch实现)

            在使用AWS云平台的过程中,不免会使用到EC2实例的按需收费模式用于部署测试和开发环境等无需24小时运行的情况。这时为了更加经济,希望每天可以设置EC2只在白天运行,晚上则关机减少费用。         在这里我们以设置EC2实例在每周一至周五的9:00-20:00运行,其余

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包