aws lambda_AWS Lambda事件源映射:使您的触发器混乱无序
aws lambda
最近,我們?yōu)镾igma Cloud IDE上的無服務(wù)器項(xiàng)目引入了兩個(gè)新的AWS Lambda事件源(觸發(fā)類型): SQS隊(duì)列和DynamoDB流 。 (是的,AWS在幾個(gè)月前就向他們介紹了;但是我們?nèi)匀皇且粋€(gè)很小的團(tuán)隊(duì),還遇到了其他一千件事!)
在開發(fā)對這些觸發(fā)器的支持時(shí),我注意到Lambda事件源觸發(fā)器配置的通用模式(是的,很明顯)。 我覺得值得分享。
為什么將AWS Lambda觸發(fā)器搞砸了
Lambda –或更確切地說,AWS –具有一個(gè)奇特而混亂的觸發(fā)器架構(gòu); 輕輕地說。 對于不同的觸發(fā)器類型,您必須在各處設(shè)置配置;否則,請執(zhí)行以下步驟。 CloudWatch Events規(guī)則的目標(biāo) ,API Gateway端點(diǎn)的集成 ,S3存儲(chǔ)桶事件的通知配置等。 考慮到其他平臺(tái)(例如GCP),您可以在一處配置所有東西,這真是一團(tuán)糟:實(shí)際目標(biāo)函數(shù)的“觸發(fā)”配置。
到處都是。
如果您已經(jīng)使用基礎(chǔ)結(jié)構(gòu)作為代碼(IAC)服務(wù)(例如CloudFormation(CF)或Terraform(TF)) ,那么您已經(jīng)知道我的意思了。 您到處都需要映射,鏈接,權(quán)限和其他提示,以使簡單的HTTP URL正常工作。 ( SAM確實(shí)確實(shí)簡化了這一點(diǎn),但它有其自身的局限性 -我們已盡力避免Sigma IDE中的此類復(fù)雜性。)
考慮到AWS提供的服務(wù)的多樣性及其時(shí)間表(也許Lambda只是一個(gè)四歲的孩子 ),這也許是可以預(yù)期的。 AWS當(dāng)然應(yīng)該必須進(jìn)行一些瘋狂的黑客操作,以支持從眾多服務(wù)中觸發(fā)Lambda。 因此造成混亂,分散的配置。
事件源映射:隧道盡頭的光?
幸運(yùn)的是,最近引入的流類型觸發(fā)器遵循一種常見的模式:
- 一個(gè)AWS Lambda事件源映射 ,以及
- Lambda的執(zhí)行角色上的一組權(quán)限聲明 ,使它可以分析,使用和確認(rèn)/刪除流上的消息
- 服務(wù)級別權(quán)限,允許事件源調(diào)用該函數(shù)
這樣,您確切地知道應(yīng)在何處配置觸發(fā)器,以及如何讓Lambda使用事件流。
沒有更多的跳躍。
當(dāng)您基于IAC(例如CloudFormation)時(shí),這非常方便:
{ ... // 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" } } ... }(實(shí)際上,這就是這篇文章的全部原因/目的。)
提示:你并不需要擔(dān)心這整個(gè)IAC / CloudFormation啄-或?qū)懭唛L的JSON / YAML -如果你喜歡一個(gè)完全自動(dòng)化的資源管理工具去SLAppForge西格瑪無服務(wù)器云IDE 。
但是…事件源映射是否已準(zhǔn)備好參加大型比賽?
它們看起來確實(shí)很有希望,但是在我們將其用于全自動(dòng)生產(chǎn)環(huán)境之前,似乎事件源映射確實(shí)還需要一些成熟度。
您無法通過IAC更新事件源映射。
例如,即使事件源從開始以來已經(jīng)超過四年,但事件源在通過IaC(如CloudFormation或無服務(wù)器框架)創(chuàng)建后仍無法更新 。 這會(huì)造成嚴(yán)重的麻煩; 如果更新了映射配置,則需要手動(dòng)刪除舊的并部署新的。 第一次正確設(shè)置它,否則您將不得不進(jìn)行繁瑣的手動(dòng)清理以使整個(gè)事情重新開始。 自動(dòng)化非常重要!
The event source arn (aaa) and function (bbb) provided mapping already exists. Please update or delete the existing mapping...
聽起來很老派。
還有其他一些不太明顯的問題。 首先,事件源映射是由輪詢機(jī)制驅(qū)動(dòng)的 。 如果您的源是SQS隊(duì)列,則Lambda服務(wù)將繼續(xù)對其進(jìn)行輪詢,直到收到下一條消息為止。 盡管這完全無法控制,但這確實(shí)意味著您要為輪詢支付費(fèi)用 。 另外,作為一名開發(fā)人員,我不認(rèn)為輪詢完全適合事件驅(qū)動(dòng)的無服務(wù)器范例。 當(dāng)然, 一切都?xì)w結(jié)為最后的投票 ,但仍然……
最后:為什么不嘗試事件源映射?
是否準(zhǔn)備就緒,似乎事件源映射將保留下來。 隨著數(shù)據(jù)流 ( Kinesis ),隊(duì)列驅(qū)動(dòng)的分布式處理和協(xié)調(diào) ( SQS )和事件分類帳 ( DynamoDB Streams )的日益普及,隨著時(shí)間的流逝,它們將變得越來越受歡迎。
您可以通過多種方式嘗試事件源映射的工作方式: AWS控制臺(tái) , aws-cli , CloudFormation , Serverless Framework和易于生成的圖形化IDE SLAppForge Sigma 。
只需拖放即可輕松管理事件源映射!
在Sigma IDE中,您可以簡單地將事件源( SQS隊(duì)列 , DynamoDB表或Kinesis流 ) 拖放到Lambda函數(shù)代碼的event變量上。 Sigma將彈出一個(gè)包含可用映射配置的對話框,因此您可以輕松配置源映射行為。 您甚至可以配置一個(gè)全新的源(隊(duì)列,表或流),而不是在彈出窗口中使用現(xiàn)有的源。
部署后,Sigma將為新事件源自動(dòng)生成所有必要的配置和權(quán)限,并為您將其發(fā)布到AWS。 全部都是完全托管,完全自動(dòng)化和完全透明的。
聊夠了。 讓我們開始吧!
翻譯自: https://www.javacodegeeks.com/2019/05/aws-lambda-source-mappings-bringing-your-triggers.html
aws lambda
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的aws lambda_AWS Lambda事件源映射:使您的触发器混乱无序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 方圆脸型适合什么发型(试试这3种短发,洋
- 下一篇: 金樱子肉的作用与功效(具有固精缩尿、固崩