'How to properly use AWS SQS

I was looking for a good way to manage a lot of background tasks, and i found out AWS SQS.

My software is coded in PHP. To complete a background task, the worker must be a CLI PHP application.

How am i thinking of acclompishing this with AWS SQS:

  • Client creates a message (message = task)
  • Message Added to Mysql DB
  • A Cron Job checks mysql db for messages and adds them to SQS queue
  • SQS Queue Daemon listents to queue for messages and sends HTTP POST requests to worker when a message is received
  • Worker receives POST request and forks a php shell_execute with parameters to do the work

Its neccessary to insert messages in MySQL because they are scheduled to be completed at a certain time

A little over complicated.

I need to know what is the best way to do this.



Solution 1:[1]

I would use AWS Lambda, with an SQS trigger to asynchronoulsy process messages dropped in the queue.

First, your application can post messages directly to SQS, there is no need to first insert the message in MySQL and have a separate daemon to feed the queue.

Secondly, you can write an AWS Lambda function in PHP, check https://aws.amazon.com/blogs/apn/aws-lambda-custom-runtime-for-php-a-practical-example/

Thirdly, I would wire the Lambda function to the queue, following this documentation : https://aws.amazon.com/blogs/apn/aws-lambda-custom-runtime-for-php-a-practical-example/

This will simplify your architecture (less moving parts, less code) and make it more scalable.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sébastien Stormacq