Назначенные задачи AWMS Lambda

Amazon объявила AWS Lambda (http://aws.amazon.com/lambda/).

Описание продукта включает в себя:

Запланированные задания

Функция AWS Lambda может быть вызвана внешними таймерами событий, поэтому функции могут выполняться во время регулярного запланированного времени обслуживания или непиковые часы. Например, вы можете вызвать функцию AWS Lambda для выполнять очистку в ночное время архивирования в нерабочее время.

Когда я прочитал это, я понял, что мог бы, наконец, иметь способ последовательно выполнять "cron-like" задачи. Я хочу запустить конкретный запрос каждый день на 5PM, пусть скажет.

Однако я не нашел это нигде в документации. Они упоминают только триггеры программных событий или события других служб AWS.

Я неправильно понял? Или может кто-нибудь указать мне на документацию?

Ответ 1

Встроенная поддержка запланированных событий добавлена ​​8 октября 2015 года:

Как было объявлено в этом блоге AWS, планирование теперь поддерживается как тип источника событий (также называемый триггерами), называемый " CloudWatch Events - Schedule", и может быть выражен как скорость или выражение cron.

Добавить запланированное событие в новую lambda

Перейдите к шагу создания настраиваемых триггеров и укажите триггер "EventWatch Event - Schedule". Пример конфигурации ниже:

Изображение, отображающее конфигурацию для создания запланированного события в 5 вечера по UTC.

Добавить запланированное событие в существующую лямбда

Перейдите на вкладку "Триггеры" вашей лямбды, выберите "Добавить триггер" и укажите триггер "Событие EventWatch-Schedule". Пример скриншота, где у меня есть существующая лямбда с триггером SNS:

Изображение, показывающее, как перемещаться, чтобы добавить триггерный интерфейс от Lambda console.

После загрузки пользовательский интерфейс для настройки этого триггера идентичен снимку экрана выше в разделе "Добавить запланированное событие в новую лямбду" выше.

Обсуждение

В примере вашего примера вы можете использовать cron() вместо rate(). Выражения Cron в lambda требуют всех полей и выражаются в UTC. Поэтому для запуска функции каждый день в 17:00 (UTC) используйте следующее выражение cron:

cron(0 17 * * ? *)

Дополнительные ресурсы

Примечания

  • Название этого типа события изменилось с "Запланированное событие" на "События CloudWatch-Schedule", поскольку эта функция была впервые выпущена.
  • Перед выпуском этой функции рекомендуемое решение этой проблемы (за "Начало работы с AWS Lambda" в 42 минуты 50 секунд) было использовать SWF для создания таймера или создать таймер с внешним приложением.
  • Пользовательский интерфейс Lambda был пересмотрен с момента публикации запланированного сообщения в блоге событий, а скриншоты внутри уже не точны. См. Мои обновленные скриншоты выше от 3/10/2017 для последних версий.

Ответ 2

Со времени этого сообщения, похоже, появилось еще одно решение: Расписание повторных AWS Lambda Invocation с ненадежными городскими часами (UTC), в которых автор предлагает подписываясь на тему SNS Ненадежные городские часы. Я не использовал ни SWF, ни SNS, но мне кажется, что решение SNS проще. Здесь выдержка из статьи

Ненадежные городские часы (UTC)

Ненадежные городские часы (UTC) - это новая, свободная, публичная тема SNS (Amazon Simple Notification Service), которая транслирует сообщение "звонок" каждый четверть часа всем подписчикам. Он может отправлять куранты в AWS Лямбда-функции, очереди SQS и адреса электронной почты.

Вы можете использовать атрибуты chime для запуска своего кода каждые пятнадцать минут или только запускать код один раз в час (например, когда минута == "00" ) или один раз в день (например, когда час == "00" и минута == "00" ) или любая другая серия интервалов.

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

Подключение вашего кода к ненадежным городским часам выполняется быстро и просто. нет требуется процесс создания заявки или создания учетной записи

Ответ 3

НОВОЕ РЕШЕНИЕ: Запланированные вакансии по лямбда

Вернер Фогель объявил сегодня вечером (10/08): Re: изобретать, что AWS Lambda теперь имеет собственный планировщик.

Se Заметка о выпуске AWS Lambda в 2015-10-08 гг.:

Вы также можете настроить AWS Lambda для вызова своего кода на регулярной, с использованием консоли AWS Lambda. Вы можете указать фиксированный (количество часов, дней или недель), или вы можете указать cron выражение. Например, см. Пошаговое руководство 5: Использование лямбда-функций для обработки запланированных событий (Python).


СТАРЫЙ РЕШЕНИЕ: Планирование с использованием трубопровода данных AWS

Вы можете использовать AWS Data Pipeline для schedule задачу с заданным периодом. Действие может быть любой командой, когда вы настраиваете свой трубопровод с помощью ShellCommandActivity.

Вы можете, например, запустить команду AWS CLI для:

  • Поместить сообщение в SQS
  • или непосредственно вызывать функцию лямбда (см. invoke)

Вы можете легко создать запланированную задачу AWS Data Pipeline непосредственно в консоли AWS (например, с помощью команды AWS CLI):

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

Вы также можете использовать API для определить ваше планирование:

{
 "pipelineId": "df-0937003356ZJEXAMPLE",
 "pipelineObjects": [
    {
      "id": "Schedule",
      "name": "Schedule",
      "fields": [
        { "key": "startDateTime", "stringValue": "2012-12-12T00:00:00" }, 
        { "key": "type", "stringValue": "Schedule" }, 
        { "key": "period", "stringValue": "1 hour" }, 
        { "key": "endDateTime", "stringValue": "2012-12-21T18:00:00"  }
       ]
     }, {
      "id": "DoSomething",
      "name": "DoSomething",
      "fields": [
        { "key": "type", "stringValue": "ShellCommandActivity" },
        { "key": "command", "stringValue": "echo hello" },
        { "key": "schedule", "refValue": "Schedule" }
      ]
    }
  ]
}

Limits: Минимальный интервал планирования составляет 15 минут.
Pricing: около $1,00 в месяц.

Ответ 4

Вот как я это делаю:

  • Создайте Лямбду, которая:

  • Создать CloudWatch Alarm для: ApproximateNumberOfMessagesVisible > 0 в течение 1 минуты

  • Подписка SNS Тема на тревогу
  • Подписка Lambda на тему SNS

Теперь у вас есть таймер с разрешением приблизительно 15 минут.

Затем другие функции Лямбды подписываются на тему SNS Topic и вызывают каждые 15 минут.

Ответ 5

Так как теперь легко возможно для запуска лямбда-функций через HTTP (например, с помощью GET или curl) простым решением является использование управляемого CRON как easycron: https://www.easycron.com/, чтобы запустить вашу лямбда-функцию.

У нас была такая же проблема, и в результате я работал на cron-сервисе в Google App Engine на python, так как это позволило повысить гибкость и сложность самой работы CRON.

Ответ 6

Вы также можете планировать его с помощью событий cloudWatch. Создайте правило → установите цель (лямбда) и настройте cron/rate мудрый график на вашем правиле.

Ответ 7

При создании лямбда-функции создайте триггер "События CloudWatch-Schedule"

Теперь вы можете использовать пресеты AWS в расписании, например rate = 15 min, или вы можете использовать выражение cron.

enter image description here

Для вашего требования Cron Schedule "0 0 17 1/1 *? *"

Ответ 8

Путь веб-консоли довольно прост. Просто создайте правило CloudWatch для лямбды и добавьте его на вкладку лямбда Triggers.

Для тех, кому необходимо автоматизировать это с помощью aws cli, мы можем

  • создайте функцию,
  • создать правило,
  • предоставить разрешение,
  • правило и функция ссылки

Создать функцию

aws lambda create-function --function-name ${FUNCTION-NAME} \
--runtime java8 \
--role 'arn:aws:iam::${Account}:role/${ROLE}' \
--handler org.yourCompany.LambdaApp \
--code '{"S3Bucket":"yourBucket", "S3Key": "RC/yourapp.jar"}' \
--description 'check hive connection' \
--timeout 180 \
--memory-size 384 \
--publish \
--vpc-config '{"SubnetIds": ["subnet-1d2e3435", "subnet-0df4547a"], "SecurityGroupIds": ["sg-cb17b1ae", "sg-0e7ae277"]}' \
--environment Variables={springEnv=dev}

Создать правила

## create
aws events put-rule --name ${ruleName} \
--schedule-expression 'rate(5 minutes)' \
--state ENABLED \
--description 'check hive connection'

# grant permission to the Rule to allow it to trigger the function
aws lambda add-permission --function-name ${functionName} \
--statement-id 123 \
--action 'lambda:InvokeFunction' \
--principal events.amazonaws.com \
--source-arn arn:aws:events:us-east-1:acc:rule/${ruleName}

# link rule and function
aws events put-targets --rule ${ruleName} \
--targets '[{"Id":"1", "Arn":"arn:aws:lambda:us-east-1:acc:function:RC-checkhive"}]'

Ответ 9

Дикша - это AWS Lambda Scheduler на основе AWS SWF Trigger, как рекомендовано AWS Team. Можно назначить задания с использованием выражений cron, а также указать, сколько времени вы хотите запустить, когда начинать или когда заканчивать. Вы можете просмотреть статус, а также историю запланированных заданий. Управление безопасностью осуществляется с помощью правил AWS.

Как только вы настроите движок diksha, вы можете планировать функции с использованием выражения cron следующим образом:

java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "jobName | functionName | context | 0 0-59 * * * * | 10"

В этом задании задание будет выполняться каждую минуту 10 раз. AWS SWF запускает функцию самостоятельно.

Подробности: https://github.com/milindparikh/diksha

Отказ от ответственности: я участвую в проекте.