Заплановані завдання AWS Lambda


145

Амазонка оголосила AWS Lambda ( http://aws.amazon.com/lambda/ ).

Опис товару включає:

Планові завдання

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

Коли я прочитав це, я зрозумів, що нарешті можу мати спосіб послідовно виконувати "кроноподібні" завдання. Скажімо, я хочу запускати конкретний запит щодня о 5:00.

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

Я неправильно зрозумів? Або хтось може вказати мені на документацію?

Відповіді:


159

Додана підтримка для запланованих заходів 8 жовтня 2015 року:

Як було оголошено в цій публікації блогу AWS , планування тепер підтримується як тип джерела подій (також званий тригерами) під назвою " CloudWatch Events - Schedule ", і може бути виражений як швидкість або вираз крона .

Додайте заплановану подію до нової лямбда

Перейдіть до кроку створення "Налаштувати тригери" та вкажіть тригер "CloudWatch Event - Schedule". Приклад конфігурації нижче:

Зображення, яке показує конфігурацію для створення запланованої події на 17:00 UTC.

Додайте заплановану подію до наявної лямбда

Перейдіть на вкладку "Тригери" вашої лямбда, виберіть "Додати тригер" та вкажіть тригер "CloudWatch подія - графік". Приклад знімка екрана, де у мене є існуюча лямбда з тригером SNS:

Зображення, яке показує, як переміщатися, щоб додати інтерфейс тригера з консолі Lambda.

Після завантаження користувальницький інтерфейс для налаштування цього тригера є ідентичним скріншоту у наведеному вище розділі "Додати заплановану подію до нової лямбда".

Обговорення

Для вашого прикладу ви хочете використовувати cron()замість rate(). Вирази крона в лямбда вимагають усіх полів і виражаються в UTC. Отже, щоб запускати функцію щодня о 17:00 (UTC), використовуйте такий вираз cron:

cron(0 17 * * ? *)

Подальші ресурси

Примітки

  • Назва цього типу події змінилася з "Запланованої події" на "Хмарні події - Розклад", оскільки ця функція була вперше випущена.
  • До випуску цієї функції рекомендованим рішенням цієї проблеми (у розділі "Початок роботи з AWS Lambda" в 42 хв. 50 секунд ) було використання SWF для створення таймера або створення таймера із зовнішнім додатком.
  • Користувальницький інтерфейс Lambda був капітально відремонтований з моменту виходу запланованої публікації в блозі події, а знімки екрана вже не точні. Дивіться мої оновлені скріншоти вище від 3.10.2017 для останніх змін.

чи знаєте ви, чи є надія на підтримку точності 1 хвилини?
каптан

2
Це трохи хак, але ви можете це зробити за 1 хв частоти youtube.com/watch?v=FhJxTIq81AU
ingh.am

4
Тип джерела події зараз "CloudWatch події - графік"
Гай Дахер

@GuyDaher Дякую, я відповідно оновив свою відповідь.
Ентоні Нічі

3
Зараз він підтримує швидкість 1 хв. docs.aws.amazon.com/lambda/latest/dg/…
advncd

18

З часу цієї публікації, схоже, виріс інше рішення: Розклад повторюваних запрошень AWS Lambda з ненадійним міським годинником (UTC), в якому автор пропонує підписатись на тему SNS Ненадійний міський годинник . Я не використовував ні SWF, ні SNS, але мені здається, що рішення SNS простіше. Ось уривок із статті

Ненадійний міський годинник (UTC)

Ненадійний міський годинник (UTC) - це нова, безкоштовна, загальнодоступна тема SNS (служба простого сповіщення Amazon), яка щоквартально щосекунтом передає всім абонентам повідомлення про «куранти». Він може надсилати куранти на функції AWS Lambda, черги SQS та електронні адреси.

Ви можете використовувати атрибути звуку для запуску коду кожні п’ятнадцять хвилин або виконувати код лише раз на годину (наприклад, коли хвилина == "00") або раз на день (наприклад, коли година == "00" і хвилина = = "00") або будь-який інший ряд інтервалів.

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

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


9
Більш неправдива відповідь. Ненадійний міський годинник більше не доступний
blueskin

15

НОВЕ РІШЕННЯ: Заплановані роботою Lambda

Вернер Фогель оголосив сьогодні ввечері (10/08) в re: Винайдіть, що AWS Lambda тепер має власний планувальник.

С.Є. AWS Lambda реліз примітка на 2015-10-08 :

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


СТАРИЙ РІШЕННЯ: Планування планування за допомогою трубопроводу даних AWS

Ви можете використовувати конвеєр даних AWS для планування завдання на заданий період. Дія може бути будь-якою командою, коли ви налаштовуєте свій Трубопровід за допомогою ShellCommandActivity .

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

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

Ви можете легко створити заплановану задачу 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" }
      ]
    }
  ]
}

Обмеження : Мінімальний інтервал планування - 15 хвилин.
Ціноутворення : Близько 1,00 долара на місяць.


9

Ось як я це роблю:

  • Створіть лямбда, який:

  • Створіть сигналізацію CloudWatch для: ПриблизнийNumberOfMessagesVisible> 0 протягом 1 хвилини

  • Підпишіться на тему SNS на тривогу
  • Підписатися на Lambda на тему SNS

Тепер у вас є таймер з роздільною здатністю приблизно 15 хвилин.

Потім інші функції лямбда підписуються на SNS Topic і дзвоняться кожні 15 хвилин.


4
Ця відповідь - це в основному інструкції щодо одного механізму, який може реалізувати ненадійний міський годинник, описаний у відповіді Шаді . Враховуючи, що автор UTC попереджає, що "може зникнути без попередження будь-коли", ваш підхід, мабуть, набагато вищий.
Брайан

Перша реалізація - 1 повідомлення - працює пару днів і зупиняється. Схоже, періодично повідомлення просто не надсилається до SQS. Додано ще 2 повідомлення (3 у сумі) - тепер це працює вже тиждень. У CloudWatch я бачу періодичні пропуски - лише 2 повідомлення, доставлені, все ще таймер працює. Gist було оновлено gist.github.com/mikeplavsky/5ffe7e33e0d70a248537
maplpro

@Brian Як автор Ненадійного міського годинника ( townclock.io ), я погодився б, що керування вашими власними силами дає вам більше контролю, ніж залежно від незнайомця (мене). Насправді я закликаю людей керувати власними міськими годинниками та опублікував джерело на GitHub: github.com/alestic/alestic-unreliable-town- hour
Ерік Хаммонд

4

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

У нас виникла та сама проблема, і в кінці запущено службу керування на Google App Engine в python, оскільки це дозволило досягти більшої гнучкості та складності в роботі CRON.


Часи змінилися, і тепер Ламбда підтримує планування типу хронів
Дірк Конрад Котзее

2

На сторінці функцій «Додати тригер» ви можете додати події CloudWatch і зробити це як тип розкладу

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


1

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


1

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

Для тих, хто потребує автоматизації цього aws cli, ми можемо

  1. створити функцію,
  2. створити правило,
  3. надати дозвіл,
  4. правило і функція зв'язку

Створити функцію

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"}]'

1

Простий спосіб запустити запит в лямбда на певний часовий інтервал - це встановити правило для вашої функції лямбда. для цього після створення функції лямбда перейдіть до cloudwatch >> правила >> розклад. і визначте вираз cron і в цільовому розділі виберіть функцію лямбда, яку потрібно запустити.


0

Під час створення функції лямбда створюйте тригер "Події CloudWatch - графік"

Тепер ви можете або використовувати пресети AWS у виразі розкладу, як rate = 15 хв, або ви можете використовувати вираз cron.

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

Для вашої вимоги Розклад Cron становить "0 0 17 1/1 *? *"


-1

Diksha - це AWS Lambda Scheduler на основі тригера AWS SWF, як рекомендує команда AWS . Можна запланувати завдання, використовуючи вирази cron, а також можна вказати, скільки часу потрібно запустити, коли запустити або коли закінчити. Ви можете переглянути статус, а також історію запланованих завдань. Безпекою керує політика AWS.

Після налаштування двигуна дикша ви можете планувати функції, використовуючи вираження cron, таким чином:

java -jar diksha-client-0.0.1.jar -lcfg cf1 -cj "jobName | functionName | контекст | 0 0-59 * * * * | 10"

У цій роботі робота буде виконуватися щохвилини по 10 разів. AWS SWF запустить функцію сам по собі.

Детальніше: https://github.com/milindparikh/diksha

Відмова: Я беру внесок у проект.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.