Skip to content

Instantly share code, notes, and snippets.

@jric
Forked from kern/save-sqs-queue.py
Last active April 28, 2020 12:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jric/8b31653600a9ef81dc1a6b483a109eb5 to your computer and use it in GitHub Desktop.
Save jric/8b31653600a9ef81dc1a6b483a109eb5 to your computer and use it in GitHub Desktop.
Saves all messages from an AWS SQS queue into a folder
'''
This version uses boto3 and python3.
'''
import argparse
import boto3
import json
import os
parser = argparse.ArgumentParser(description='Saves all messages from an AWS SQS queue into a folder.')
parser.add_argument(
'-q', '--queue', dest='queue', type=str, required=True,
help='The name of the AWS SQS queue to save.')
parser.add_argument(
'-a', '--account', dest='account', type=str,
help='The AWS account ID whose queue is being saved.')
parser.add_argument(
'-o', '--output', dest='output', type=str, default='queue-messages',
help='The output folder for saved messages.')
# parser.add_argument(
# '-r', '--region', dest='aws_region', type=str, required=True,
# help='The AWS region where the queue is located.')
#
# parser.add_argument(
# '-k', '--key', dest='aws_key', type=str, required=True,
# help='Your AWS account key.')
#
# parser.add_argument(
# '-s', '--secret', dest='aws_secret', type=str, required=True,
# help='Your AWS account secret.')
parser.add_argument(
'-d', '--delete', dest='delete', default=False, action='store_true',
help='Whether or not to delete saved messages from the queue.')
parser.add_argument(
'-v', '--visibility', dest='visibility', type=int, default=60,
help='The message visibility timeout for saved messages.')
args = parser.parse_args()
if not os.path.exists(args.output):
os.makedirs(args.output)
sqs = boto3.resource('sqs')
queue = sqs.get_queue_by_name(QueueName=args.queue, QueueOwnerAWSAccountId=args.account)
count = 0
while True:
messages = queue.receive_messages(
MaxNumberOfMessages=10,
AttributeNames=['All'],
VisibilityTimeout=args.visibility)
if len(messages) == 0: break
for msg in messages:
filename = os.path.join(args.output, msg.message_id)
obj = { 'id': msg.message_id,
'attributes': msg.message_attributes,
'body': msg.body }
with open(filename, 'w') as f:
json.dump(obj, f, indent=2)
count += 1
print('Saved message to {}'.format(filename))
if args.delete:
msg.delete()
print('{} messages saved'.format(count))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment