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,一经查实,立即删除!

相关文章

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

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

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

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

程序包无效:“CRX_HEADER_INVALID“

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

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

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

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

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

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

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

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

jenkins jboss最近,我正在整理一个快速启动的Maven项目,以展示组织JBoss Fuse项目的可能方法。 该项目可以在Github上找到: https : //github.com/paoloantinori/fuse_ci 这是我与朋友詹姆斯罗林斯 ( 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…

解决Windows 10 CPU占用高风扇吵问题

很多笔记本用户在升级到Windows 10后&#xff0c;都遇到了这样一个问题&#xff0c;那就是Windows 10的CPU占用明显高于Windows 7。这个问题对于台式机可能还算不了什么&#xff0c;顶多就是偶尔卡一下罢了。可由于笔记本大多采用变速风扇&#xff0c;CPU温度飙高时&#xff0c…

知识图谱 图数据库 推理_图数据库的知识表示与推理

知识图谱 图数据库 推理图形数据库及其技术生态系统可以为知识表示和推理问题提供优雅&#xff0c;有效的解决方案。 要了解这种说法&#xff0c;我们必须首先了解什么是图形。 图是一种数据结构。 图数据结构的类型很多&#xff0c;但出于本文的目的&#xff0c;我们将重点介绍…

java状态模式和策略模式_Java状态和策略设计模式之间的差异

java状态模式和策略模式为了在Core Java应用程序中正确使用状态和策略设计模式&#xff0c;对于Java开发人员清楚地了解它们之间的区别很重要。 尽管状态和策略设计模式的结构相似&#xff0c;并且都基于开放式封闭设计原则&#xff0c;从SOLID设计原则表示为“ O”&#xff0c…

正斜杠/和反斜杠\的区别

近来研究源码时发现&#xff0c;常常在路径中出现正斜杠“/”和反斜杠“\”&#xff0c;之前就一直不胜其扰&#xff0c;所幸查资料把它一次弄懂&#xff0c;求个明白。在这里做个记录。 我认真搜了一下&#xff0c;发现问这个问题的人还不少&#xff0c;知乎上也有提问的。来…

如何将Java对象转换为JSON字符串

当学习如何编写基于Java的软件时&#xff0c;开发人员遇到的第一个障碍就是如何将其代码与其他软件连接。 这通常是JSON的来源。尽管您可能是Java向导&#xff0c;但JSON是另一种动物。 无论如何&#xff0c;这篇博客文章解释了完成工作所需的一切。 Java对象是数据和处理可用…

C++迭代器(Iterator)详解

迭代器&#xff08;Iterator&#xff09;的介绍 背景&#xff1a; 指针可以用来遍历存储空间连续的数据结构&#xff0c;但是对于存储空间费连续的&#xff0c;就需要寻找一个行为类似指针的类&#xff0c;来对非数组的数据结构进行遍历。定义&#xff1a;迭代器是一种检查容器…

Java中的责任链设计模式

在本教程中&#xff0c;我们将学习如何在Java中实现责任链模式。 “责任链”设计模式涉及到拥有一系列负责处理请求的对象链。 当客户端发送请求时&#xff0c;第一个处理程序将尝试处理该请求。 如果可以处理&#xff0c;则请求处理在此结束。 但是&#xff0c;如果处理程序无…

硒测试可实现有效的测试自动化

尽管移动应用程序的市场份额有大幅增长&#xff0c;但网络应用程序仍然以大量的用户群为主导。 在部署之前&#xff0c;企业正在快速关注Web应用程序的质量。 这是测试发挥重要作用的地方。 与某些可以自动化的功能测试不同&#xff0c;UI测试仍然主要是手动过程。 但是将测试自…

C++ map用法总结(整理)

1&#xff0c;map简介 map是STL的一个关联容器&#xff0c;它提供一对一的hash。 第一个可以称为关键字(key)&#xff0c;每个关键字只能在map中出现一次&#xff1b;第二个可能称为该关键字的值(value)&#xff1b; map以模板(泛型)方式实现&#xff0c;可以存储任意类型的…

带有Spring Cloud Config和JHipster的Java微服务

朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户&#xff1f; 立即尝试Okta的API和Java SDK。 在几分钟之内即可对任何应用程序中的用户进行身份验证&#xff0c;管理和保护。 如今&#xff0c;使用Java和Spring Boot开发微服务架构非常流行。 它绝对是Java生态系统中最…

如何在Java中使用Lombok删除样板安装程序获取器

你好朋友&#xff0c; 一次又一次反对Java的观点之一是&#xff0c;我们必须写很多样板 我们简单的POJO类的setter和getter形式的代码&#xff0c;不必要地增加了 我们代码的长度。 为了解决这个问题&#xff0c;有一个名为Project Lombok的开源项目可以解决这个问题。 通过…