#!/usr/bin/env python3 import sys import boto3 # WICHTIG: Region auf us-east-2 gesetzt sqs = boto3.client('sqs', region_name='us-east-2') def requeue_dlq(domain, max_messages=10): # Namen normalisieren (Punkte zu Bindestrichen) queue_name = domain.replace('.', '-') + '-queue' dlq_name = queue_name + '-dlq' print(f"Connecting to AWS in us-east-2 for domain: {domain}") try: # URLs holen q_url = sqs.get_queue_url(QueueName=queue_name)['QueueUrl'] dlq_url = sqs.get_queue_url(QueueName=dlq_name)['QueueUrl'] except Exception as e: print(f"❌ Error finding queues: {e}") return # Status prüfen attrs = sqs.get_queue_attributes(QueueUrl=dlq_url, AttributeNames=['ApproximateNumberOfMessages']) count = int(attrs['Attributes']['ApproximateNumberOfMessages']) if count == 0: print(f"✅ No messages in DLQ ({dlq_name}).") return print(f"⚠️ Found {count} messages in {dlq_name}") print(f" Target: {queue_name}") if input(" Move messages now? (y/n): ").lower() != 'y': print("Cancelled.") return moved = 0 while moved < max_messages: # Messages holen resp = sqs.receive_message( QueueUrl=dlq_url, MaxNumberOfMessages=10, # Max allowed by AWS per call WaitTimeSeconds=1 ) msgs = resp.get('Messages', []) if not msgs: break for msg in msgs: # 1. In Main Queue senden sqs.send_message(QueueUrl=q_url, MessageBody=msg['Body']) # 2. Aus DLQ löschen sqs.delete_message(QueueUrl=dlq_url, ReceiptHandle=msg['ReceiptHandle']) moved += 1 print(f" ✓ Moved message {msg['MessageId']}") print(f"✅ Successfully moved {moved} messages.") if __name__ == '__main__': if len(sys.argv) < 2: print("Usage: python3 requeue-dlq.py ") sys.exit(1) requeue_dlq(sys.argv[1])