Я обрабатываю сообщение sqs в лямбда-функции, и как только оно успешно обработано, я пытаюсь удалить его.Вот тут и возникает проблема. Кажется, что вызов deleteMessage
просто не завершается.Лямбда-функция отключается через 100 секунд, прежде чем возвращается deleteMessage
.
Ниже приведен пример кода, который используется для попытки удаления сообщения.Я передаю queueUrl вместе с сообщением, когда отправляю его как промежуточный хак (работа с URL-адресами, аргументами и именами в очереди на данный момент грязная и несовместимая).
Я подтвердил, что 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
Я дал лямбду полнойдоступ к sqs:
И в самой очереди я разрешил любому выполнять любое действие:
Любой имеетЛюбые идеи о том, что я мог бы делать здесь не так?