Created
October 24, 2018 02:14
-
-
Save fud/db546db22a25c8b63f63ecee60953dd7 to your computer and use it in GitHub Desktop.
Replay messages from a dead letter queue into main queue. Python + boto3
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import boto3 | |
import sys | |
import json | |
import time | |
import argparse | |
from termcolor import cprint | |
parser = argparse.ArgumentParser(description="Migrate messages from SQS queues.") | |
parser.add_argument('-s', '--src', required=True, | |
help='Name of the source queue.') | |
parser.add_argument('-d', '--dst', required=True, | |
help='Name of the destination queue.') | |
parser.add_argument('--region', default='us-east-1', | |
help='The AWS region of the queues (default: \'us-east-1\').') | |
args = parser.parse_args() | |
aws_region = args.region | |
src_queue_name = args.src | |
dst_queue_name = args.dst | |
print('Connect to sqs..') | |
print('Source: ' + src_queue_name) | |
print('Destination: ' + dst_queue_name) | |
sqs = boto3.resource('sqs', region_name='us-west-2') | |
src_queue = sqs.get_queue_by_name(QueueName=src_queue_name) | |
dst_queue = sqs.get_queue_by_name(QueueName=dst_queue_name) | |
print('...Connected to SQS') | |
print(src_queue) | |
print(dst_queue) | |
while True: | |
for message in src_queue.receive_messages(AttributeNames=['All'], MaxNumberOfMessages=10): | |
print('Message Body is, {0}'.format(message.body)) | |
print('attributes', message.body) | |
print('attributes', message.attributes) | |
response = dst_queue.send_message( | |
MessageBody=message.body, | |
MessageDeduplicationId=message.attributes['MessageDeduplicationId'], | |
MessageGroupId=message.attributes['MessageGroupId'] | |
) | |
if response.get('MessageId'): | |
print('Created Message with id, {0}'.format(response.get('MessageId'))) | |
message.delete() | |
print('Sleeping for 10 seconds.') | |
time.sleep(10) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Replay's messages from our dead letter queue back into our main queue.
Python3
Boto3
Sleeps for 10seconds after getting 10 messages so not to inundate your main queue.