无服务器的 Lambda 死字队列插件
A 类 无服务器 插件,可以将一个死字 SQS 队列指定给 Lambda 函数 。 与无服务器的v1.4+,v2和v3一起工作.
这是什么?
指定 a DeadLetterConfig 到 Lambda 函数,并可选地创建一个新的 SQS 队列或 SNS Topic,并使用简单的语法.
Amazon Lambda 的同步消息失败, 可以通过设置 SQS 队列或 SNS 主题发送到 DeadLetterConfig. Lambda 死信队列 此处记录。 。 。 .
在开发此插件时, AWS Cloudform (和无服务器) 不支持 DeadLetterConfig lambda 的属性 所以我们引入了一个调用插件 UpdateFunctionConfiguration 在无服务器部署 Cloud Formation 堆栈后,在羊肉上.
安装
从目标无服务器项目中运行 :
npm install @digitalmaas/serverless-plugin-lambda-dead-letter --save-dev
基本设置
将插件添加到您的 serverless.yml数字 :
plugins:
- '@digitalmaas/serverless-plugin-lambda-dead-letter'
我该怎么用?
死信设置通过新程序指定 deadLetter 在函数下嵌入的属性 serverless.yml 文档.
有几种方法可以配置Lambda deadLetterConfig.
- 方法 - 方法 1个: 创建新的死信 SQS 队列或 SNS 主题
- 方法-2: 使用先前存在的队列/专题.
- 方法 3: 使用资源中创建的队列/主题.
- 删除已死信件资源: 删除先前指定的任何死字队列/专题.
方法 - 方法 1个
死信队列
使用 deadLetter.sqs 以创建函数的新死字队列.
由此产生的云形堆栈会包含一个 SQS 队列,并且是相应的队列政策.
按名称创建新死字队列
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
deadLetter:
sqs: createUser-dl-queue # New Queue with this name
新建带有属性的死字母队列
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
deadLetter:
sqs: # New Queue with these properties
queueName: createUser-dl-queue
delaySeconds: 60
maximumMessageSize: 2048
messageRetentionPeriod: 200000
receiveMessageWaitTimeSeconds: 15
visibilityTimeout: 300
死信主题
使用 deadLetter.sns 以创建函数的新死字题.
由此产生的云形堆栈将包含一个SQS主题资源.
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
deadLetter:
sns: createUser-dl-topic
方法-2
使用 targetArn 属性以指定用于 Lambda 死信消息的 SQS 队列或 SNS 主题 。 在这种情况下,队列\主题必须已经存在,队列\主题政策也必须存在.
引用已有队列的 ARN createUser-dl-queue
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
deadLetter:
targetArn: arn:aws:sqs:us-west-2:123456789012:createUser-dl-queue
方法 3
如果您创建了队列\ title resource 您可以使用 GetResourceArn 伪道.
这将使用引用资源的背景 {logicalId}
deadLetter:
targetArn:
GetResourceArn: {logicalId}
说明:
- 目前这只适用于SQS队列或SNS主题.
- 如果队列\ title 创建于
resources区域中您仍需要为相应的队列\ title 策略添加资源,以使 lambda 有权限写入已死信件队列\ title .
在这个例子中 createUser lambda 函数正在使用新的 CreateUserDeadLetterQueue 在资源一节中定义的 SQS 队列 .
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
# ...
deadLetter:
targetArn:
GetResourceArn: CreateUserDeadLetterQueue
resources:
Resources:
CreateUserDeadLetterQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: create-user-lambda-dl-queue
CreateUserDeadLetterQueuePolicy:
Type: AWS::SQS::QueuePolicy
Properties:
Queues:
- Ref: CreateUserDeadLetterQueue
# Policy properties abbreviated but you need more here ...
删除死信资源
如果您以前有一个"死信"目标,并且想要删除它,所以没有死信队列或话题,您可以提供 deadLetter 空白对象 targetArn。一旦部署插件将运行 Lambda UpdateFunctionConfiguration 并设定一个空的目标.
# 'functions' in serverless.yml
functions:
createUser: # Function name
handler: handler.createUser # Reference to function 'createUser' in code
# ...
# Set an empty targetArn to erase previous DLQ settings.
deadLetter:
targetArn:
许可证
MIT许可证.
这个项目是原创的 无服务器插件- lambda- dead- letter 并用不同的名字出版,因为原作被废弃.
欲了解完整情况,请查阅 许可证 文档.