AWS SNS可通过设置触发器来调用Lambda函数,但可能会出现多次调用的情况。为防止重复调用,可以在Lambda函数中添加幂等性检查。
以下是Python示例代码,Lambda函数的实际功能需根据需求自行编写:
import json
def lambda_handler(event, context):
request = json.loads(event['Records'][0]['Sns']['Message'])
if "messageId" in request and "receiptHandle" in request:
# 执行幂等性检查
# 检查是否已处理过该消息,若已处理则直接返回成功
# 如果该消息未被处理,则执行相应功能
# ...
return {"statusCode": 200, "body": json.dumps("Success")}
else:
return {"statusCode": 400, "body": json.dumps("Bad Request")}
这个示例函数会解析来自SNS的消息,检查其中是否包含消息ID和处理句柄。如果存在这两个参数,则执行幂等性检查并处理消息。如果不存在这两个参数,则返回错误。
在幂等性检查中,您可以通过向数据库或缓存添加状态来识别已处理的消息。通过这种方式,即可避免多次调用Lambda函数。