Pubblicato il 28/01/2023 da alnao nella categoria AWS

Il servizio SQS prevede la possibilità di scrivere o leggere da una coda MQ. Per poter lavorare tra lambda e qualsiasi altro servizio bisogna sempre ricordare di configurare i permessi, in questo caso ogni lambda ha bisogno della regola IAM per accedere, scrivere e/o leggere nella coda SQS. All’interno di una funzione lambda scritta in linguaggio Python è possibile usare il solito client boto3:

sqs = boto3.client('sqs')

E recuperare url della coda con il comando

response = sqs.get_queue_url(
QueueName='nome-queue',
QueueOwnerAWSAccountId='XXXXXXXXXXX'
)
QueueUrl=response['QueueUrl']

Per inviare il messaggio si usa il metodo send_message:

response = sqs.send_message(
QueueUrl=QueueUrl,
DelaySeconds=10,
MessageBody=(
json.dumps( oggetto )
)
)

Per ricevere un messaggio si usa il metodo receive_message:

response = sqs.receive_message(
QueueUrl=QueueUrl,
AttributeNames=['SentTimestamp'],
MaxNumberOfMessages=1,
MessageAttributeNames=['All'],
VisibilityTimeout=0,
WaitTimeSeconds=0
)
message = response['Messages'][0]
receipt_handle = message['ReceiptHandle']
body = message['Body']

è possibile recuperare anche più messaggi dalla coda “MaxNumberOfMessages”.
Da notare che dopo averlo ricevuto è possibile cancellarlo dalla coda o lasciarlo, se si vuole pulire l’oggetto si deve usare il delete_message:

sqs.delete_message(
QueueUrl=QueueUrl,
ReceiptHandle=receipt_handle
)

Il codice di esempio di queste lambda può essere trovato sul solito repository:

https://github.com/alnao/AwsLambdaExamples/tree/master/py-example6-sqs-get
https://github.com/alnao/AwsLambdaExamples/tree/master/py-example6-sqs-post