====== 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)