запуск запланированной задачи в AWS без cron


В настоящее время у меня есть один сервер в amazon, где я положил все мои cronjobs. Я хочу устранить эту единственную точку сбоя и выставить все мои задачи как веб-службы. Я хотел бы предоставить службы за VPC ELB нескольким серверам, которые будут запускать задачи при вызове.

есть ли какой-то сервис, который предлагает Amazon (AWS), который может запускать повторяющееся задание (действительно вызывать веб-сервис) через запланированные интервалы? Я бы очень хотел иметь возможность сохранить функциональность cron с точки зрения спецификация времени / дня, но выделите HA драйвера (вещь, которая вызывает конечные точки в нужное время) в AWS.

Мне нравится, как SQS предлагает веб-конечные точки, но из того, что я могу сказать, вы не можете запланировать их. SWF, похоже, тоже не подходит.

9 55

9 ответов:

AWS объявил поддержка запланированных функций в Lambda на конференции 2015 re:Invent. С помощью этой функции пользователи могут выполнять лямбда-функции по расписанию, используя cron-подобный синтаксис. Элемент лямбда-документы показывают пример использования Python для выполнения запланированных мероприятий.

В настоящее время минимальное разрешение, с которым может работать запланированная лямбда, составляет 1 минуту (то же самое, что и cron, но не такое мелкозернистое, как таймеры systemd).

в Lambder проект помогает упростить использование запланированных функций на лямбда.

λ пример cron Гордона имеет, пожалуй, самый простой интерфейс для развертывания запланированных лямбда-функции.


оригинальный ответ, сохраненный для потомков.

Как заявил Эрик Хаммонд и другие, нет собственного сервиса AWS для запланированных задач. Есть только обходные пути и половина решений, как указано в других ответах.

чтобы повторить текущие параметры:

  • группа автомасштабирования одного экземпляра, которая запускается и останавливается по расписанию, как описано Эриком Хаммондом.
  • С помощью простого таймера службы рабочего процесса, что совсем не интуитивно. Это case study упоминает, что JPL использовал SWF для создания распределенного cron, но нет никаких деталей реализации. Существует также ссылка на пример кода похоронен в SWF-коде образцы.
  • запустить его самостоятельно, используя что-то вроде cronlock.
  • использовать что-то вроде ненадежные городские часы (UTC) для запуска лямбда-функций по расписанию. Помните, что лямбда в настоящее время не может получить доступ к ресурсам в VPC

надеюсь, что лучшее решение придет в ближайшее время.

есть ли какой-то сервис, который предлагает Amazon (AWS), который может запускать повторяющиеся задания с запланированными интервалами?

Это одна из немногих точек сбоя, которые люди (включая меня) постоянно упоминают при проектировании архитектур с AWS. Пока Amazon не решит это с помощью сервиса, вот хак, который я опубликовал, который активно используется некоторыми компаниями.

сервис AWS автоматического масштабирования может работать и завершить экземпляров, используя повторяющуюся графику, указанному в формат cron.

http://docs.amazonwebservices.com/AutoScaling/latest/APIReference/API_PutScheduledUpdateGroupAction.html

вы можете иметь экземпляр автоматически запустить процесс при запуске.

Если вы не знаете, как долго будет длиться задание, вы можете настроить все так, чтобы ваше задание завершило экземпляр после его завершения.

вот статья, которую я написал, что проходит через точные команды, необходимые для установки этого вверх:

запуск экземпляров EC2 по повторяющемуся расписанию с автоматическим масштабированием
http://alestic.com/2011/11/ec2-schedule-instance

запуск целого экземпляра только для запуска набора заданий кажется немного излишним, но если это t1.микро, тогда это стоит всего пару копеек.

Это t1.микро также не должен выполнять фактическую работу. Ваш экземпляр может вводить сообщения в SQS или через SNS, чтобы другой избыточные серверы подбирают задачи.

вводим события в AWS Cloudwatch

вы можете планировать по минутам, часам, дням или использовать выражение CRON с помощью консоли и без лямбда или любого программирования.

Я только что запланировал мой ASP.net веб-API (HTTP Post) с помощью SNS http endpoint для выполнения каждую минуту, и он работает отлично.

enter image description here

это размещенный сторонний сайт, который может регулярно вызывать запланированные сценарии в вашем домене.

Это не будет работать, если вам нужен сценарий для запуска в оболочке, а не как Apache.

похоже, это может быть полезно для вас: http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-using-task-runner.html

Task Runner - это приложение агента задач, которое опрашивает конвейер данных AWS для запланированных задач и выполнения их на инстансах Amazon EC2, Amazon Кластеры Эми или другие вычислительные ресурсы, сообщающие статус как он так и есть. В зависимости от вашего приложения, вы можете:

  • разрешить AWS Data Pipeline устанавливать и управлять одним или несколькими бегунами задач приложения для вас на вычислительных ресурсах, которыми он управляет автоматически. В этом случае вам не нужно устанавливать или настраивать Бегун задач, как описано в этом разделе. Это рекомендуется конфигурация.

  • ручная установка и настройка Task Runner на вычислительном ресурсе например, давно работающий экземпляр EC2 или физический сервер. Так поступать, использовать процедуры в этом разделе.

  • разработка и установка пользовательского агента задач вместо Task Runner. Этот процедуры для этого будут зависеть от осуществления пользовательский агент задач.

Amazon представила лямбда в прошлом году для NodeJS, Amazon добавил функции запланированные функции, поддержка VPC и поддержка Python.

используя запланированную функцию-правильная замена для CRON может быть достигнута.

подробнее -http://aws.amazon.com/lambda/details/

enter image description here

похоже, это относительно новая опция от AWS BeanStalk:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features-managing-env-tiers.html#worker-periodictasks

в основном, они действуют как обычные приемники SQS, но они вызываются по расписанию cron Вместо ответа на сообщение SQS.

SWF-это веб-сервис от AWS, который можно использовать для планирования задач. Большая часть работы заключается в определении того, что такое задача и расписание.

http://milindparikh.blogspot.com/2015/07/introducing-diksha-aws-lambda-function.html является масштабируемым планировщиком, написанным против SWF.

AWS Elastic Load Balancers будет пинговать ваши экземпляры, чтобы проверить, что они здоровы. Вы можете добавить свои cron-подобные задачи в скрипт, который запускает ELB, и он будет выполняться очень регулярно.

вы хотите добавить некоторую логику, чтобы каждая задача выполнялась нужное количество раз и с правильным интервалом, но это может быть выполнено с помощью таблицы базы данных, которая отслеживает выполнение. Каждый раз, когда ELB пингует ваш сервер, ваш сервер будет проверять базу данных, чтобы увидеть, если любое задание находится в ожидании, а затем выполнить это задание.

ELB будет тайм-аут, если сценарий занимает слишком много времени для выполнения, поэтому важно не создавать ситуацию, когда ваша проверка работоспособности ELB займет много секунд для обработки задач cron. Чтобы преодолеть это, вы можете использовать сервис AWS Simple Notification. Сценарий проверки работоспособности ELB может просто опубликовать сообщение в разделе SNS, а затем этот раздел может доставить сообщение через HTTP-запрос на ваш веб-сервер.

In другие слова: ELB пингует ваш экземпляр EC2... Экземпляр EC2 проверяет наличие отложенных заданий и отправляет сообщение в SNS, если они найдены... SNS уведомляет ваше приложение через HTTP... HTTP-вызов из SNS-это то, что на самом деле обрабатывает задание cron