2016-11-02 5 views
9

मैं क्रोन शेड्यूल पर चलाने के लिए सर्वरलेस में लैम्ब्डा को तैनात करने की कोशिश कर रहा हूं जो हर घंटे इसे आमंत्रित करता है। जब इसे बुलाया जाता है, तो मैं चाहता हूं कि लैम्बडा के अंदर की घटना को क्रोन इवेंट की जानकारी के बजाय मेरे अपने JSON इनपुट द्वारा पॉप्युलेट किया जाए, जो इसे तैनात किए जाने पर डिफ़ॉल्ट इनपुट है।मैं सर्वर का उपयोग कर सर्वरलेस में तैनात लैम्बडा निर्धारित क्रोन में जेसन इनपुट कैसे पास करूं?

एडब्ल्यूएस कंसोल के अंदर, मैं लैम्बडा के लिए मैन्युअल रूप से क्रोन ट्रिगर में जा सकता हूं और परिणाम प्राप्त करने के लिए "मिलान किए गए ईवेंट" से "कॉन्स्टेंट (JSON टेक्स्ट)" में इनपुट बदल सकता हूं। चूंकि लैम्ब्डा को तैनात करते समय सर्वरलेस इस नियम को बनाता है, मुझे लगता है कि serverless.yml फ़ाइल में कॉन्फ़िगरेशन के माध्यम से इनपुट को बदलने का कोई तरीका होना चाहिए। सर्वर सर्वर के लिए दस्तावेज़ों के माध्यम से खोज करते समय मुझे कुछ भी नहीं मिला है, इसलिए अब मैं सोच रहा हूं कि सर्वर के माध्यम से यह वर्तमान स्थिति में संभव है, और यदि ऐसा है तो इसके बारे में कैसे जाना है।

किसी भी सलाह की सराहना की जाएगी।

संपादित करें: एक अद्यतन था जो इस कार्यक्षमता को जोड़ना चाहिए था, हालांकि मैं अभी भी सर्वर रहित 1.3.0 (और 1.2.0 के साथ परीक्षण किया गया है) का उपयोग कर JSON के साथ एक शेड्यूल के साथ तैनाती करने में सक्षम नहीं हूं। serverless.yml मैं प्रयोग किया जाता के कुछ उदाहरण नीचे दिए गए हैं:

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 

किसी 1.3.0 के रूप में Serverless में इस सुविधा की स्थिति पर टिप्पणी करने में सक्षम नहीं होगा, और चाहे या नहीं मेरी serverless.yml ऊपर ठीक लग रहा है ?

संपादित करें 2: काम कर रहे serverless.yml

functions: 
    test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
      rate: rate(10 minutes) 
      enabled: true 
      input: 
      key: value 
     - schedule: 
      rate: rate(10 minutes) 
      input: '{"key": "value"}' 
      enabled: true 
     - schedule: 
      rate: rate(10 minutes) 
      input: 
      key: 'value' 
      enabled: true 
+0

मैंने अपना उत्तर – Erndob

उत्तर

5

संपादित पोस्ट करते समय आपकी संपादित करने के लिए: मैं कुछ खुदाई किया था, यह स्वचालित रूप से अनुसूची को निष्क्रिय कर देगा अगर यह एक स्ट्रिंग नहीं है serverless की तरह लगता है। मतलब है कि अगर आपकी पूरी घटना - schedule: rate(10 minutes) है तो यह सक्षम हो जाएगी। लेकिन अगर आपके पास अन्य गुण हैं तो आपको इसे सक्षम करना होगा क्योंकि इसे डिफ़ॉल्ट रूप से अक्षम कर दिया जाएगा।

इसलिए आपकी वर्तमान .yml इस तरह दिखना चाहिए:

functions: test: 
    handler: test.test 
    description: "test serverless Lambda" 
    memorySize: 128 
    timeout: 300 
    events: 
     - schedule: 
     rate: rate(10 minutes) 
     enabled: true 
     input: 
      key: value 
     - schedule: 
     rate: rate(10 minutes) 
     input: '{"key": "value"}' 
     enabled: true 
     - schedule: 
     rate: rate(10 minutes) 
     input: 
      key: 'value' 
     enabled: true 

आप अपने serverless.yml फ़ाइल में एक ही input और inputPath उपयोग कर सकते हैं, जैसा कि आपने cloudwatch घटना शासन के साथ करना होगा। क्लाउडवाथ नियमों का एकमात्र अंतर यह है कि आप वास्तव में एक ऑब्जेक्ट पास कर सकते हैं और सर्वरलेस स्वचालित रूप से आपके लिए इसे स्ट्रिंग कर देगा।

उदाहरण:

functions: 
    crawl: 
    handler: crawl 
    events: 
     - schedule: 
      rate: rate(1 hours) 
      input: 
      key1: value1 
      key2: value2 

यह input:"{'key1':'value1','key2':'value2'}" इस प्रकार का मिलान नहीं हुआ घटना के बजाय json गुजर साथ cloudformation घटना शासन के बराबर हो जाएगा।

अभी नोटिस किया गया कि प्रश्न 2 नवंबर को पूछा गया था। उस समय ऐसा करना संभव नहीं था लेकिन सवाल पूछने के तुरंत बाद इसे लागू किया गया था। https://github.com/serverless/serverless/pull/2567

+0

उत्तर के लिए धन्यवाद अद्यतन किया। मैं वास्तव में इस पीआर के साथ रह रहा हूं, लेकिन अभी भी जेएसओएन के साथ तैनात करने में सक्षम नहीं है। मैं प्रश्न अपडेट करूँगा और इसमें कुछ उदाहरण पोस्ट करूंगा। – Raiju

+0

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

+0

क्या आप एक सरणी पास कर सकते हैं? इनपुट: ['test1', 'test2'] – inside

संबंधित मुद्दे