У меня есть набор внешних сервисов, которые я хочу непрерывно опрашивать через короткие интервалы (около 30 секунд) из AWS. Например, у меня есть набор репозиториев git, которые я хочу опросить на предмет изменений для запуска конвейеров ci.
Мои требования:
Каким будет рентабельный способ реализовать это в AWS?
Очевидный подход - запустить набор экземпляров ec2 (возможно, 1 на каждые 100 сервисов, которые я хочу опросить) и распределить сервисы между ними. Для самовосстановления одним из подходов может быть группа автомасштабирования.
Но для этого каждый экземпляр в автомасштабировании будет знать, за какие службы он отвечает, а это значит, что каждому экземпляру потребуется уникальный идентификатор, который он может восстановить после перезапуска. Из Вот Я читал, что это не очень хорошая практика.
Каков ваш реальный вариант использования? Вы привели пример мониторинга репозиториев git, но решение может быть другим, если это не то, что вы на самом деле делаете.
Бессерверный
Это звучит как пример использования из учебника для использования вычислений Lambda / Serverless. Это вариант для вас?
От себя
Оттолкнитесь от того, что получает изменение к вам много более эффективен, чем опрос (как указывает MLu;)). Если ваша рабочая нагрузка действительно отслеживает репозитории git (вы привели это в качестве примера), они могут подтолкнуть вас, когда что-то изменится. Я не знаю, сможете ли вы сделать это, если у вас нет репо, но об этом определенно стоит подумать.
Отправка в очередь SQS с помощью другого механизма, такого как лямбда или экземпляр EC2, была бы дешевой и надежной.
Параметры EC2
Если вам необходимо использовать экземпляры EC2, я могу придумать несколько вариантов
EC2 Вариант 1
Издатель, который помещает необходимые чеки в очередь. Небольшой EC2 / Lambda, запускаемый событиями CloudWatch
Группа потребителей с автомасштабированием, масштабируемая в зависимости от количества сообщений в очереди.
Обратной стороной этого является стоимость. 5000 проверок каждые 30 секунд - это 14,4 млн сообщений в день, что составляет 5,36 доллара США по тарифам SQS. Если вы разделите их на группы по 10 человек, это будет 50 центов в день. Похоже, что создание собственной очереди на экземпляре t3a.nano может быть дешевле, но тогда вам придется настроить ее и управлять ею.
EC2 Вариант второй
Аналогично описанному выше, но сохраните необходимые задания в DynamoDB и попросите серверы опрашивать задания. Было бы сложнее настроить, в основном используя БД как очередь.
EC2 Вариант третий
Вы можете хранить проверки, которые нужно выполнять, в S3, а лямбда-функция отслеживает изменения объекта / файла. Когда это происходит, лямбда разделяет задания и обновляет конфигурации ваших рабочих.
Есть много других решений, возможно, лучше, чем эти, но это несколько идей без особых размышлений.
Легкий чекер / издатель отправка в очередь и куча потребители / работники как предлагает @Tim, это правильный шаблон для этого.
Однако, если вы действительно хотите запустить CI / CD из GIT, подумайте о настройке пост-приемный крючок в репозиториях - это будет намного менее ресурсоемко.
Также большинство сервисов репозитория GIT, таких как GitHub, GitLab или Bitbucket, публикуют ленту последних изменений, RSS или аналогичные. Вместо проверки тысяч репозиториев git с помощью git something ...
каждые 30 секунд выполняйте один HTTP-запрос для получения последние изменения в ленте.
Надеюсь, это поможет :)