====== SQS ====== Simple Queue service $ aws sqs list-queues --profile nonprod_admin | jq .[][] | grep -i 'dev\|test\|nonprod' "https://eu-west-1.queue.amazonaws.com/123456781234/AJS-testQueue" "https://eu-west-1.queue.amazonaws.com/123456781234/dev-archive-data-queue" ===== Trivial example lambda ===== import boto3 def SendMsgToSQS(event, context): # Create SQS client sqs = boto3.client('sqs') queue_url = 'https://sqs.eu-west-1.amazonaws.com/123456927/AJS-testQueue' # Send message to SQS queue response = sqs.send_message( QueueUrl=queue_url, DelaySeconds=0, MessageAttributes={ 'Title': { 'DataType': 'String', 'StringValue': 'String Quartets' }, 'Composer': { 'DataType': 'String', 'StringValue': 'Johann Sebastian Bach' }, 'DateComposed': { 'DataType': 'Number', 'StringValue': '1700' } }, MessageBody=( 'Music popularity for:- ' 'week starting 01/06/1720' ) ) return (response['MessageId']) #SendMsgToSQS('event', 'context') ===== Place jobs on Queue ===== ''sqs-ami-sendInfo.py'' places jobs on a queue. #!/usr/bin/env python from __future__ import print_function import sys import boto3 data = {'AMIage': '6', 'AMIimageID': 'ami-094ef7a0cbb90a7c1', 'accountID': '12345678'} profile = 'nonprod_admin' context = '' # Create SQS client session = boto3.session.Session(profile_name=profile) sqs = session.client('sqs') def send2SQS(args, context): queue_url = 'https://sqs.eu-west-1.amazonaws.com/057726927330/AJS-testQueue' AMIage = args['AMIage'] AMIimageID = args['AMIimageID'] accountID = args['accountID'] # print (type(AMIage), type(AMIimageID), type(accountID)) # print (AMIage, AMIimageID, accountID) # Send message to SQS queue response = sqs.send_message( QueueUrl=queue_url, DelaySeconds=0, MessageAttributes={ 'AMIage': { 'DataType': 'Number', 'StringValue': AMIage }, 'AMIimageID': { 'DataType': 'String', 'StringValue': AMIimageID }, 'accountID': { 'DataType': 'Number', 'StringValue': accountID } }, MessageBody=( 'List of AMI, age and accounts ' 'sent from sqs-ami-info.py' ) ) return (response['MessageId']) response = send2SQS(data, context) print ('Message ID is ', response) ===== Remove jobs from queue ===== ''sqs-ami-rcvInfo.py'' picks one message from the queue and deletes it after reading. #!/usr/bin/env python from __future__ import print_function import sys import boto3 data = {'AMIage': '6', 'AMIimageID': 'ami-094ef7a0cbb90a7c1', 'accountID': '12345678'} profile = 'nonprod_admin' context = '' # Create SQS client session = boto3.session.Session(profile_name=profile) sqs = session.client('sqs') def MainFunction(): queue_url = 'https://sqs.eu-west-1.amazonaws.com/057726927330/AJS-testQueue' MsgCount = int(getMsgCount(queue_url, context)) print("MsgCount is ", MsgCount) if MsgCount == 0: # no messages, so quit # print("No messages on queue.") return ("No messages on queue.") else: # print ('non zero message count') MSGresponse = getMsgFromSQS(queue_url, context) print('=' * 6) print('non zero message count', MSGresponse) print('=' * 6) def getMsgCount(queue_url, context): print('getMsgCount function') # This gets the number of messages on the queue. numberOfMessagesResponse = sqs.get_queue_attributes( QueueUrl=queue_url, AttributeNames=['ApproximateNumberOfMessages'] ) numberOfMessages = numberOfMessagesResponse['Attributes']['ApproximateNumberOfMessages'] # print("Approx Number of Messages >", numberOfMessages, "<") return (numberOfMessages) def getMsgFromSQS(queue_url, context): print('getMsgFromSQS function') # Get 1st message from SQS queue response = sqs.receive_message( QueueUrl=queue_url, AttributeNames=['SentTimestamp'], MaxNumberOfMessages=1, MessageAttributeNames=[ 'All' ], VisibilityTimeout=0, WaitTimeSeconds=0 ) print('=' * 6) print("getFromSQS->", response) # print("getFromSQS-> Messages->", response) print('=' * 6) for i in response['Messages']: receipt_handle = (i['ReceiptHandle']) messageID = (i['MessageId']) print('----') print(i['Body']) print(i['MessageAttributes']['AMIimageID']['StringValue']) print(i['MessageAttributes']['AMIage']['StringValue']) print(i['MessageAttributes']['accountID']['StringValue']) # Call delete message function deleteMessageFromSQS(receipt_handle, queue_url, messageID ) return (i['Body'], i['MessageAttributes']['AMIimageID']['StringValue'], i['MessageAttributes']['AMIage']['StringValue'], i['MessageAttributes']['accountID']['StringValue']) def deleteMessageFromSQS(receipt_handle, queue_url, message_ID): print('deleteMessageFromSQS function') print('=' * 6) print("delete message ->", receipt_handle) print('=' * 6) # Delete received message from queue sqs.delete_message( QueueUrl=queue_url, ReceiptHandle=receipt_handle ) print('=' * 6) print('Received and deleted message', message_ID) print('=' * 6) mainresponse = MainFunction() print (mainresponse)