I'm using Vapor so that we can auto-scale our queues as necessary. As such, it's my understanding that functionality is limited to Amazon SQS?
Yes, Vapor runs your applications on AWS Lambda and configures SQS to manage your queues.
I need to rate limit a queue based on how many jobs 1 user has in a queue (i.e. they have a total of 40 jobs, but we process 2 at a time). Is there an efficient way to do so without switching to Redis? If I do so, would I lose the power of Vapor's auto-scale for queues?
No, "auto scaling" of the Vapor is defined a bit differently. When new jobs are pushed to the queue, SQS will simply pick it up from the queue and run the job. The way it autoscales is that if 1000 jobs get pushed to the queue at the same time, SQS will pick up all of them and run all those jobs.
Rate limiting is done from within your application logic (job middleware, for instance). Your user pushes 40 jobs to the queue, all of them will run, but only 2 of them will not be rate limited. Others will be released back onto the queue, or discarded -- whatever you ned. You may just use Redis for rate limiting, as defined in the docs (but you need to have a Redis cache). If Redis cluster is too expensive for you, you may simply rate limit via the database (increment the number of jobs this user currently has).
All those jobs will still run, but will be rate limited for the user.