AWS लाम्बा अनुसूचित कार्य


145

अमेज़न ने AWS लैंबडा ( http://aws.amazon.com/lambda/ ) की घोषणा की ।

उत्पाद विवरण में शामिल हैं:

निर्धारित कार्य

AWS लैंबडा कार्यों को बाहरी ईवेंट टाइमर द्वारा ट्रिगर किया जा सकता है, इसलिए नियमित रूप से निर्धारित रखरखाव समय या गैर-पीक घंटों के दौरान फ़ंक्शंस चलाए जा सकते हैं। उदाहरण के लिए, आप गैर-व्यस्त घंटों के दौरान रात के संग्रह की सफाई करने के लिए AWS लैम्बडा फ़ंक्शन को ट्रिगर कर सकते हैं।

जब मैंने इसे पढ़ा, तो मुझे लगा कि मैं अंततः "क्रोन-जैसे" कार्यों को करने का एक तरीका हो सकता है। मैं रोज 5PM पर एक विशिष्ट क्वेरी चलाना चाहता हूं।

हालाँकि मुझे यह कहीं भी प्रलेखन में नहीं मिलता है। वे केवल प्रोग्राम संबंधी घटनाओं, या अन्य AWS सेवाओं की घटनाओं पर ट्रिगर का उल्लेख करते हैं।

क्या मुझे गलतफहमी हुई? या कोई मुझे दस्तावेज की ओर इशारा कर सकता है?

जवाबों:


159

अनुसूचित घटनाओं के लिए मूल समर्थन 8 अक्टूबर, 2015 को जोड़ा गया:

जैसा कि इस एडब्ल्यूएस ब्लॉग पोस्ट में घोषणा की गई है , शेड्यूलिंग को अब एक इवेंट स्रोत प्रकार (जिसे ट्रिगर्स भी कहा जाता है) के रूप में " क्लाउडवॉच इवेंट्स - शेड्यूल " के रूप में समर्थित है , और एक दर या क्रोन अभिव्यक्ति के रूप में व्यक्त किया जा सकता है।

शेड्यूल किए गए ईवेंट को एक नए मेमने में जोड़ें

निर्माण के 'ट्रिगर कॉन्फ़िगर करें' चरण पर जाएं, और 'क्लाउडवॉच इवेंट - शेड्यूल' ट्रिगर निर्दिष्ट करें। उदाहरण के नीचे विन्यास:

वह छवि जो 5:00 यूटीसी पर एक निर्धारित कार्यक्रम बनाने के लिए कॉन्फ़िगरेशन दिखाती है।

किसी मौजूदा लंबू में शेड्यूल्ड ईवेंट जोड़ें

अपने लंबो के 'ट्रिगर' टैब पर नेविगेट करें, 'ट्रिगर जोड़ें' चुनें, और 'क्लाउडवॉच इवेंट - शेड्यूल' ट्रिगर निर्दिष्ट करें। उदाहरण स्क्रीनशॉट जहाँ मेरे पास SNS ट्रिगर के साथ एक मौजूदा लैम्ब्डा है:

ऐसी छवि जो लैम्ब्डा कंसोल से ट्रिगर यूआई जोड़ने के लिए नेविगेट करने का तरीका दिखाती है।

एक बार लोड होने के बाद, यूआई इस ट्रिगर को कॉन्फ़िगर करने के लिए ऊपर दिए गए "शेड्यूल ईवेंट को नए लैम्ब्डा में जोड़ें" खंड के स्क्रीनशॉट के समान है।

विचार-विमर्श

अपने उदाहरण के मामले में, आप cron()इसके बजाय उपयोग करना चाहते हैं rate()। लंबोदर में क्रोन अभिव्यक्तियों को सभी क्षेत्रों की आवश्यकता होती है और उन्हें यूटीसी में व्यक्त किया जाता है। इसलिए प्रतिदिन शाम 5 बजे (UTC) फंक्शन चलाने के लिए, निम्नलिखित क्रोन एक्सप्रेशन का उपयोग करें:

cron(0 17 * * ? *)

आगे के संसाधन

टिप्पणियाँ

  • इस ईवेंट प्रकार का नाम "शेड्यूल किए गए इवेंट" से "क्लाउडवॉच इवेंट्स - शेड्यूल" में बदल गया है क्योंकि यह सुविधा पहली बार जारी की गई थी।
  • इस सुविधा के जारी होने से पहले, इस मुद्दे का अनुशंसित समाधान ( 42min 50secs पर "एडब्ल्यूएस लैम्बडा के साथ शुरू करना" ) एक टाइमर बनाने के लिए, या एक बाहरी एप्लिकेशन के साथ टाइमर बनाने के लिए SWF का उपयोग करना था ।
  • अनुसूचित घटना ब्लॉग पोस्ट के आने के बाद से लैंबडा यूआई को ओवरहाल किया गया है, और भीतर स्क्रीनशॉट अब सटीक नहीं हैं। नवीनतम संशोधन के लिए 3/10/2017 से ऊपर मेरे अपडेट किए गए स्क्रीनशॉट देखें।

क्या आपको पता है कि 1 मिनट के सटीक समर्थन की उम्मीद है?
कप्पन

2
यह हैक का एक सा है, लेकिन आप इसे 1 मिनट की आवृत्ति youtube.com/watch?v=FhJxTIq81AU
ingh.am

4
इवेंट स्रोत प्रकार अब "क्लाउडवॉच इवेंट्स - शेड्यूल" है
गाय

@GuyDaher धन्यवाद, मैंने तदनुसार अपना उत्तर अपडेट किया है।
एंथोनी नेबीस

3
यह अब 1min दर का समर्थन करता है। docs.aws.amazon.com/lambda/latest/dg/…
advncd

18

इस पोस्ट के समय के बाद से, एक और समाधान में तेजी आई है: शेड्यूल किए गए AWS लैम्बडा इनवॉक्शंस विथ द अनट्रिजेबल टाउन क्लॉक (UTC) को शेड्यूल करें जिसमें लेखक SNS विषय Unreliable Town Clock की सदस्यता लेने का प्रस्ताव रखता है । मैंने एसडब्ल्यूएफ और एसएनएस का न तो उपयोग किया है, लेकिन यह मुझे लगता है कि एसएनएस समाधान सरल है। यहाँ लेख से एक अंश है

अविश्वसनीय टाउन क्लॉक (UTC)

अविश्वसनीय टाउन क्लॉक (UTC) एक नया, मुफ्त, सार्वजनिक एसएनएस टॉपिक (अमेज़न सिंपल नोटिफिकेशन सर्विस) है जो सभी ग्राहकों को हर तिमाही में एक "झंकार" संदेश प्रसारित करता है। यह AWS लाम्बा कार्यों, SQS कतारों और ईमेल पतों पर झंकार भेज सकता है।

आप अपने कोड को हर पंद्रह मिनट चलाने के लिए झंकार विशेषताओं का उपयोग कर सकते हैं, या केवल एक घंटे में एक बार अपना कोड चला सकते हैं (जैसे, मिनट == "00") या दिन में एक बार (जैसे, जब घंटे == "00" और मिनट = = "00") या अंतराल की कोई अन्य श्रृंखला।

आप भविष्य में किसी विशिष्ट समय में केवल एक बार केवल एक बार चलने के लिए इच्छित फ़ंक्शन की सदस्यता ले सकते हैं: क्या यह फ़ंक्शन सभी इनवोकेशन को तब तक अनदेखा करता है जब तक कि यह उस समय के बाद नहीं हो जाता जब तक यह चाहता है। जब यह समय होता है, यह अपना काम कर सकता है, तो एसएनएस टॉपिक से खुद को अनसब्सक्राइब कर सकता है।

अपने कोड को अविश्वसनीय टाउन क्लॉक से जोड़ना तेज और आसान है। कोई आवेदन प्रक्रिया या खाता निर्माण की आवश्यकता नहीं है


9
अब कोई मान्य उत्तर नहीं। अविश्वसनीय टाउन क्लॉक अब उपलब्ध नहीं है
ब्लूज़किन

15

नई समाधान: लम्बा अनुसूचित नौकरियां

वर्नर वोगेल ने आज रात फिर से (10/08) की घोषणा की: आविष्कार किया कि AWS लाम्बा के पास अब अपना खुद का शेड्यूलर है।

2015-10-08 को AWS लैंबडा रिलीज नोट देखें :

आप AWS लाम्बा कंसोल का उपयोग करके अपने कोड को नियमित, अनुसूचित आधार पर लागू करने के लिए AWS लैम्ब्डा भी सेट कर सकते हैं। आप एक निश्चित दर (घंटे, दिन या सप्ताह की संख्या) निर्दिष्ट कर सकते हैं या आप एक क्रोन अभिव्यक्ति निर्दिष्ट कर सकते हैं। एक उदाहरण के लिए, वॉकथ्रू 5 देखें : लैम्बडा फंक्शन्स का उपयोग करके प्रोसेस शेड्यूल किए गए इवेंट (पायथन)


OLD समाधान: AWS डेटा पाइपलाइन के साथ निर्धारण

किसी कार्य को दिए गए समय के साथ शेड्यूल करने के लिए आप AWS डेटा पाइपलाइन का उपयोग कर सकते हैं । जब आप अपने पाइपलाइन को ShellCommandActivity के साथ कॉन्फ़िगर करते हैं तो कार्रवाई किसी भी कमांड हो सकती है

आप उदाहरण के लिए AWS CLI कमांड चला सकते हैं:

  • SQS को संदेश दें
  • या सीधे एक लैम्ब्डा फ़ंक्शन को लागू करें (देखें )

आप AWS कंसोल के भीतर सीधे AWS डेटा पाइपलाइन शेड्यूल किए गए कार्य को बना सकते हैं (जैसे AWS CLI कमांड के साथ):

यहां छवि विवरण दर्ज करें

आप अपने शेड्यूलिंग को परिभाषित करने के लिए एपीआई का उपयोग भी कर सकते हैं :

{
 "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 अलार्म बनाएं: लगभग 1 मिनट के लिए लगभग> अदृश्य> अदृश्य

  • सदस्यता लें एसएनएस विषय अलार्म के लिए
  • सदस्यता लें एसएनएस टॉपिक के लिए लैम्ब्डा

अब आपके पास लगभग 15 मिनट के संकल्प के साथ एक टाइमर है।

फिर अन्य लैंबडा कार्यों को एसएनएस टॉपिक के लिए सब्सक्राइब किया जाता है और हर 15 मिनट में बुलाया जाता है।


4
यह उत्तर मूल रूप से एक तंत्र के लिए निर्देश है जो Shadi के उत्तर में वर्णित अविश्वसनीय टाउन क्लॉक को लागू कर सकता है । यह देखते हुए कि यूटीसी के लेखक ने चेतावनी दी है कि यह "किसी भी समय चेतावनी के बिना गायब हो सकता है", आपका दृष्टिकोण शायद कहीं बेहतर है।
ब्रायन

पहला कार्यान्वयन - 1 संदेश - कुछ दिनों के काम करता है और रुक जाता है। ऐसा लगता है कि समय-समय पर संदेश सिर्फ SQS को नहीं दिया जाता है। 2 और संदेश जोड़े गए (3 योग में) - अब यह सप्ताह में पहले से ही काम करता है। क्लाउडवॉच में मुझे समय-समय पर मिसेज दिखाई देती हैं - सिर्फ 2 संदेश दिए गए, फिर भी टाइमर ठीक टिकता है। Gist को gist.github.com/mikeplavsky/5ffe7e33e0d70a248537
Maplpro

@ ब्रायन अविश्वसनीय टाउन क्लॉक ( townclock.io ) के लेखक के रूप में मैं इस बात से सहमत हूं कि अपना खुद का चलाने से आपको कुछ अजनबी (मुझ पर) से अधिक नियंत्रण मिलता है। वास्तव में, मैं लोगों को अपनी अविश्वसनीय टाउन क्लॉक चलाने के लिए प्रोत्साहित करता हूं और GitHub पर स्रोत प्रकाशित किया है: github.com/alestic/alestic-unreliable-town-clock
Eric Hammond

4

के बाद से यह अब आसानी से संभव HTTP पर ट्रिगर लैम्ब्डा कार्यों के लिए (जैसे GET या कर्ल का प्रयोग करके) एक सरल उपाय है easycron की तरह एक कामयाब क्रॉन उपयोग करने के लिए: https://www.easycron.com/ चल में अपने लैम्ब्डा समारोह को गति प्रदान करने।

हमारे पास एक ही समस्या थी और उसने CRON जॉब में अधिक लचीलेपन और जटिलता के लिए अनुमति देने के बाद से अजगर में Google App Engine पर क्रोन सेवा चलाना समाप्त कर दिया।


समय बदल गया है और लैम्ब्डा अब बाहर बॉक्स क्रॉन प्रकार समय-निर्धारण का समर्थन docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
एक प्रकार की कटार कॉनरोड Coetsee

2

फ़ंक्शन पेज में, ट्रिगर जोड़ें, आप क्लाउडवॉच ईवेंट जोड़ सकते हैं, और इसे शेड्यूल प्रकार के रूप में बना सकते हैं

यहां छवि विवरण दर्ज करें


1

आप इसे क्लाउडवॉच इवेंट्स के साथ भी शेड्यूल कर सकते हैं। नियम बनाएं -> लक्ष्य (लैम्ब्डा) संलग्न करें और अपने नियम पर क्रोन / दर वार निर्धारित करें।


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

विशेष समय अंतराल के लिए लैम्ब्डा में अपनी क्वेरी को चलाने का सरल तरीका आपके लैम्बडा फ़ंक्शन के लिए नियम निर्धारित करना है। इसके लिए लैंबडा फंक्शन बनाने के बाद क्लाउडवाच >> रूल्स >> शेड्यूल पर जाएं। और क्रोन एक्सप्रेशन को परिभाषित करें और लक्ष्य खंड में लैम्बडा फ़ंक्शन का चयन करें जिसे आप ट्रिगर करना चाहते हैं।


0

लैंबडा फंक्शन बनाते समय ट्रिगर "क्लाउडवेच इवेंट्स - शेड्यूल" बनाएं

अब आप या तो AWS प्रीसेट को शेड्यूल एक्सप्रेशन जैसे = 15 मिनट में उपयोग कर सकते हैं या आप क्रोन एक्सप्रेशन का उपयोग कर सकते हैं।

यहां छवि विवरण दर्ज करें

आपकी आवश्यकता के लिए क्रोन अनुसूची "0 0 17 1/1 *? * है?"


-1

दीक्षा AWS टीम द्वारा अनुशंसित AWS SWF ट्रिगर पर आधारित AWS लैम्ब्डा शेड्यूलर है । एक क्रोन एक्सप्रेशन का उपयोग करके नौकरियों को शेड्यूल कर सकता है और यह भी निर्दिष्ट कर सकता है कि आप कितने समय चलना चाहते हैं, कब शुरू करना है या कब समाप्त करना है। आप स्थिति और साथ ही अनुसूचित नौकरियों के इतिहास को देख सकते हैं। सुरक्षा का प्रबंधन AWS नीतियों द्वारा किया जाता है।

एक बार जब आप दीक्षा इंजन सेट करते हैं, तो आप निम्नलिखित तरीके से क्रोन एक्सप्रेशन का उपयोग करके फ़ंक्शंस को शेड्यूल कर सकते हैं:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.