Наконец-то я нашел решение своей проблемы.
Мы не можем масштабировать фоновые задания так, как я хочу. Мне потребовалось посмотреть на решение с совершенно другой точки зрения.
Идеальное решение моей проблемы состоит в том, что я должен генерировать сообщения SQS (с полезной нагрузкой, описывающей идентификатор арендатора, задание должно быть выполнено и любые дополнительные параметры), соответствующие количеству арендаторов за установленный интервал и поставь в очередь
Например, если у меня 100 арендаторов и я хочу запускать «Задание 1» каждый раз, основное приложение будет генерировать 100 сообщений SQS и помещать их в определенную очередь SQS каждый час. Он будет делать то же самое для всех 15 различных заданий, которые у меня есть на каждого арендатора.
С другой стороны, масштабируемая AWS лямбда-функция, прослушивающая очередь SQS, подберет полезную нагрузку и выполнит намеченную задачу на основе данные переносятся полезной нагрузкой.
Но, к сожалению, мой опыт заключается в технологии PHP / Laravel, которой пока нет в стеке AWS Lambda. Поэтому я нашел обходной путь следующим образом.
Я создал Docker изображение с помощью своего приложения PHP / Laravel и поместил его в Amazon ECS (контейнерная служба EC2). Тем не менее, у меня есть функция AWS Lambda, но на этот раз она действует как триггер для моих docker контейнеров. Лямбда выбирает сообщение SQS, обрабатывает полезную нагрузку и порождает контейнер Docker в ECS на основе моего Docker образа. Я получил некоторые идеи из следующей статьи, чтобы прийти к этому решению.
https://aws.amazon.com/blogs/compute/better-together-amazon-ecs-and-aws-lambda/