AWS Lambda事件源映射:使您的触发器混乱无序

最近,我们为Sigma Cloud IDE上的无服务器项目引入了两个新的AWS Lambda事件源(触发类型): SQS队列和DynamoDB流 。 (是的,AWS在几个月前就向他们介绍了;但是我们仍然是一个很小的团队,还遇到了其他一千件事!)

在开发对这些触发器的支持时,我注意到Lambda事件源触发器配置的常见模式(是的,很明显)。 我觉得值得分享。

为什么AWS Lambda触发器搞砸了

Lambda –或更确切地说,AWS –具有一个相当奇怪且混乱的触发器架构; 轻轻地说。 对于不同的触发类型,您必须在各处进行配置。 CloudWatch Events规则的目标 ,API Gateway端点的集成 ,S3存储桶事件的通知配置等。 考虑到其他平台(例如GCP),您可以在一处配置所有东西,这真是一团糟:实际目标函数的“触发”配置。

到处都是。

如果您已经使用基础结构作为代码(IAC)服务(例如CloudFormation(CF)或Terraform(TF)) ,那么您已经知道我的意思了。 您到处都需要映射,链接,权限和其他提示,以使简单的HTTP URL正常工作。 ( SAM确实确实简化了这一点,但它有其自身的局限性 -我们已尽力避免Sigma IDE中的此类复杂性。)

考虑到AWS提供的服务的多样性及其时间表(也许毕竟,Lambda只是一个四岁的孩子 ),这也许是意料之中的。 AWS当然应该必须进行一些疯狂的黑客操作,以支持从众多服务中触发Lambda。 从而造成混乱,分散的配置。

事件源映射:隧道尽头的光?

AWS Lambda事件源

幸运的是,最近引入的流类型触发器遵循一种常见的模式:

  • 一个AWS Lambda事件源映射 ,以及
  • Lambda的执行角色上的一组权限声明 ,使它可以分析,使用和确认/删除流上的消息
  • 服务级别权限,允许事件源调用该函数

这样,您确切地知道应在何处配置触发器,以及如何让Lambda使用事件流。

没有更多的跳跃。

当您基于IAC(例如CloudFormation)时,这非常方便:

 { ... // event source (SQS queue) "sqsq" : { "Type" : "AWS::SQS::Queue" , "Properties" : { "DelaySeconds" : 0 , "MaximumMessageSize" : 262144 , "MessageRetentionPeriod" : 345600 , "QueueName" : "q" , "ReceiveMessageWaitTimeSeconds" : 0 , "VisibilityTimeout" : 30 } }, // event target (Lambda function) "tikjs" : { "Type" : "AWS::Lambda::Function" , "Properties" : { "FunctionName" : "tikjs" , "Description" : "Invokes functions defined in \  tik/js.js in project tik. Generated by Sigma.", ... } }, // function execution role that allows it (Lambda service) // to query SQS and remove read messages "tikjsExecutionRole" : { "Type" : "AWS::IAM::Role" , "Properties" : { "ManagedPolicyArns" : [ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" ], "AssumeRolePolicyDocument" : { "Version" : "2012-10-17" , "Statement" : [ { "Action" : [ "sts:AssumeRole" ], "Effect" : "Allow" , "Principal" : { "Service" : [ "lambda.amazonaws.com" ] } } ] }, "Policies" : [ { "PolicyName" : "tikjsPolicy" , "PolicyDocument" : { "Statement" : [ { "Effect" : "Allow" , "Action" : [ "sqs:GetQueueAttributes" , "sqs:ReceiveMessage" , "sqs:DeleteMessage" ], "Resource" : { "Fn::GetAtt" : [ "sqsq" , "Arn" ] } } ] } } ] } }, // the actual event source mapping (SQS queue -> Lambda) "sqsqTriggertikjs0" : { "Type" : "AWS::Lambda::EventSourceMapping" , "Properties" : { "BatchSize" : "10" , "EventSourceArn" : { "Fn::GetAtt" : [ "sqsq" , "Arn" ] }, "FunctionName" : { "Ref" : "tikjs" } } }, // grants permission for SQS service to invoke the Lambda // when messages are available in our queue "sqsqPermissiontikjs" : { "Type" : "AWS::Lambda::Permission" , "Properties" : { "Action" : "lambda:InvokeFunction" , "FunctionName" : { "Ref" : "tikjs" }, "SourceArn" : { "Fn::GetAtt" : [ "sqsq" , "Arn" ] }, "Principal" : "sqs.amazonaws.com" } } ...  } 

(实际上,这就是这篇文章的全部原因/目的。)

提示:并不需要担心这整个IAC / CloudFormation啄-或写冗长的JSON / YAML -如果你喜欢一个完全自动化的资源管理工具去SLAppForge西格玛无服务器云IDE 。

但是...事件源映射是否已准备好参加大型比赛?

AWS Lambda事件源

它们看起来确实很有希望,但是在我们可以在全自动的生产环境中使用它们之前,似乎事件源映射确实需要更成熟一些。

您无法通过IAC更新事件源映射。

例如,即使事件源从开始以来已经超过四年,但事件源在通过IaC(例如CloudFormation或无服务器框架)创建后仍无法更新 。 这会造成严重的麻烦; 如果更新映射配置,则需要手动删除旧的并部署新的。 第一次正确设置它,否则您将不得不进行繁琐的手动清理以使整个事情重新开始。 自动化非常重要!

The event source arn (aaa) and function (bbb) provided mapping already exists. Please update or delete the existing mapping...

听起来很老派。

还有其他一些不太明显的问题。 首先,事件源映射是由轮询机制驱动的 。 如果您的源是SQS队列,则Lambda服务将继续对其进行轮询,直到收到下一条消息为止。 尽管这完全无法控制,但这确实意味着您要为轮询支付费用 。 另外,作为一名开发人员,我不认为轮询完全适合事件驱动的无服务器范例。 当然, 一切都归结为最后的投票 ,但仍然……

最后:为什么不尝试事件源映射?

AWS Lambda事件源

是否准备就绪,似乎事件源映射将保留下来。 随着数据流 ( Kinesis ),队列驱动的分布式处理协调 ( SQS )和事件分类帐 ( DynamoDB Streams )的日益普及,随着时间的流逝,它们将变得越来越受欢迎。

您可以通过多种方式尝试事件源映射的工作方式: AWS控制台 , aws-cli , CloudFormation , Serverless Framework和易于使用的图形化IDE SLAppForge Sigma 。

只需拖放即可轻松管理事件源映射!

在Sigma IDE中,您可以简单地将事件源( SQS队列 , DynamoDB表或Kinesis流 ) 拖放到Lambda函数代码的event变量上。 Sigma将弹出一个包含可用映射配置的对话框,因此您可以轻松配置源映射行为。 您甚至可以在弹出窗口中配置一个全新的源(队列,表或流),而不使用现有的源。

AWS Lambda事件源

部署后,Sigma将为您的新事件源自动生成所有必要的配置和权限,并为您将其发布到AWS。 全部都是完全托管,完全自动化和完全透明的。

聊够了。 让我们开始吧!

翻译自: https://www.javacodegeeks.com/2019/05/aws-lambda-source-mappings-bringing-your-triggers.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pat 乙级 1047 编程团体赛(C++)

题目 编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。现给定所有队员的比赛成绩,请你编写程序找出冠军队。 输入格式: 输入第一行给出…

Sublime Text3常用基本操作

1 在每行光标快速移动 光标移动至行首:(home)键;光标移动至行尾:(end)键;(ctrl)(→)是单位性移动光标ctrl shift -> 是选中单位性移动光标 2 快速定位至文件首或尾 window: ctrl home / end mac: cmd ↓全选左 / 右方向键 3 选中一行快捷键 Shi…

pat 乙级 1011 A+B 和 C(C++)

题目 给定区间 [−2​31​​ ,2​31​​ ] 内的 3 个整数 A、B 和 C,请判断 AB 是否大于 C。 输入格式: 输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。…

ubuntu安装后需了解的基本操作

转载原文链接:https://blog.csdn.net/weixin_44487337/article/details/99938348 (一)更换源 编辑/etc/apt/sources.list cp /etc/apt/sources.list /etc/apt/sources_default.list vi /etc/apt/sources.list //将cn.archive.ubuntu.com替换…

java 并发计数器_Java 8 LongAdders:管理并发计数器的正确方法

java 并发计数器我只是买了新玩具,而Java 8有很多 。 这次我想谈谈我的最爱之一-并发加法器。 这是一组新的类,用于管理由多个线程编写和读取的计数器。 新的API有望显着提高性能,同时仍使事情简单明了。 自从多核体系结构问世以来人们一直在…

pat 乙级 1012 数字分类(C++)

题目 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 能被 5 整除的数字中所有偶数的和;A2 将被 5 除后余 1的数字按给出顺序进行交错求和,即计算n1-n2n3-n4…;A3 被 5 除后余 2 的…

Ubuntu千万不要运行的命令

1 sudo apt-get dist-upgrade 成功把16.04“升级”至18.04并把系统搞崩导致登录不进去

使用Open Liberty的开发模式最大程度地缩短周转时间

我上传了一个视频,其中显示了如何在编写部署在Open Liberty上的Enterprise Java应用程序时减少周转时间。 Maven插件的liberty:dev目标监视文件更改并立即应用更改,而无需重建整个部署工件。 我将展示Open Liberty如何在我们更改源代码,配置…

pat 乙级 1022 D进制的A+B(C++)

题目 输入两个非负 10 进制整数 A 和 B (≤2​30 −1)&#xff0c;输出 AB 的 D (1<D≤10)进制数。 输入格式&#xff1a; 输入在一行中依次给出 3 个整数 A、B 和 D。 输出格式&#xff1a; 输出 AB 的 D 进制数。 输入样例&#xff1a; 123 456 8 输出样例&#xff…

数独 -- 合法数独与完全数独

一、数独的介绍 从2004年底开始&#xff0c;数独游戏在英国变得非常流行。数独(Sudoku)是一个日语单词意思是数字位置之类的单词(或短语)。谜题的理念非常简单;面对一个9 9的网格&#xff0c;被分成9个3 3的块: 在其中的一些盒子里&#xff0c;设置者放一些数字1-9:求解者的目…

程序包无效:“CRX_HEADER_INVALID“

版权声明&#xff1a;本文为博主转载文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 转载本文链接&#xff1a;https://blog.csdn.net/qq_41973208/article/details/89431020 之前在安装谷歌插件的时候遇到的问题&#xff0c;解决…

pat 乙级 1027 打印沙漏(C++)

题目 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符号中心对齐&#xff1b;相邻两行符号数差2&#xff1b;符号数先从大到小顺序递减到1&#x…

Kogito人机规则-第1部分:进一步解决流口水

Kogito计划是我们承诺将我们的业务自动化套件引入云和更大的Kubernetes生态系统的承诺。 但这对我们钟爱的规则引擎Drools意味着什么&#xff1f; 在这篇文章中&#xff0c;我们介绍使用规则单元的模块化规则库&#xff1a; 一个特点&#xff0c;一直是在Drools中7一段时间的…

chrome 占用大量内存直到网页崩溃_Chrome吃内存太夸张!几招解决Chrome占内存硬伤...

我们知道Chrome是非常出色的浏览器&#xff0c;无论从性能还是功能的角度来看&#xff0c;都是如此。但是Chrome在内存占用方面的表现&#xff0c;就很令人头疼了&#xff01;常常听到有朋友抱怨&#xff0c;想要上网找找素材&#xff0c;不一会儿发现Chrome已经将PS要用的内存…

pat 乙级 1014 福尔摩斯的约会 (C++)

题目 大侦探福尔摩斯接到一张奇怪的字条&#xff1a; 我们约会吧&#xff01;3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了&#xff0c;字条上奇怪的乱码实际上就是约会的时间星期四 14:04. 因为前面两字符串中第 1 对相同的大写英文字…

windows和ubuntu双系统设置开机默认系统

1、记住grub界面中windows的位置 我的界面如下&#xff1a;windows在第3行 2、选择进入ubuntu系统 3、打开终端&#xff0c;输入如下命令 sudo vim /etc/default/grub 4、看到如下图的内容 GRUB_DEFAULT是开机启动的默认项&#xff08;我的windows是第3行&#xff0c;所以此…

jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成

jenkins jboss最近&#xff0c;我正在整理一个快速启动的Maven项目&#xff0c;以展示组织JBoss Fuse项目的可能方法。 该项目可以在Github上找到&#xff1a; https : //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 &#xff08; James Rawlings&#xff09…

完全禁用Microsoft Compatibility Telemetry

完全禁用Microsoft Compatibility Telemetry Win S 中搜索 任务计划程序 /Microsoft/Windows/Application Experience 禁用 Microsoft Compatibility Appraiser 如果不管用 服务里禁用 Diagnostic Policy Service

第19次csp认证 202006-2 稀疏向量(C++)

题目 分析 本题需要计算的是两个n维向量的内积&#xff0c;只需计算两者对应的稀疏向量index相同的分量乘积&#xff0c;然后累加就可以了。 向量的一个分量包含index和value&#xff0c;使用struct来存储比较方便。n<109&#xff0c;a,b<5 * 105&#xff0c;|ui| * |v…

将指标标签与MicroProfile Metrics 2.0结合使用

从我们的应用程序发出的与业务相关的度量标准可能包含要为其测量特定度量标准的参数&#xff08;即标签或标签 &#xff09;。 从MicroProfile Metrics 2.0开始&#xff0c;可以使用API​​将标签分配给特定的指标。 声明式方法 假设我们有以下资源&#xff1a; Path ( "…