SQS DeleteMessage阻止并且不返回响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQS DeleteMessage阻止并且不返回响应相关的知识,希望对你有一定的参考价值。
我正在处理lambda函数中的sqs消息,一旦处理成功,我尝试删除它。这就是问题的来源。似乎对deleteMessage
的调用并没有完成。 lambda函数在deleteMessage
返回之前100秒后超时。
以下是用于尝试删除邮件的代码示例。当我在临时发送它作为黑客攻击时,我将queueUrl与消息一起传递(处理队列URL,arns和名称现在是混乱和不一致的)。
我已经验证了queueUrl和ReceiptHandle是正确的。
async deleteSQSMessage(record: SQSRecord) {
try {
let queueUrl: any = record.messageAttributes['queueUrl']
console.log(`Deleting message from queue: ${JSON.stringify(queueUrl)}`)
if(queueUrl) {
console.log(`Deleting queue message: ${record.body}`)
let sqs = new SQS()
let deleteParams = { QueueUrl: queueUrl.stringValue, ReceiptHandle: record.receiptHandle }
// THIS IS THE LAST STATEMENT PRINTED IN THE LOGS (AFTER 100 SECS THE LAMBDA FUNCTION TIMES OUT
console.log(`Delete params: ${JSON.stringify(deleteParams)}`)
let result = await sqs.deleteMessage(deleteParams).promise()
console.log(`Delete result: ${result}`)
} else {
console.error(`Invalid event record, no queueUrl attribute, cant delete message off of queue. ${record}`)
}
}
catch(err) {
console.error(JSON.stringify(err))
}
}
我已添加此VPC端点以启用对sqs的访问:
SQSVPCEndpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
ServiceName: !Sub 'com.amazonaws.${AWS::Region}.sqs'
VpcId: !Ref VPC
VpcEndpointType: Interface
SubnetIds:
- !Ref SubnetA
- !Ref SubnetB
- !Ref SubnetC
SecurityGroupIds:
- !Ref VPCSecurityGroup
上面引用的安全组:
VPCSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: 'Open security group for subnet IPS'
VpcId: !Ref VPC
VPCSecurityGroupIngress:
Type: AWS::EC2::SecurityGroupIngress
Properties:
GroupId: !Ref VPCSecurityGroup
IpProtocol: tcp
FromPort: 0
ToPort: 65535
SourceSecurityGroupId: !Ref VPCSecurityGroup
VPCSecurityGroupEgress:
Type: AWS::EC2::SecurityGroupEgress
Properties:
GroupId: !Ref VPCSecurityGroup
IpProtocol: tcp
FromPort: 0
ToPort: 65535
DestinationSecurityGroupId: !Ref VPCSecurityGroup
任何人对我在这里做错了什么有什么想法?
答案
事实证明,我的VPC和EndPoint上有一些缺少的属性......
我将这些添加到VPC中
EnableDnsSupport: true
EnableDnsHostnames: true
并将其添加到端点
PrivateDnsEnabled: true
然后lambda函数最终能够与SQS通信
另一答案
事实证明,我的VPC和EndPoint上有一些缺少的属性......
我将这些添加到VPC中
EnableDnsSupport: true
EnableDnsHostnames: true
并将其添加到端点
PrivateDnsEnabled: true
然后lambda函数最终能够与SQS通信
以上是关于SQS DeleteMessage阻止并且不返回响应的主要内容,如果未能解决你的问题,请参考以下文章
aws lambda 上的保留并发不会阻止 lambda 进行更多扩展?