> You can create a Lambda function and direct AWS Lambda to execute it on a regular schedule. You can specify a fixed rate (for example, execute a Lambda function every hour or 15 minutes), or you can specify a Cron expression.
It would remove the need of infrastructure for "task workers". Although, depending on your stack / setup, it of course may be easier to have your application tier double as a task worker due to complicated dependencies or startup times.
Additionally, I am not sure if everyone is aware but SQS does offer FIFO delivery with guaranteed once-only "processing". There are some interesting caveats to this, definitely worth looking into though :)
AWS Lambda has a limitation on the number of functions you can attach to a scheduled event. What this means is that you wind up with a shitload of 'every 5 minutes' schedulers that all need unique names. WTF Amazon?
I've used SQS for a simple job queue before. It works well and it's nice not to have to worry about more infrastructure. To make things even better, Celery now has an SQS broker, which I'd like to try out.
I've also had success with an HTTP subscription in SNS for simple async jobs. Having your tasks be just another HTTP endpoint is really convenient. It's not actually a task queue, but it's often a good-enough substitute.
One frustration I've had with it is that Amazon signs SNS messages, but I can't find a Python library for validating the signature. Not even AWS's flagship API client (boto3) has the functionality.
Something similar, and perhaps even simpler: Make a few SNS topics that lambdas can subscribe to - either one per method or one per method type, and then filter more in code - and push notifications to those from your service layer as needed to invoke async workflows. I've been doing this recently and it's pretty pain-free.
Been meaning to look at Step Functions for a lot of this async work stuff, but haven't had time yet (plus it's nice to let these things mature a bit before diving in).
> You can create a Lambda function and direct AWS Lambda to execute it on a regular schedule. You can specify a fixed rate (for example, execute a Lambda function every hour or 15 minutes), or you can specify a Cron expression.
http://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-e...
It would remove the need of infrastructure for "task workers". Although, depending on your stack / setup, it of course may be easier to have your application tier double as a task worker due to complicated dependencies or startup times.
Additionally, I am not sure if everyone is aware but SQS does offer FIFO delivery with guaranteed once-only "processing". There are some interesting caveats to this, definitely worth looking into though :)