पुल टास्क की सूची को App Engine टास्क सूची से Cloud Pub/Sub में माइग्रेट करना (मॉड्यूल 19)

1. खास जानकारी

कोडलैब के बिना सर्वर वाले माइग्रेशन स्टेशन की सीरीज़ (अपने हिसाब से इस्तेमाल किए जाने वाले ट्यूटोरियल) और मिलते-जुलते वीडियो का मकसद, Google Cloud के बिना सर्वर वाले डेवलपर को अपने ऐप्लिकेशन को आधुनिक बनाने में मदद करना है. ऐसा करने के लिए, उन्हें लेगसी सेवाओं का इस्तेमाल बंद करना होगा. ऐसा करने के लिए, उन्हें एक या एक से ज़्यादा माइग्रेशन में मदद मिलेगी. ऐसा करने से, आपके ऐप्लिकेशन ज़्यादा पोर्टेबल बन जाते हैं. साथ ही, आपको ज़्यादा विकल्प और सुविधाएं भी मिलती हैं. इससे, क्लाउड प्रॉडक्ट की बड़ी रेंज को इंटिग्रेट किया जा सकता है और उन्हें ऐक्सेस किया जा सकता है. साथ ही, नई भाषाओं में रिलीज़ किए जाने वाले ऐप्लिकेशन पर आसानी से अपग्रेड किया जा सकता है. शुरुआत में App Engine (स्टैंडर्ड एनवायरमेंट) वाले डेवलपर पर ध्यान दिया जाता है. हालांकि, यह सीरीज़ इतनी बड़ी है कि इसमें Cloud Functions और Cloud Run जैसे बिना सर्वर वाले प्लैटफ़ॉर्म या लागू होने पर, उन्हें शामिल किया जा सकता है.

इस कोडलैब का मकसद Python 2 App Engine के डेवलपर को यह बताना है कि App Engine टास्क सूची में शामिल टास्क को Cloud Pub/Sub पर माइग्रेट करने का तरीका क्या है. Datastore के ऐक्सेस (मुख्य रूप से मॉड्यूल 2 में शामिल किया गया है) के लिए, App Engine NDB से Cloud NDB पर एक इंप्लिसिट माइग्रेशन और Python 3 में अपग्रेड करने की सुविधा भी है.

मॉड्यूल 18 में, आपको अपने ऐप्लिकेशन में पुल बनाने का तरीका जानना है. इस मॉड्यूल में, आपको तैयार किए गए मॉड्यूल 18 ऐप्लिकेशन का इस्तेमाल करके, Cloud Pub/Sub पर माइग्रेट करना होगा. जो लोग पुश टास्क के लिए, टास्क सूचियों का इस्तेमाल करते हैं वे Cloud Tasks पर माइग्रेट हो जाएंगे. इसके लिए, उन्हें मॉड्यूल 7-9 का इस्तेमाल करना चाहिए.

आपको इनके बारे में जानकारी मिलेगी

आपको इनकी ज़रूरत होगी

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

सिर्फ़ इसे पढ़ें इसे पढ़ें और कसरतों को पूरा करें

Python के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?

शुरुआती इंटरमीडिएट कुशल

Google Cloud की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती इंटरमीडिएट कुशल

2. बैकग्राउंड

App Engine टास्क सूची में पुश और पुल, दोनों तरह के टास्क काम करते हैं. ऐप्लिकेशन पोर्टेबिलिटी को बेहतर बनाने के लिए, Google Cloud का सुझाव है कि बंडल की गई लेगसी सेवाओं को, 'टास्क की सूची' से दूसरे क्लाउड स्टैंडअलोन या तीसरे पक्ष की मिलती-जुलती सेवाओं पर माइग्रेट करें.

माइग्रेशन मॉड्यूल 7-9 में पुश टास्क माइग्रेशन शामिल है, जबकि मॉड्यूल 18-19 के चरण में पुल टास्क माइग्रेशन पर फ़ोकस किया गया है. Cloud Tasks, टास्क की सूची वाले पुश टास्क को ज़्यादा बारीकी से मैच करता है, लेकिन Pub/Sub, टास्क की सूची में शामिल किए गए टास्क की सूची के इतने करीब नहीं है.

Pub/Sub में, टास्क की सूची से मिले पुल फ़ंक्शन के मुकाबले ज़्यादा सुविधाएं हैं. उदाहरण के लिए, Pub/Sub में पुश फ़ंक्शन भी होता है. हालांकि, Cloud Tasks, टास्क सूची के पुश टास्क की तरह है. इसलिए, Pub/Sub पुश को किसी भी माइग्रेशन मॉड्यूल में शामिल नहीं किया जाता है. इस मॉड्यूल 19 कोडलैब में, टास्क की सूची में बदलाव करने की सूची को Pub/Sub में बदलने के साथ-साथ, Datastore ऐक्सेस करने के लिए App Engine NDB से Cloud NDB पर माइग्रेट करने का तरीका दिखाया गया है. मॉड्यूल 2 में एक माइग्रेशन चल रहा है.

मॉड्यूल 18 कोड का "विज्ञापन दिया गया" है Python 2 सैंपल ऐप्लिकेशन के तौर पर, सोर्स खुद Python 2 और 3 पर काम करता है. साथ ही, मॉड्यूल 19 में Cloud Pub/Sub (और Cloud NDB) पर माइग्रेट करने के बाद भी यह इसी तरह बना रहता है.

इस ट्यूटोरियल में ये चरण बताए गए हैं:

  1. सेटअप/प्रीवर्क
  2. कॉन्फ़िगरेशन अपडेट करें
  3. ऐप्लिकेशन कोड बदलें

3. सेटअप/प्रीवर्क

इस सेक्शन में, इन कामों को करने का तरीका बताया गया है:

  1. अपना क्लाउड प्रोजेक्ट सेट अप करें
  2. बेसलाइन ऐप्लिकेशन का नमूना डाउनलोड करें
  3. (फिर से) बेसलाइन ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना
  4. Google Cloud की नई सेवाएं/एपीआई चालू करें

इन चरणों से यह पक्का होता है कि कोड काम कर रहा है और यह Cloud की सेवाओं पर माइग्रेट होने के लिए तैयार है.

1. प्रोजेक्ट सेटअप करें

अगर आपने मॉड्यूल 18 कोडलैब पूरा कर लिया है, तो उसी प्रोजेक्ट (और कोड) का फिर से इस्तेमाल करें. इसके अलावा, नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. पक्का करें कि प्रोजेक्ट में एक चालू बिलिंग खाता और चालू App Engine ऐप्लिकेशन हो. अपना प्रोजेक्ट आईडी ढूंढें, क्योंकि कोडलैब (कोड बनाना सीखना) के दौरान आपको इसे अपने पास रखने की ज़रूरत है. इसका इस्तेमाल तब करें, जब आपको PROJECT_ID वैरिएबल मिले.

2. बेसलाइन ऐप्लिकेशन का नमूना डाउनलोड करें

इसकी ज़रूरी शर्तों में से एक है, Module 18 App Engine ऐप्लिकेशन. इसलिए, या तो इसका कोडलैब पूरा करें (सुझाया गया; ऊपर दिया गया लिंक) या रेपो से मॉड्यूल 18 कोड को कॉपी करें. आप अपना या हमारा, यहां से शुरुआत करेंगे ("START"). कोडलैब से आपको माइग्रेशन की प्रोसेस के बारे में जानकारी मिलती है. इससे यह पता चलता है कि कोड 19 रेपो फ़ोल्डर ("FINISH") में मौजूद कोड से मिलता-जुलता है या नहीं.

आप चाहे जो भी मॉड्यूल 18 ऐप्लिकेशन इस्तेमाल करें, फ़ोल्डर यहां दिए गए फ़ोल्डर की तरह दिखना चाहिए. इसके अलावा, इसमें lib फ़ोल्डर भी होना चाहिए:

$ ls
README.md               appengine_config.py     queue.yaml              templates
app.yaml                main.py                 requirements.txt

3. (फिर से) बेसलाइन ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना

मॉड्यूल 18 ऐप्लिकेशन को डिप्लॉय करने के लिए, यह तरीका अपनाएं:

  1. अगर lib फ़ोल्डर मौजूद है, तो उसे मिटा दें और lib को फिर से भरने के लिए pip install -t lib -r requirements.txt चलाएं. अगर आपकी डेवलपमेंट मशीन पर Python 2 और 3, दोनों इंस्टॉल किए गए हैं, तो आपको इसके बजाय pip2 का इस्तेमाल करना पड़ सकता है.
  2. पक्का करें कि आपने gcloud कमांड-लाइन टूल इंस्टॉल किया हो और उसे शुरू किया हो. साथ ही, इसके इस्तेमाल की जानकारी की समीक्षा की हो.
  3. (ज़रूरी नहीं) अगर आपको हर gcloud निर्देश के साथ PROJECT_ID नहीं डालना है, तो अपने क्लाउड प्रोजेक्ट को gcloud config set project PROJECT_ID के साथ सेट करें.
  4. gcloud app deploy के साथ सैंपल ऐप्लिकेशन डिप्लॉय करें
  5. पक्का करें कि ऐप्लिकेशन बिना किसी समस्या के ठीक से काम कर रहा हो. अगर आपने मॉड्यूल 18 कोडलैब को पूरा कर लिया है, तो यह ऐप्लिकेशन वेबसाइट पर सबसे ज़्यादा आने वाले लोगों की जानकारी दिखाता है. साथ ही, यह उनकी हाल की विज़िट की जानकारी भी दिखाता है. इस बारे में नीचे बताया गया है. अगर ऐसा नहीं है, तो हो सकता है कि वेबसाइट पर आने वाले लोगों की संख्या न दिखे.

b667551dcbab1a09.png

मॉड्यूल 18 सैंपल ऐप्लिकेशन को माइग्रेट करने से पहले, आपको पहले उन क्लाउड सेवाओं को चालू करना होगा जिनका इस्तेमाल यह ऐप्लिकेशन, बदलाव करने के लिए करेगा.

4. Google Cloud की नई सेवाएं/एपीआई चालू करें

पुराने ऐप्लिकेशन में App Engine की बंडल सेवाएं इस्तेमाल की जाती थीं, जिनके लिए अतिरिक्त सेटअप की ज़रूरत नहीं होती. हालांकि, स्टैंडअलोन क्लाउड सेवाएं काम करती हैं. अपडेट किया गया ऐप्लिकेशन, Cloud Pub/Sub और Cloud Datastore (Cloud NDB क्लाइंट लाइब्रेरी से), दोनों का इस्तेमाल करेगा. App Engine और दोनों क्लाउड एपीआई में "हमेशा मुफ़्त" होता है टियर कोटा पार न करें. जब तक इन सीमाओं के अंदर रहकर काम किया जाएगा, तब तक आपको इस ट्यूटोरियल को पूरा करने के लिए कोई शुल्क नहीं देना चाहिए. Cloud API को, आपकी प्राथमिकता के हिसाब से Cloud Console या कमांड-लाइन से चालू किया जा सकता है.

Cloud Console से

Cloud Console में, एपीआई मैनेजर की लाइब्रेरी पेज (सही प्रोजेक्ट के लिए) पर जाएं. इसके बाद, पेज के बीच में मौजूद खोज बार का इस्तेमाल करके Cloud Datastore और Cloud Pub/Sub एपीआई खोजें:

c7a740304e9d35b.png

हर एपीआई के लिए, चालू करें बटन पर अलग से क्लिक करें. इससे आपको बिलिंग की जानकारी देने के लिए कहा जा सकता है. उदाहरण के लिए, यह Cloud Pub/Sub एपीआई लाइब्रेरी पेज है:

1b6c0a2a73124f6b.jpeg

कमांड-लाइन से

यह सुविधा, कंसोल से एपीआई को चालू करता है और विज़ुअल तौर पर जानकारी देता है. हालांकि, कुछ कंपनियां कमांड लाइन को प्राथमिकता देती हैं. एक साथ दोनों एपीआई चालू करने के लिए, gcloud services enable pubsub.googleapis.com datastore.googleapis.com निर्देश जारी करें:

$ gcloud services enable pubsub.googleapis.com datastore.googleapis.com
Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.

आपसे बिलिंग जानकारी के लिए प्रॉम्प्ट किया जा सकता है. अगर आपको अन्य Cloud API चालू करके, यह जानना है कि उनके यूआरआई क्या हैं, तो वे एपीआई के लाइब्रेरी पेज पर सबसे नीचे मिल सकते हैं. उदाहरण के लिए, pubsub.googleapis.com को "सेवा का नाम" के तौर पर देखें Pub/Sub पेज पर सबसे नीचे मौजूद होना चाहिए.

इन चरणों को पूरा करने के बाद, आपका प्रोजेक्ट एपीआई ऐक्सेस कर सकेगा. अब ऐप्लिकेशन को अपडेट करने का समय आ गया है, ताकि उन एपीआई का इस्तेमाल किया जा सके.

4. Pub/Sub संसाधन बनाना

मॉड्यूल 18 से, टास्क की सूची के वर्कफ़्लो के क्रम का रीकैप:

  1. मॉड्यूल 18 ने queue.yaml फ़ाइल का इस्तेमाल करके, pullq नाम की पुल क्यू बनाई है.
  2. यह ऐप्लिकेशन वेबसाइट पर आने वाले लोगों को ट्रैक करने के लिए, पुल की सूची में टास्क जोड़ता है.
  3. टास्क को आखिर में एक कर्मचारी प्रोसेस करता है, जिसे एक सीमित समय (एक घंटे) के लिए लीज़ पर लिया जाता है.
  4. टास्क को हाल ही में वेबसाइट पर आने वाले लोगों की संख्या के हिसाब से लागू किया जाता है.
  5. टास्क पूरा होने पर, उन्हें सूची से मिटा दिया जाता है.

Pub/Sub के साथ भी ऐसा ही वर्कफ़्लो अपनाया जाएगा. अगले सेक्शन में, Pub/Sub की बुनियादी शब्दावली के बारे में बताया गया है. इसमें Pub/Sub के ज़रूरी संसाधन बनाने के तीन अलग-अलग तरीके बताए गए हैं.

App Engine टास्क सूची (पुल) बनाम Cloud Pub/Sub शब्दावली

Pub/Sub पर स्विच करने के लिए, आपके शब्द सेक्शन में थोड़ा बदलाव करना पड़ता है. नीचे दोनों प्रॉडक्ट के लिए काम के शब्दों के साथ-साथ मुख्य कैटगरी दी गई हैं. साथ ही, डेटा को दूसरी जगह भेजने से जुड़ी गाइड भी देखें. इसमें, मिलती-जुलती तुलनाओं की सुविधा दी गई है.

  • डेटा का क्रम तय करना: टास्क की सूची के साथ डेटा, पुल क्यू में जाता है; Pub/Sub के साथ, डेटा विषयों में शामिल होता है.
  • सूची में दिए गए डेटा की इकाइयां: टास्क की सूची के साथ टास्क पूरे करने को Pub/Sub वाले मैसेज कहा जाता है.
  • डेटा प्रोसेसर: टास्क की सूची की मदद से, कर्मचारी पुल टास्क को ऐक्सेस करते हैं; Pub/Sub के साथ मैसेज पाने के लिए, आपके पास सदस्यता/सदस्य होना ज़रूरी है
  • डेटा निकालना: पुल टास्क को लीज़ पर देना, किसी विषय से (सदस्यता के ज़रिए) मैसेज पुलने जैसा ही है.
  • काम की सूची बनाना या पूरा करना: काम पूरा होने के बाद, टास्क की सूची में मौजूद टास्क की सूची को मिटाना, उसी तरह से होता है जैसे किसी Pub/Sub मैसेज को स्वीकार करना

हालांकि, सूची में प्रॉडक्ट की सूची बदल जाती है, लेकिन वर्कफ़्लो करीब-करीब एक जैसा रहता है:

  1. पुल सूची के बजाय, ऐप्लिकेशन pullq नाम के विषय का इस्तेमाल करता है.
  2. पुल सूची में टास्क जोड़ने के बजाय, ऐप्लिकेशन किसी विषय (pullq) पर मैसेज भेजता है.
  3. पुल की सूची से टास्क लीज़ पर लेने के बजाय, worker नाम का सदस्य pullq विषय से मैसेज उपलब्ध कराता है.
  4. ऐप्लिकेशन, मैसेज पेलोड प्रोसेस करता है, जिससे Datastore में वेबसाइट पर आने वाले लोगों की संख्या बढ़ती है.
  5. सूची से टास्क मिटाने के बजाय, ऐप्लिकेशन प्रोसेस किए गए मैसेज को स्वीकार कर लेता है.

टास्क की सूची के सेटअप में, पुल की सूची बनाने की प्रोसेस शामिल होती है. Pub/Sub सेट अप करने के लिए, आपको विषय और सदस्यता, दोनों बनाने होंगे. मॉड्यूल 18 में, हमने queue.yaml को प्रोसेस नहीं किया, बल्कि ऐप्लिकेशन को एक्ज़ीक्यूट किया गया; अब Pub/Sub के लिए भी ऐसा ही करना होगा.

विषय और सदस्यताएं बनाने के तीन विकल्प हैं:

  1. Cloud Console
  2. कमांड-लाइन से, या
  3. कोड से (छोटी Python स्क्रिप्ट)

नीचे दिए गए विकल्पों में से कोई एक चुनें और Pub/Sub संसाधन बनाने के लिए, उनसे जुड़े निर्देशों का पालन करें.

Cloud Console

Cloud Console से कोई विषय बनाने के लिए, यह तरीका अपनाएं:

  1. Cloud Console के Pub/Sub विषय वाले पेज पर जाएं.
  2. सबसे ऊपर विषय बनाएं पर क्लिक करें; एक नई डायलॉग विंडो खुलती है (नीचे इमेज देखें)
  3. विषय आईडी फ़ील्ड में, pullq डालें.
  4. चुने गए सभी विकल्पों से चुने हुए का निशान हटाएं और एन्क्रिप्ट (सुरक्षित) करने की वह कुंजी जिसे Google मैनेज करता है चुनें.
  5. विषय बनाएं बटन पर क्लिक करें.

विषय बनाने वाला डायलॉग बॉक्स ऐसा दिखता है:

a05cfdbf64571ceb.png

अब जब आपके पास कोई विषय है, तो आपको उस विषय के लिए सदस्यता बनानी होगी:

  1. Cloud Console के Pub/Sub सदस्यताओं के पेज पर जाएं.
  2. सबसे ऊपर, सदस्यता बनाएं पर क्लिक करें (नीचे दी गई इमेज देखें).
  3. सदस्यता आईडी फ़ील्ड में worker डालें.
  4. किसी Cloud Pub/Sub विषय को चुनें पुलडाउन से pullq को चुनें. यह ध्यान रखें कि इसका "पूरी तरह क्वालिफ़ाइड पाथ नेम", उदाहरण के लिए, projects/PROJECT_ID/topics/pullq
  5. डिलीवरी का टाइप के लिए, खींचें और छोड़ें को चुनें.
  6. अन्य सभी विकल्पों को वैसा ही रहने दें और बनाएं बटन पर क्लिक करें.

सदस्यता बनाने की स्क्रीन इस तरह दिखती है:

c5444375c20b0618.jpeg

आपके पास विषय पेज से, कोई सदस्यता भी बनाने का विकल्प है—यह "शॉर्टकट" है आपके लिए विषयों को सदस्यताओं से जोड़ने में मदद मिल सकती है. सदस्यताएं बनाने के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.

कमांड-लाइन से

Pub/Sub उपयोगकर्ता, gcloud pubsub topics create TOPIC_ID और gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_ID निर्देशों का इस्तेमाल करके विषय और सदस्यताएं बना सकते हैं. इन्हें pullq के TOPIC_ID और worker के SUBSCRIPTION_ID के साथ लागू करने पर, प्रोजेक्ट PROJECT_ID के लिए यह आउटपुट मिलता है:

$ gcloud pubsub topics create pullq
Created topic [projects/PROJECT_ID/topics/pullq].

$ gcloud pubsub subscriptions create worker --topic=pullq
Created subscription [projects/PROJECT_ID/subscriptions/worker].

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

कोड से (छोटी Python स्क्रिप्ट)

विषय और सदस्यताएं अपने-आप बनाने का एक और तरीका है. सोर्स कोड में Pub/Sub API का इस्तेमाल करना. मॉड्यूल 19 रेपो फ़ोल्डर में, maker.py स्क्रिप्ट का कोड नीचे दिया गया है.

from __future__ import print_function
import google.auth
from google.api_core import exceptions
from google.cloud import pubsub

_, PROJECT_ID = google.auth.default()
TOPIC = 'pullq'
SBSCR = 'worker'
ppc_client = pubsub.PublisherClient()
psc_client = pubsub.SubscriberClient()
TOP_PATH = ppc_client.topic_path(PROJECT_ID, TOPIC)
SUB_PATH = psc_client.subscription_path(PROJECT_ID, SBSCR)

def make_top():
    try:
        top = ppc_client.create_topic(name=TOP_PATH)
        print('Created topic %r (%s)' % (TOPIC, top.name))
    except exceptions.AlreadyExists:
        print('Topic %r already exists at %r' % (TOPIC, TOP_PATH))

def make_sub():
    try:
        sub = psc_client.create_subscription(name=SUB_PATH, topic=TOP_PATH)
        print('Subscription created %r (%s)' % (SBSCR, sub.name))
    except exceptions.AlreadyExists:
        print('Subscription %r already exists at %r' % (SBSCR, SUB_PATH))
    try:
        psc_client.close()
    except AttributeError:  # special Py2 handler for grpcio<1.12.0
        pass

make_top()
make_sub()

इस स्क्रिप्ट को चलाने पर, अनुमानित आउटपुट मिलेगा (बशर्ते कोई गड़बड़ी न हो):

$ python3 maker.py
Created topic 'pullq' (projects/PROJECT_ID/topics/pullq)
Subscription created 'worker' (projects/PROJECT_ID/subscriptions/worker)

पहले से मौजूद रिसॉर्स बनाने के लिए, एपीआई को कॉल करने से, क्लाइंट लाइब्रेरी में एक google.api_core.exceptions.AlreadyExists अपवाद दिखता है. इसे स्क्रिप्ट में अच्छे से हैंडल किया जाता है:

$ python3 maker.py
Topic 'pullq' already exists at 'projects/PROJECT_ID/topics/pullq'
Subscription 'worker' already exists at 'projects/PROJECT_ID/subscriptions/worker'

अगर आपने Pub/Sub का इस्तेमाल पहले नहीं किया है, तो ज़्यादा जानकारी के लिए Pub/Sub आर्किटेक्चर का व्हाइट पेपर देखें.

5. कॉन्फ़िगरेशन अपडेट करें

कॉन्फ़िगरेशन के अपडेट में, अलग-अलग कॉन्फ़िगरेशन फ़ाइलों को बदलना और Cloud Pub/Sub इकोसिस्टम के अंदर, App Engine की पुल क्यू की सुविधा देना, दोनों शामिल हैं.

Que.yaml को मिटाएं

हम टास्क की सूची को पूरी तरह से हटा रहे हैं. इसलिए, queue.yaml को मिटा दें, क्योंकि Pub/Sub इस फ़ाइल का इस्तेमाल नहीं करता. पुल लिस्ट बनाने के बजाय, आपको एक Pub/Sub विषय (और सदस्यता) बनाना होगा.

requirements.txt

मॉड्यूल 18 से flask में शामिल होने के लिए, google-cloud-ndb और google-cloud-pubsub, दोनों को requirements.txt में जोड़ें. आपका अपडेट किया गया मॉड्यूल 19 requirements.txt अब ऐसा दिखना चाहिए:

flask
google-cloud-ndb
google-cloud-pubsub

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

app.yaml

app.yaml में बदलाव इस आधार पर अलग-अलग होते हैं कि आप Python 2 के साथ बने हैं या Python 3 में अपग्रेड कर रहे हैं.

Python 2

requirements.txt में ऊपर दिया गया अपडेट, Google Cloud क्लाइंट लाइब्रेरी के इस्तेमाल को जोड़ता है. इनके लिए App Engine से अतिरिक्त सहायता की ज़रूरत होती है, जैसे कि पहले से मौजूद लाइब्रेरी, setuptools और grpcio. पहले से मौजूद लाइब्रेरी का इस्तेमाल करने के लिए, app.yaml में libraries सेक्शन और लाइब्रेरी के वर्शन नंबर या "सबसे नए" की ज़रूरत होती है App Engine के सर्वर पर उपलब्ध सबसे नए अपडेट के लिए. मॉड्यूल 18 app.yaml में अभी तक इनमें से कोई एक सेक्शन नहीं है:

पहले:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

setuptools और grpcio, दोनों की एंट्री के साथ-साथ app.yaml में libraries सेक्शन जोड़ें. ऐसा करते समय, उन दोनों का नया वर्शन चुनें. साथ ही, Python 3 के लिए runtime एंट्री का प्लेसहोल्डर भी जोड़ें, जिस पर टिप्पणी करते समय, मौजूदा 3.x रिलीज़ के साथ टिप्पणी की गई हो. जैसे, यह लिखते समय 3.10 वर्शन हो सकता है. इन बदलावों के साथ, app.yaml अब ऐसा दिखेगा:

बाद में:

#runtime: python310
runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

libraries:
- name: setuptools
  version: latest
- name: grpcio
  version: latest

Python 3

Python 3 के उपयोगकर्ताओं और app.yaml के लिए, यह चीज़ों को हटाने के बारे में है. इस सेक्शन में, handlers सेक्शन, threadsafe, और api_version डायरेक्टिव को मिटा दिया जाएगा. इसके बाद, libraries सेक्शन नहीं बनाया जाएगा.

दूसरी जनरेशन के रनटाइम में तीसरे पक्ष की लाइब्रेरी उपलब्ध नहीं होती हैं. इसलिए, app.yaml में libraries सेक्शन की ज़रूरत नहीं है. इसके अलावा, अब तीसरे पक्ष के ऐसे पैकेज को कॉपी करने (कभी-कभी इसे वेंडर करना या खुद बंडल करना भी कहा जाता है) की ज़रूरत नहीं पड़ती जो पहले से मौजूद इसमें पहले से मौजूद होते हैं. आपको सिर्फ़ उन तीसरे पक्ष की लाइब्रेरी की सूची बनानी होगी जिनका इस्तेमाल आपका ऐप्लिकेशन, requirements.txt में करता है.

app.yaml का handlers सेक्शन, ऐप्लिकेशन (स्क्रिप्ट) और स्टैटिक फ़ाइल हैंडलर की जानकारी देने के लिए है. Python 3 रनटाइम को अपनी रूटिंग खुद तय करने के लिए, वेब फ़्रेमवर्क की ज़रूरत होती है. इसलिए, सभी स्क्रिप्ट हैंडलर को auto में बदलना होगा. अगर आपका ऐप्लिकेशन (जैसे, मॉड्यूल 18's) स्टैटिक फ़ाइलें नहीं दिखाता है, तो सभी रूट auto हो जाएंगे. इससे वे काम के नहीं होंगे. इस वजह से, handlers सेक्शन की भी ज़रूरत नहीं है, इसलिए उसे मिटा दें.

आखिर में, Python 3 में threadsafe या api_version डायरेक्टिव का इस्तेमाल नहीं किया जाता, इसलिए उन्हें भी मिटा दें. सबसे आसान बात यह है कि आपको app.yaml के सभी सेक्शन मिटाने चाहिए, ताकि सिर्फ़ runtime डायरेक्टिव बचे, ताकि Python 3 के मॉडर्न वर्शन, जैसे कि 3.10 के बारे में पता चल सके. इन अपडेट से पहले और बाद में app.yaml कैसा दिखेगा:

पहले:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

बाद में:

runtime: python310

जो लोग Python 3 के लिए अपने app.yaml से सब कुछ नहीं मिटाना चाहते, उनके लिए हमने मॉड्यूल 19 रेपो फ़ोल्डर में app3.yaml वैकल्पिक फ़ाइल उपलब्ध कराई है. अगर आपको डिप्लॉयमेंट के बजाय इस फ़ाइल नाम का इस्तेमाल करना है, तो अपने निर्देश के आखिर में यह फ़ाइल नाम ज़रूर जोड़ें: gcloud app deploy app3.yaml. ऐसा न करने पर, यह डिफ़ॉल्ट रूप से आपके ऐप्लिकेशन को Python 2 app.yaml फ़ाइल के साथ डिप्लॉय और डिप्लॉय कर देगा. हालांकि, आपने इसमें कोई बदलाव नहीं किया है.

appengine_config.py

अगर आपको Python 3 पर अपग्रेड करना है, तो appengine_config.py की ज़रूरत नहीं है. इसलिए, इसे मिटा दें. ज़रूरी नहीं होने की वजह यह है कि तीसरे पक्ष की लाइब्रेरी की सुविधा का इस्तेमाल करने के लिए, सिर्फ़ requirements.txt में उन्हें तय करना ज़रूरी है. Python 2 के उपयोगकर्ता, आगे पढ़ें.

मॉड्यूल 18 appengine_config.py में तीसरे पक्ष की लाइब्रेरी के साथ काम करने के लिए सही कोड मौजूद है. उदाहरण के लिए, requirements.txt में हाल ही में जोड़ी गई फ़्लास्क और क्लाउड क्लाइंट लाइब्रेरी:

पहले:

from google.appengine.ext import vendor

# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)

हालांकि, सिर्फ़ यह कोड पहले से मौजूद लाइब्रेरी (setuptools, grpcio) के साथ काम करने के लिए ही काफ़ी नहीं है. कुछ और लाइनें चाहिए, इसलिए appengine_config.py को अपडेट करें, ताकि वह कुछ ऐसा दिखे:

बाद में:

import pkg_resources
from google.appengine.ext import vendor

# Set PATH to your libraries folder.
PATH = 'lib'
# Add libraries installed in the PATH folder.
vendor.add(PATH)
# Add libraries to pkg_resources working set to find the distribution.
pkg_resources.working_set.add_entry(PATH)

क्लाउड क्लाइंट लाइब्रेरी के काम करने के लिए ज़रूरी बदलावों के बारे में ज़्यादा जानकारी, बंडल की गई सेवाओं के दस्तावेज़ में मिल सकती है.

कॉन्फ़िगरेशन से जुड़े अन्य अपडेट

अगर आपके पास कोई lib फ़ोल्डर है, तो उसे मिटा दें. अगर आप Python 2 के उपयोगकर्ता हैं, तो यह निर्देश देकर lib फ़ोल्डर में जगह खाली करें:

pip install -t lib -r requirements.txt  # or pip2

अगर आपके डेवलपमेंट सिस्टम पर Python 2 और 3, दोनों ही इंस्टॉल किए गए हैं, तो आपको pip के बजाय pip2 का इस्तेमाल करना पड़ सकता है.

6. ऐप्लिकेशन कोड बदलें

इस सेक्शन में ऐप्लिकेशन की मुख्य फ़ाइल main.py में अपडेट किए गए हैं. यह App Engine की टास्क सूची की पुल सूची को Cloud Pub/Sub से बदल रहा है. वेब टेंप्लेट, templates/index.html में कोई बदलाव नहीं हुआ है. दोनों ऐप्लिकेशन को एक जैसा डेटा दिखाना होगा और एक जैसा काम करना होगा.

इंपोर्ट और शुरू करने की प्रोसेस अपडेट करें

इंपोर्ट और शुरू करने के लिए कई अपडेट हैं:

  1. इंपोर्ट करने के लिए, App Engine NDB और टास्क की सूची को, Cloud NDB और Pub/Sub से बदलें.
  2. pullq का नाम QUEUE से बदलकर TOPIC करें.
  3. पुल टास्क से, वर्कर ने उन्हें एक घंटे के लिए लीज़ पर दिया. हालांकि, Pub/Sub के लिए टाइम आउट को हर मैसेज के हिसाब से मेज़र किया जाता है. इसलिए, HOUR कॉन्सटेंट को मिटाएं.
  4. Cloud API के लिए, एपीआई क्लाइंट का इस्तेमाल करना ज़रूरी है. इसलिए, Cloud NDB और Cloud Pub/Sub के लिए उन्हें शुरू करें. बाद में, एपीआई क्लाइंट को विषयों और सदस्यताओं, दोनों के लिए उपलब्ध कराएं.
  5. Pub/Sub के लिए Cloud प्रोजेक्ट आईडी ज़रूरी है. इसलिए, इसे इंपोर्ट करें और google.auth.default() से डाउनलोड करें.
  6. Pub/Sub के लिए "पूरी तरह क्वालिफ़ाइड पाथ नेम" ज़रूरी है का इस्तेमाल करें, इसलिए *_path() सुविधा फ़ंक्शन का इस्तेमाल करके उन्हें बनाएं.

यहां मॉड्यूल 18 से इंपोर्ट और शुरू करने के बारे में बताया गया है. साथ ही, यह बताया गया है कि ऊपर किए गए बदलावों को लागू करने के बाद, सेक्शन कैसे दिखने चाहिए. इसमें ज़्यादातर नए कोड, अलग-अलग Pub/Sub संसाधन हैं:

पहले:

from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb

HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)

बाद में:

from flask import Flask, render_template, request
import google.auth
from google.cloud import ndb, pubsub

LIMIT = 10
TASKS = 1000
TOPIC = 'pullq'
SBSCR = 'worker'

app = Flask(__name__)
ds_client  = ndb.Client()
ppc_client = pubsub.PublisherClient()
psc_client = pubsub.SubscriberClient()
_, PROJECT_ID = google.auth.default()
TOP_PATH = ppc_client.topic_path(PROJECT_ID, TOPIC)
SUB_PATH = psc_client.subscription_path(PROJECT_ID, SBSCR)

डेटा मॉडल के अपडेट पर जाएं

Visit डेटा मॉडल में कोई बदलाव नहीं होता. डेटास्टोर ऐक्सेस के लिए Cloud NDB API क्लाइंट कॉन्टेक्स्ट मैनेजर, ds_client.context() के साफ़ तौर पर इस्तेमाल की ज़रूरत है. कोड में, इसका मतलब है कि Python with ब्लॉक के अंदर, store_visit() और fetch_visits(), दोनों में Datastore कॉल को रैप किया जा सकता है. यह अपडेट, मॉड्यूल 2 में दी गई जानकारी से मेल खाता है.

Pub/Sub में सबसे ज़रूरी बदलाव, टास्क की सूची में शामिल पुल टास्क की लाइन को, pullq विषय के लिए Pub/Sub मैसेज के पब्लिश होने से बदलना है. ये अपडेट करने से पहले और बाद में, इस कोड का इस्तेमाल किया जा सकता है:

पहले:

class Visit(ndb.Model):
    'Visit entity registers visitor IP address & timestamp'
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

def store_visit(remote_addr, user_agent):
    'create new Visit in Datastore and queue request to bump visitor count'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
    QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

बाद में:

class Visit(ndb.Model):
    'Visit entity registers visitor IP address & timestamp'
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

def store_visit(remote_addr, user_agent):
    'create new Visit in Datastore and queue request to bump visitor count'
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
    ppc_client.publish(TOP_PATH, remote_addr.encode('utf-8'))

def fetch_visits(limit):
    'get most recent visits'
    with ds_client.context():
        return Visit.query().order(-Visit.timestamp).fetch(limit)

VisitorCount के डेटा मॉडल के अपडेट

VisitorCount का डेटा मॉडल नहीं बदलता है और fetch_counts() में बदलाव करता है. हालांकि, इसमें Datastore क्वेरी को with ब्लॉक में रैप करने की सुविधा नहीं होती है. इसका उदाहरण नीचे दिया गया है:

पहले:

class VisitorCount(ndb.Model):
    visitor = ndb.StringProperty(repeated=False, required=True)
    counter = ndb.IntegerProperty()

def fetch_counts(limit):
    'get top visitors'
    return VisitorCount.query().order(-VisitorCount.counter).fetch(limit)

बाद में:

class VisitorCount(ndb.Model):
    visitor = ndb.StringProperty(repeated=False, required=True)
    counter = ndb.IntegerProperty()

def fetch_counts(limit):
    'get top visitors'
    with ds_client.context():
        return VisitorCount.query().order(-VisitorCount.counter).fetch(limit)

वर्कर कोड को अपडेट करें

वर्कर कोड तब तक अपडेट होता है, जब तक NDB को Cloud NDB से और टास्क की सूची को Pub/Sub से बदला जाता है. हालांकि, इसका वर्कफ़्लो पहले जैसा ही रहता है.

  1. Cloud NDB कॉन्टेक्स्ट मैनेजर with ब्लॉक में, Datastore कॉल रैप करें.
  2. टास्क की सूची को क्लीनअप में, पुल की सूची से सभी टास्क मिटा दिए जाते हैं. Pub/Sub के साथ, "स्वीकार करने के आईडी" acks में इकट्ठा किए जाते हैं और आखिर में मिटा दिए जाते हैं/स्वीकार किए जाते हैं.
  3. टास्क की सूची में शामिल पुल के टास्क को उसी तरह से लिया जा सकता है जैसे Pub/Sub मैसेज को पुल किया जाता है. पुल टास्क को मिटाने की कार्रवाई, टास्क के ऑब्जेक्ट के साथ की जाती है. हालांकि, Pub/Sub मैसेज को उनके स्वीकार करने वाले आईडी से मिटा दिया जाता है.
  4. Pub/Sub मैसेज पेलोड के लिए बाइट की ज़रूरत होती है (Python स्ट्रिंग के लिए नहीं), इसलिए किसी विषय के मैसेज को पब्लिश करते और दिखाते समय, उसमें UTF-8 एन्कोडिंग और डिकोडिंग की सुविधा होती है.

अभी बताए गए बदलावों को लागू करके, log_visitors() को नीचे दिए गए अपडेट किए गए कोड से बदलें:

पहले:

@app.route('/log')
def log_visitors():
    'worker processes recent visitor counts and updates them in Datastore'
    # tally recent visitor counts from queue then delete those tasks
    tallies = {}
    tasks = QUEUE.lease_tasks(HOUR, TASKS)
    for task in tasks:
        visitor = task.payload
        tallies[visitor] = tallies.get(visitor, 0) + 1
    if tasks:
        QUEUE.delete_tasks(tasks)

    # increment those counts in Datastore and return
    for visitor in tallies:
        counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
        if not counter:
            counter = VisitorCount(visitor=visitor, counter=0)
            counter.put()
        counter.counter += tallies[visitor]
        counter.put()
    return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
            len(tasks), len(tallies))

बाद में:

@app.route('/log')
def log_visitors():
    'worker processes recent visitor counts and updates them in Datastore'
    # tally recent visitor counts from queue then delete those tasks
    tallies = {}
    acks = set()
    rsp = psc_client.pull(subscription=SUB_PATH, max_messages=TASKS)
    msgs = rsp.received_messages
    for rcvd_msg in msgs:
        acks.add(rcvd_msg.ack_id)
        visitor = rcvd_msg.message.data.decode('utf-8')
        tallies[visitor] = tallies.get(visitor, 0) + 1
    if acks:
        psc_client.acknowledge(subscription=SUB_PATH, ack_ids=acks)
    try:
        psc_client.close()
    except AttributeError:  # special handler for grpcio<1.12.0
        pass

    # increment those counts in Datastore and return
    if tallies:
        with ds_client.context():
            for visitor in tallies:
                counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
                if not counter:
                    counter = VisitorCount(visitor=visitor, counter=0)
                    counter.put()
                counter.counter += tallies[visitor]
                counter.put()
    return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
            len(msgs), len(tallies))

मुख्य ऐप्लिकेशन हैंडलर root() में कोई बदलाव नहीं हुआ है. एचटीएमएल टेंप्लेट फ़ाइल templates/index.html में भी किसी बदलाव की ज़रूरत नहीं है. इसलिए, इसमें सभी ज़रूरी अपडेट शामिल हैं. Cloud Pub/Sub का इस्तेमाल करके, नए मॉड्यूल 19 ऐप्लिकेशन को इस्तेमाल करने के लिए आपको बधाई!

7. खास जानकारी/क्लीनअप

अपने ऐप्लिकेशन को डिप्लॉय करके यह पुष्टि करें कि वह सही तरीके से और किसी भी नतीजे पर दिखने वाले नतीजे के तौर पर काम कर रहा हो. विज़िटर की गिनती को प्रोसेस करने के लिए वर्कर को भी चलाएं. ऐप्लिकेशन की पुष्टि करने के बाद, क्लीनअप करने के लिए सभी चरणों को पूरा करें और आगे के चरणों के बारे में सोचें.

ऐप्लिकेशन डिप्लॉय करें और उसकी पुष्टि करें

पक्का करें कि आपने पहले ही pullq विषय और worker की सदस्यता बना ली है. अगर यह प्रोसेस पूरी हो गई है और सैंपल के तौर पर आपका ऐप्लिकेशन इस्तेमाल के लिए तैयार है, तो अपने ऐप्लिकेशन को gcloud app deploy के साथ डिप्लॉय करें. इसका आउटपुट, मॉड्यूल 18 ऐप्लिकेशन के जैसा होना चाहिए. हालांकि, इसके लिए ज़रूरी है कि आपने सूची बनाने के सभी मौजूदा तरीकों को बदल दिया हो:

b667551dcbab1a09.png

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

आप इसे App Engine बैकएंड सेवा, cron जॉब, /log पर ब्राउज़ करके या कमांड-लाइन एचटीटीपी अनुरोध जारी करके लागू कर सकते हैं. यहां curl के साथ वर्कर कोड को एक्ज़ीक्यूट करने का एक सैंपल दिया गया है (अपने PROJECT_ID को बदलें):

$ curl https://PROJECT_ID.appspot.com/log
DONE (with 1 task[s] logging 1 visitor[s])

इसके बाद, अपडेट की गई संख्या, अगली वेबसाइट विज़िट पर दिखेगी. हो गया!

व्यवस्थित करें

सामान्य

अगर आपका काम अभी हो गया है, तो हमारा सुझाव है कि आप बिलिंग से बचने के लिए अपना App Engine ऐप्लिकेशन बंद कर दें. हालांकि, अगर आपको कुछ और टेस्ट या एक्सपेरिमेंट करना है, तो App Engine प्लैटफ़ॉर्म का एक मुफ़्त कोटा है. अगर इस्तेमाल के टीयर को पार नहीं किया जा रहा है, तो आपसे शुल्क नहीं लिया जाएगा. यह कंप्यूट के लिए है. हालांकि, काम के App Engine की सेवाओं के लिए भी शुल्क लिया जा सकता है. इसलिए, ज़्यादा जानकारी के लिए इसका कीमत पेज देखें. अगर इस माइग्रेशन में क्लाउड की अन्य सेवाएं शामिल हैं, तो उनका बिल अलग से भेजा जाता है. दोनों ही मामलों में, अगर लागू हो, तो "इस कोडलैब के लिए खास" सेक्शन देखें सेक्शन देखें.

अगर आपको पूरी जानकारी देनी है, तो App Engine जैसे Google Cloud के बिना सर्वर वाले कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने पर, मामूली बनाने और स्टोरेज का खर्च उठाना पड़ता है. Cloud Storage की तरह Cloud Build का अपना अलग कोटा होता है. उस इमेज का स्टोरेज, उसके कुछ हिस्से का इस्तेमाल करता है. हालांकि, हो सकता है कि आप किसी ऐसे क्षेत्र में हों जहां ऐसा कोई फ़्री टीयर उपलब्ध न हो. इसलिए, संभावित लागत को कम करने के लिए, अपने स्टोरेज के इस्तेमाल को ध्यान में रखें. Cloud Storage के लिए तय किए गए "फ़ोल्डर" तो आपको इन चीज़ों की समीक्षा करनी चाहिए:

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • ऊपर दिए गए स्टोरेज लिंक, आपके PROJECT_ID और *LOC*ेशन के हिसाब से होते हैं. जैसे, "us" अगर आपका ऐप्लिकेशन अमेरिका में होस्ट किया जाता है.

दूसरी ओर, अगर आपको इस ऐप्लिकेशन या इससे जुड़े दूसरे माइग्रेशन कोडलैब का इस्तेमाल नहीं करना है और सब कुछ पूरी तरह से मिटाना है, तो अपना प्रोजेक्ट बंद कर दें.

इस कोडलैब के लिए खास

नीचे दी गई सेवाएं, इस कोडलैब के लिए यूनीक हैं. ज़्यादा जानकारी के लिए हर प्रॉडक्ट के दस्तावेज़ देखें:

  • Cloud Pub/Sub के अलग-अलग कॉम्पोनेंट में फ़्री टियर होता है; प्रॉडक्ट की कीमत के बारे में बेहतर तरीके से जानने के लिए, ट्रैक के इस्तेमाल की कुल कीमत तय करें. साथ ही, ज़्यादा जानकारी के लिए इसकी कीमत वाला पेज देखें.
  • App Engine Datastore सेवा, Cloud Datastore (Datastore मोड में Cloud Firestore) उपलब्ध कराती है. इसमें एक फ़्री टियर भी है; ज़्यादा जानकारी के लिए, इसके शुल्क की जानकारी देने वाला पेज देखें.

अगले चरण

इस ट्यूटोरियल के अलावा, बंडल की गई लेगसी सेवाओं का इस्तेमाल बंद करने पर फ़ोकस करने वाले अन्य माइग्रेशन मॉड्यूल में ये शामिल हैं:

  • मॉड्यूल 2: App Engine ndb से Cloud NDB पर माइग्रेट करें
  • मॉड्यूल 7-9: App Engine टास्क सूची (पुश टास्क) से क्लाउड टास्क में माइग्रेट करें
  • मॉड्यूल 12-13: App Engine Memcache से Cloud Memorystore में माइग्रेट करना
  • मॉड्यूल 15-16: App Engine Blobstore से Cloud Storage में माइग्रेट करना

Google Cloud में, अब सिर्फ़ बिना सर्वर वाला प्लैटफ़ॉर्म App Engine है. अगर आपके पास कोई छोटा App Engine ऐप्लिकेशन है या कोई ऐसा ऐप्लिकेशन है जिसमें सीमित सुविधाएं हैं और आपको उसे स्टैंडअलोन माइक्रोसर्विस में बदलना है या किसी मोनोलिथिक ऐप्लिकेशन को फिर से इस्तेमाल किए जा सकने वाले कई कॉम्पोनेंट में बांटना है, तो Cloud Functions का इस्तेमाल करने के बारे में सोचें. अगर कंटेनराइज़ेशन आपके ऐप्लिकेशन डेवलपमेंट वर्कफ़्लो का हिस्सा बन गया है, तो खास तौर पर अगर उसमें CI/CD (लगातार इंटिग्रेशन/लगातार डिलीवरी या डिप्लॉयमेंट) पाइपलाइन शामिल है, तो Cloud Run पर माइग्रेट करें. इन स्थितियों की जानकारी यहां दिए गए मॉड्यूल में दी गई है:

  • App Engine से Cloud Functions पर माइग्रेट करना: मॉड्यूल 11 देखें
  • App Engine से Cloud Run पर माइग्रेट करना: अपने ऐप्लिकेशन को Docker के साथ कंटेनर बनाने के लिए, मॉड्यूल 4 देखें. इसके अलावा, कंटेनर, Docker नॉलेज या Dockerfiles के बिना ऐसा करने के लिए मॉड्यूल 5 पर जाएं

बिना सर्वर वाले किसी दूसरे प्लैटफ़ॉर्म पर स्विच करना ज़रूरी नहीं है. हमारा सुझाव है कि कोई भी बदलाव करने से पहले, अपने ऐप्लिकेशन और इस्तेमाल के उदाहरण देखने के लिए सबसे सही विकल्प चुनें.

आप आगे चाहे किसी माइग्रेशन मॉड्यूल पर जाएं, सर्वरलेस माइग्रेशन स्टेशन का पूरा कॉन्टेंट (कोडलैब, वीडियो, सोर्स कोड [जब उपलब्ध हो]) उसके ओपन सोर्स रेपो से ऐक्सेस किया जा सकता है. डेटा स्टोर करने की जगह के README में, यह भी बताया गया है कि किस माइग्रेशन पर विचार करना चाहिए. साथ ही, इसमें किसी "ऑर्डर" के बारे में भी बताया गया है. में तय किया गया है.

8. अन्य संसाधन

डेवलपर के लिए, इस या इससे जुड़े माइग्रेशन मॉड्यूल के साथ-साथ इससे जुड़े अन्य प्रॉडक्ट को एक्सप्लोर करने के लिए, यहां कुछ अतिरिक्त संसाधन दिए गए हैं. इसमें ऐसी जगहें शामिल हैं जहां इस कॉन्टेंट पर सुझाव, शिकायत या राय दी जा सकती है. साथ ही, कोड के लिंक और दस्तावेज़ के ऐसे अलग-अलग हिस्से शामिल हैं जो आपके काम आ सकते हैं.

कोड लैब से जुड़ी समस्याएं/सुझाव

अगर आपको इस कोडलैब के साथ कोई समस्या मिलती है, तो कृपया आवेदन करने से पहले अपनी समस्या का पता लगाएं. खोजने और नई समस्याएं बनाने के लिए लिंक:

माइग्रेशन के लिए संसाधन

यहां दी गई टेबल में, मॉड्यूल 18 (START) और मॉड्यूल 19 (FINISH) के रेपो फ़ोल्डर के लिंक दिए गए हैं.

Codelab

Python 2

Python 3

मॉड्यूल 18

कोड

(लागू नहीं)

मॉड्यूल 19 (यह कोडलैब)

कोड

(Python 2 की तरह ही, जैसा कि ऊपर बताए गए तरीके से app.yaml अपडेट नहीं किया जाता, सिर्फ़ app3.yaml का इस्तेमाल करें)

ऑनलाइन रेफ़रंस

इस ट्यूटोरियल के लिए काम के संसाधन नीचे दिए गए हैं:

App Engine टास्क सूची

Cloud Pub/Sub

App Engine NDB और Cloud NDB (डेटास्टोर)

App Engine प्लैटफ़ॉर्म

क्लाउड से जुड़ी अन्य जानकारी

वीडियो

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.