Cloud Tasks की मदद से, फ़ंक्शन को सूची में जोड़ें


टास्क की सूची वाले फ़ंक्शन, Google का इस्तेमाल करते हैं क्लाउड टास्क इससे ऐप्लिकेशन को इस्तेमाल करने में समय लगता है, जिसमें ज़्यादा संसाधनों का इस्तेमाल होता है या जिसमें सीमित बैंडविथ और आपके मुख्य ऐप्लिकेशन फ़्लो के बाहर, एसिंक्रोनस रूप से काम करते हैं.

उदाहरण के लिए, मान लें कि आपको इमेज के एक बड़े सेट के बैकअप लिए जाने हैं ऐसी फ़ाइलें जो फ़िलहाल रेट लिमिट के साथ एपीआई पर होस्ट की गई हैं. बनने के लिए उस API के ज़िम्मेदार उपभोक्ता हैं, तो आपको उनकी दर सीमाओं का सम्मान करना होगा. साथ ही, टाइम आउट और टाइम आउट की वजह से, लंबे समय तक चलने वाले जॉब के फ़ेल होने का जोखिम हो सकता है मेमोरी की सीमाएं.

इस जटिलता को कम करने के लिए, आप एक टास्क सूची फ़ंक्शन लिख सकते हैं, जो बुनियादी सेट करता है scheduleTime, और dispatchDeadline जैसे टास्क के विकल्प चुने. इसके बाद, फ़ंक्शन को क्लाउड टास्क में सूची से हटाकर, दूसरी सूची में सेव करें. क्लाउड टास्क एनवायरमेंट को खास तौर पर इस तरह से डिज़ाइन किया गया है कि यह पक्का कर सके कि कंजेशन को कंट्रोल किया जा सके और इस तरह की कार्रवाइयों के लिए, फिर से कोशिश करने की कोशिश करें.

'Firebase के लिए Cloud Functions' के लिए Firebase v3.20.1 और इसके बाद के वर्शन के लिए Firebase SDK टूल के साथ Firebase एडमिन SDK v10.2.0 और इसके बाद के वर्शन का इस्तेमाल करें.

Firebase के साथ टास्क सूची वाले फ़ंक्शन का इस्तेमाल करने पर, आपको क्लाउड टास्क प्रोसेस हो रहे हैं. यहां जाएं: Cloud Tasks की कीमत से जुड़ी जानकारी हमारा वीडियो देखें.

टास्क सूची के फ़ंक्शन बनाना

टास्क सूची के फ़ंक्शन का इस्तेमाल करने के लिए, यह वर्कफ़्लो अपनाएं:

  1. Cloud Functions के लिए Firebase SDK टूल का इस्तेमाल करके, टास्क की सूची वाला फ़ंक्शन लिखें.
  2. अपने फ़ंक्शन को एचटीटीपी अनुरोध से ट्रिगर करके टेस्ट करें.
  3. अपने फ़ंक्शन को Firebase सीएलआई के साथ डिप्लॉय करें. आपके टास्क को डिप्लॉय करते समय पहली बार क्यू फ़ंक्शन का इस्तेमाल करते समय, सीएलआई क्लाउड टास्क में काम की सूची (दर को सीमित करना और फिर से कोशिश करें) विकल्प के साथ अपने सोर्स कोड में तय करें.
  4. नई बनाई गई टास्क सूची में टास्क जोड़ें. साथ ही, सेट अप करने के लिए पैरामीटर पास करें चलाने की ज़रूरत पड़ने पर, प्रोग्राम को एक्ज़ीक्यूट करने का शेड्यूल तय किया जा सकता है. कोड लिखकर ऐसा किया जा सकता है एडमिन SDK का इस्तेमाल करके और उसे 'Firebase के लिए Cloud Functions' में डिप्लॉय करने पर.

टास्क सूची के फ़ंक्शन लिखें

onDispatch का इस्तेमाल करें ताकि आप टास्क सूची से जुड़े फ़ंक्शन लिखना शुरू कर सकें. एक ज़रूरी काम की सूची वाला फ़ंक्शन लिखने का एक हिस्सा यह है कि हर पंक्ति के लिए फिर से कोशिश करें और दर सेट करें. कॉन्फ़िगरेशन को सीमित किया जा रहा है. इस पेज में दिए गए कोड सैंपल, ऐसे ऐप्लिकेशन पर आधारित हैं जो ऐसी सेवा शुरू करेगा जो नासा के आज का खगोल विज्ञान चित्र:

टास्क सूची के फ़ंक्शन कॉन्फ़िगर करें

टास्क की सूची वाले फ़ंक्शन में, कॉन्फ़िगरेशन सेटिंग का बेहतरीन सेट मौजूद होता है दर सीमाओं को सटीक रूप से नियंत्रित करने और काम की सूची के व्यवहार को फिर से देखने के लिए:

exports.backupApod = functions
    .runWith( {secrets: ["NASA_API_KEY"]})
    .tasks.taskQueue({
      retryConfig: {
        maxAttempts: 5,
        minBackoffSeconds: 60,
      },
      rateLimits: {
        maxConcurrentDispatches: 6,
      },
    }).onDispatch(async (data) => {
  • retryConfig.maxAttempts=5: टास्क सूची का हर टास्क अपने-आप होता है पांच बार तक कोशिश की. इससे नेटवर्क जैसी अस्थायी गड़बड़ियों को कम करने में मदद मिलती है किसी निर्भर, बाहरी सेवा की गड़बड़ियां या अस्थायी सेवा में रुकावट.
  • retryConfig.minBackoffSeconds=60: हर टास्क को कम से कम 60 सेकंड तक फिर से करने की कोशिश की जाती है आपको अलग-अलग इनाम देखने को मिलेंगे. इससे, हर बार कोशिश करने के बीच में काफ़ी बफ़र रहना पड़ता है इसलिए, कोशिश करें कि पांच बार कोशिश करने पर भी हमें जल्दी पेमेंट न हो.
  • rateLimits.maxConcurrentDispatch=6: ज़्यादा से ज़्यादा छह टास्क इस तारीख को भेजे जाते हैं दिया गया समय. इससे यह पक्का करने में मदद मिलती है कि मौजूदा साइटों पर लगातार अनुरोध मिलते रहें यह सुविधा, ऐक्टिव इंस्टेंस और कोल्ड स्टार्ट की संख्या को कम करने में मदद करती है.

टास्क सूची के फ़ंक्शन की जांच करें

Firebase लोकल एम्युलेटर सुइट में टास्क सूची के फ़ंक्शन को आसान तरीके से दिखाया गया है एचटीटीपी फ़ंक्शन. एचटीटीपी पीओएसटी भेजकर, एम्युलेट किए गए टास्क फ़ंक्शन की जांच की जा सकती है JSON डेटा पेलोड के साथ अनुरोध:

 # start the Firebase Emulators
 firebase emulators:start

 # trigger the emulated task queue function
 curl \
  -X POST                                            # An HTTP POST request...
  -H "content-type: application/json" \              # ... with a JSON body
  http://localhost:$PORT/$PROJECT_ID/$REGION/$NAME \ # ... to function url
  -d '{"data": { ... some data .... }}'              # ... with JSON encoded data

टास्क सूची के फ़ंक्शन डिप्लॉय करें

Firebase सीएलआई का इस्तेमाल करके टास्क सूची फ़ंक्शन डिप्लॉय करें:

$ firebase deploy --only functions:backupApod

पहली बार टास्क सूची फ़ंक्शन को डिप्लॉय करते समय, सीएलआई Cloud Tasks में टास्क की सूची, जिसके लिए विकल्प (अनुरोध सीमित करना और फिर से कोशिश करना) शामिल हैं जो आपके सोर्स कोड में मौजूद है.

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

टास्क सूची से जुड़े फ़ंक्शन को सूची में जोड़ें

Cloud Tasks में, टास्क की सूची के फ़ंक्शन को भरोसेमंद सर्वर से जोड़ा जा सकता है Firebase के लिए Cloud Functions जैसा सर्वर एनवायरमेंट, जो Node.js. अगर आपने अभी तक एडमिन SDK टूल का इस्तेमाल नहीं किया है, तो शुरू करने के लिए, Firebase को सर्वर से जोड़ें.

सामान्य फ़्लो में, एडमिन SDK एक नया टास्क बनाता है और उसे Cloud Tasks में जाकर, टास्क के लिए कॉन्फ़िगरेशन सेट करता है:

exports.enqueueBackupTasks = functions.https.onRequest(
async (_request, response) => {
  const queue = getFunctions().taskQueue("backupApod");
  const enqueues = [];
  for (let i = 0; i <= 10; i += 1) {
    // Enqueue each task with i*60 seconds delay. Our task queue function
    // should process ~1 task/min.
    const scheduleDelaySeconds = i * 60 
    enqueues.push(
        queue.enqueue(
          { id: `task-${i}` },
          {
            scheduleDelaySeconds,
            dispatchDeadlineSeconds: 60 * 5 // 5 minutes
          },
        ),
    );
  }
  await Promise.all(enqueues);
  response.sendStatus(200);

});
  • scheduleDelaySeconds: नमूना कोड Nth टास्क के लिए Nवें मिनट की देरी जोड़कर किया जाने वाला टास्क. यह जिसका मतलब है: ~ 1 टास्क/मिनट. ध्यान दें कि इस्तेमाल करने के लिए, अगर आपको Cloud Tasks को ट्रिगर करने के लिए scheduleTime सेट करना है किसी खास समय पर कोई टास्क.
  • dispatchDeadlineSeconds: ज़्यादा से ज़्यादा समय Cloud Tasks इंतज़ार करेगा पूरा करने के लिए. क्लाउड टास्क फिर से कोशिश करेंगे फिर से कोशिश करने के बाद, फिर से सेट किया गया टास्क सूची को कॉन्फ़िगर करने या इस समयसीमा तक पहुंचने तक. सैंपल में, सूची को इस तरह से कॉन्फ़िगर किया गया है कि टास्क को पांच बार तक फिर से आज़माया जा सके, लेकिन यह टास्क है अगर पूरी प्रोसेस (फिर से कोशिश करने की कोशिशों सहित) अपने-आप रद्द हो जाती है इसमें पांच मिनट से ज़्यादा लगेंगे.

समस्या का हल

Cloud Tasks में लॉग इकट्ठा करने की सुविधा चालू करें

Cloud Tasks के लॉग में, गड़बड़ी की जानकारी से जुड़ी काम की जानकारी होती है. जैसे, टास्क से जुड़े अनुरोध की स्थिति. डिफ़ॉल्ट रूप से, से लॉग बड़ी संख्या में लॉग इस्तेमाल करने की वजह से, Cloud Tasks पर काम करने की सुविधा बंद कर दी गई है संभावित रूप से आपके प्रोजेक्ट पर जनरेट किया जा सकता है. हमारा सुझाव है कि आप डीबग लॉग चालू करें जबकि आप सक्रिय रूप से अपने टास्क सूची फ़ंक्शन को डेवलप और डीबग कर रहे हों. यहां जाएं: चालू किया जा रहा है लॉगिंग.

IAM अनुमतियां

टास्क की सूची बनाते समय या जब टास्क की सूची में यह बदलाव नहीं होता है, तो आपको PERMISSION DENIED गड़बड़ी दिख सकती है Cloud Tasks आपके टास्क सूची के फ़ंक्शन शुरू करने की कोशिश करता है. देख लें कि प्रोजेक्ट में ये IAM बाइंडिंग हैं:

  • Cloud Tasks के लिए टास्क को सूची में जोड़ने के लिए इस्तेमाल की जाने वाली पहचान cloudtasks.tasks.create आईएएम की अनुमति.

    सैंपल में, यह App Engine का डिफ़ॉल्ट सेवा खाता है

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer
  • Cloud Tasks में टास्क को कतार में जोड़ने के लिए इस्तेमाल की जाने वाली पहचान को अनुमति की ज़रूरत है Cloud Tasks में किसी टास्क से जुड़े सेवा खाते का इस्तेमाल करने के लिए.

    सैंपल में, यह App Engine का डिफ़ॉल्ट सेवा खाता है.

Google Cloud IAM दस्तावेज़ देखें App Engine डिफ़ॉल्ट सेवा खाता जोड़ने के तरीके से जुड़े निर्देशों के लिए App Engine डिफ़ॉल्ट सेवा खाते के उपयोगकर्ता के तौर पर.

  • टास्क क्यू फ़ंक्शन की ज़रूरतों को ट्रिगर करने के लिए इस्तेमाल की जाने वाली पहचान cloudfunctions.functions.invoke की अनुमति.

    सैंपल में, यह App Engine का डिफ़ॉल्ट सेवा खाता है

gcloud functions add-iam-policy-binding $FUNCTION_NAME \
  --region=us-central1 \
  --member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
  --role=roles/cloudfunctions.invoker