假设我有一个会引起副作用的lambda函数,并且我想在执行失败后进行一些清理(我知道Lambda函数不应以这种方式设计/使用,但我相信Pre / Post执行钩子在除此以外的许多情况下很有用)
有什么办法可以为该Lambda函数提供前后执行挂钩吗?
答案 0 :(得分:2)
Lambda不支持Pre / Post执行挂钩。
如果需要在执行之前或之后执行某些操作,则需要构建一个工作流来对其进行处理。
可以使用多种方法在Lambda中创建“执行前或执行后挂钩”效果。看一下Step Functions,尤其是因为您提到执行失败,How to Handle Errors in Serverless Applications with AWS Step Functions and AWS Lambda。如果出现特定情况(即执行失败),使用“步进功能”将使您轻松创建工作流以执行特定的工作(即您提到的清理)。
答案 1 :(得分:2)
您可以通过以下几种方式进行操作:
"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
}