Lambda:前后执行挂钩

时间:2019-08-22 03:13:47

标签: amazon-web-services aws-lambda

假设我有一个会引起副作用的lambda函数,并且我想在执行失败后进行一些清理(我知道Lambda函数不应以这种方式设计/使用,但我相信Pre / Post执行钩子在除此以外的许多情况下很有用)

有什么办法可以为该Lambda函数提供前后执行挂钩吗?

2 个答案:

答案 0 :(得分:2)

Lambda不支持Pre / Post执行挂钩。

如果需要在执行之前或之后执行某些操作,则需要构建一个工作流来对其进行处理。

可以使用多种方法在Lambda中创建“执行前或执行后挂钩”效果。看一下Step Functions,尤其是因为您提到执行失败,How to Handle Errors in Serverless Applications with AWS Step Functions and AWS Lambda。如果出现特定情况(即执行失败),使用“步进功能”将使您轻松创建工作流以执行特定的工作(即您提到的清理)。

答案 1 :(得分:2)

您可以通过以下几种方式进行操作:

  1. 将所有代码移动到全局try-catch-finally块中,以便您可以 在lambda内部处理。
  2. 添加一个死信队列。如果您的lambda失败,它将进入死信队列,您可以使用另一个lambda处理消息。
  3. 具有重试/捕获块的步进功能如下:
"SomeStep": {
   "Type": "Task",
   "Resource": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:mylambda1",
    "Retry": [
              {
                "ErrorEquals": [ "States.ALL" ],
                "IntervalSeconds": 3,
                "MaxAttempts": 2,
                "BackoffRate": 1
              }
             ],
     "Catch": [
              {
                "ErrorEquals": [ "States.ALL" ],
                "Next": "StepFailed"
              }],
     "End": true
   }

这是一个失败的步骤的示例,它仅显示一条消息,但您可以在此处添加另一个函数调用。

   "StepFailed": {
     "Type": "Pass",
     "Result": "Process failed, but we ignore it.",
     "End": true
  }