Tried several times, but alway getting error: “Low-priority message was processed too soon.”
please your help.
CloudFormation template:
AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation stack for devops-priority-stack with inline Lambda code, SQS, SNS, and IAM Role
Resources:
HighPriorityQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: devops-High-Priority-Queue
LowPriorityQueue:
Type: AWS::SQS::Queue
Properties:
QueueName: devops-Low-Priority-Queue
PrioritySNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: devops-Priority-Queues-Topic
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
RoleName: lambda_execution_role
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
- arn:aws:iam::aws:policy/AmazonSQSFullAccess
- arn:aws:iam::aws:policy/AmazonSNSFullAccess
PriorityLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: devops-priorities-queue-function
Runtime: python3.13
Role: !GetAtt LambdaExecutionRole.Arn
Handler: index.lambda_handler
Timeout: 3
Environment:
Variables:
high_priority_queue: !Ref HighPriorityQueue
low_priority_queue: !Ref LowPriorityQueue
Code:
ZipFile: |
import boto3
import os
sqs = boto3.client('sqs')
def delete_message(queue_url, receipt_handle, message):
response = sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=receipt_handle)
return "Message " + "'" + message + "'" + " deleted"
def poll_messages(queue_url):
QueueUrl=queue_url
response = sqs.receive_message(
QueueUrl=QueueUrl,
AttributeNames=[],
MaxNumberOfMessages=1,
MessageAttributeNames=['All'],
WaitTimeSeconds=3
)
if "Messages" in response:
receipt_handle=response['Messages'][0]['ReceiptHandle']
message = response['Messages'][0]['Body']
delete_response = delete_message(QueueUrl,receipt_handle,message)
return delete_response
else:
return "No more messages to poll"
def lambda_handler(event, context):
response = poll_messages(os.environ['high_priority_queue'])
if response == "No more messages to poll":
response = poll_messages(os.environ['low_priority_queue'])
return response