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


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

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

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

Cloud Functions for Firebase v3.20.1 और इसके बाद के वर्शन के लिए Firebase SDK टूल टास्क सूची वाले फ़ंक्शन के साथ काम करने के लिए, Firebase Admin SDK v10.2.0 और इसके बाद के वर्शन वाले हों.

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

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

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

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

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

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: ज़्यादा से ज़्यादा छह टास्क इस तारीख को भेजे जाते हैं दिया गया समय. इससे यह पक्का करने में मदद मिलती है कि मौजूदा साइटों पर लगातार अनुरोध मिलते रहें यह सुविधा, ऐक्टिव इंस्टेंस और कोल्ड स्टार्ट की संख्या को कम करने में मदद करती है.

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

ज़्यादातर मामलों में, Cloud Functions एम्युलेटर, टास्क को टेस्ट करने का सबसे अच्छा तरीका है सूची फ़ंक्शन. Emulator Suite का दस्तावेज़ देखें और जानें कि टास्क क्यू फ़ंक्शन एम्युलेट के लिए अपने ऐप्लिकेशन को इंस्टॉल करें.

इसके अलावा, टास्क सूची के फ़ंक्शन को आसान तरीके से दिखाया जाता है Firebase Local Emulator Suite में एचटीटीपी फ़ंक्शन. आप एक एचटीटीपी पीओएसटी भेजकर, एम्युलेट किए गए टास्क फ़ंक्शन की जांच कर सकते हैं 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 Admin SDK का इस्तेमाल करने वाला, Cloud Functions for Firebase जैसा सर्वर एनवायरमेंट Node.js. अगर आपने Admin SDK का इस्तेमाल पहले कभी नहीं किया है, तो यह देखें शुरू करने के लिए, Firebase को सर्वर से जोड़ें.

सामान्य फ़्लो में, Admin 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 में लॉग इन करने की सुविधा चालू करें

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