Подтвердить что ты не робот

Запустить запланированное задание в AWS без cron

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

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

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

4b9b3361

Ответ 1

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

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

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

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


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

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

Чтобы отобразить текущие параметры:

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

Надеюсь, лучшее решение скоро придет.

Ответ 2

Есть ли какая-то услуга, предлагаемая 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

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

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

Ответ 3

Представляем События в AWS Cloudwatch

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

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

введите описание изображения здесь

Ответ 5

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

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

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

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

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

Ответ 6

Amazon ввел в прошлом году Lambda для NodeJS, . Amazon добавила функции "Запланированные функции", "Поддержка VPC" и "Поддержка Python".

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

Дополнительная информация - http://aws.amazon.com/lambda/details/

введите описание изображения здесь

Ответ 8

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

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

Ответ 9

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

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

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

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