1. खास जानकारी
सर्वरलेस माइग्रेशन स्टेशन की कोडलैब सीरीज़ (अपने हिसाब से सीखने और प्रैक्टिकल करने वाले ट्यूटोरियल) और इससे जुड़े वीडियो का मकसद, Google Cloud सर्वरलेस डेवलपर की मदद करना है. इससे वे एक या उससे ज़्यादा माइग्रेशन करके, अपने ऐप्लिकेशन को बेहतर बना सकते हैं. इनमें मुख्य रूप से लेगसी सेवाओं से माइग्रेट करना शामिल है. ऐसा करने से, आपके ऐप्लिकेशन को एक जगह से दूसरी जगह ले जाना आसान हो जाता है. साथ ही, आपको ज़्यादा विकल्प और सुविधा मिलती है. इससे आपको Cloud प्रॉडक्ट की ज़्यादा रेंज के साथ इंटिग्रेट करने और उन्हें ऐक्सेस करने में मदद मिलती है. साथ ही, भाषा के नए वर्शन पर आसानी से अपग्रेड किया जा सकता है. शुरुआत में, इस सीरीज़ में मुख्य तौर पर App Engine (स्टैंडर्ड एनवायरमेंट) डेवलपर के लिए कॉन्टेंट शामिल किया गया था. हालांकि, अब इसमें अन्य सर्वरलेस प्लैटफ़ॉर्म के लिए भी कॉन्टेंट शामिल किया गया है. जैसे, Cloud Functions और Cloud Run. इसके अलावा, इसमें अन्य प्लैटफ़ॉर्म के लिए भी कॉन्टेंट शामिल किया गया है.
इस कोडलैब में, आपको Module 1 के कोडलैब में दिए गए सैंपल ऐप्लिकेशन में, App Engine Task Queue के पुश टास्क इस्तेमाल करने का तरीका बताया गया है. मॉड्यूल 7 की ब्लॉग पोस्ट और वीडियो में इस ट्यूटोरियल के बारे में खास जानकारी दी गई है.
इस मॉड्यूल में, हम पुश टास्क का इस्तेमाल करेंगे. इसके बाद, मॉड्यूल 8 में हम इस इस्तेमाल को Cloud Tasks पर माइग्रेट करेंगे. इसके बाद, मॉड्यूल 9 में हम इसे Python 3 और Cloud Datastore पर माइग्रेट करेंगे. पुल किए गए टास्क के लिए Task Queues का इस्तेमाल करने वाले लोग, Cloud Pub/Sub पर माइग्रेट करेंगे. उन्हें मॉड्यूल 18-19 देखना चाहिए.
आपको इनके बारे में जानकारी मिलेगी
- App Engine Task Queue API/बंडल्ड सेवा का इस्तेमाल करना
- Python 2 Flask App Engine NDB ऐप्लिकेशन में, पुश टास्क के इस्तेमाल की सुविधा जोड़ना
आपको किन चीज़ों की ज़रूरत होगी
- चालू GCP बिलिंग खाते वाला Google Cloud प्रोजेक्ट
- Python की बुनियादी जानकारी
- Linux की सामान्य कमांड के बारे में जानकारी होना
- App Engine ऐप्लिकेशन डेवलप और डिप्लॉय करने की बुनियादी जानकारी
- App Engine का मॉड्यूल 1 ऐप्लिकेशन (इसका कोडलैब पूरा करें [सुझाया गया] या रिपॉज़िटरी से ऐप्लिकेशन कॉपी करें)
सर्वे
इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?
Python के साथ अपने अनुभव को आप क्या रेटिंग देंगे?
Google Cloud की सेवाओं को इस्तेमाल करने के अपने अनुभव को आप क्या रेटिंग देंगे?
2. बैकग्राउंड
App Engine Task Queue, पुश और पुल, दोनों तरह के टास्क के साथ काम करती है. ऐप्लिकेशन पोर्टेबिलिटी को बेहतर बनाने के लिए, Google Cloud की टीम का सुझाव है कि Task Queue जैसी लेगसी बंडल की गई सेवाओं से, Cloud की स्टैंडअलोन सेवाओं या तीसरे पक्ष की मिलती-जुलती सेवाओं पर माइग्रेट करें.
- Task Queue push task का इस्तेमाल करने वाले लोगों को Cloud Tasks पर माइग्रेट करना चाहिए.
- Task Queue के पुल टास्क का इस्तेमाल करने वाले लोगों को Cloud Pub/Sub पर माइग्रेट करना चाहिए.
टास्क को पुल करने की सुविधा के बारे में, माइग्रेशन मॉड्यूल 18-19 में बताया गया है. वहीं, टास्क को पुश करने की सुविधा के बारे में मॉड्यूल 7-9 में बताया गया है. App Engine Task Queue के पुश टास्क से माइग्रेट करने के लिए, Module 1 codelab से मिले मौजूदा Flask और App Engine NDB ऐप्लिकेशन में, इसके इस्तेमाल की जानकारी जोड़ें. उस ऐप्लिकेशन में, नया पेज व्यू एक नई विज़िट के तौर पर रजिस्टर होता है. साथ ही, उपयोगकर्ता को हाल ही की विज़िट दिखाता है. पुरानी विज़िट की जानकारी कभी भी दोबारा नहीं दिखाई जाती है. साथ ही, यह Datastore में जगह घेरती है. इसलिए, हम एक पुश टास्क बनाएंगे, ताकि सबसे पुरानी विज़िट की जानकारी अपने-आप मिट जाए. मॉड्यूल 8 में, हम उस ऐप्लिकेशन को Task Queue से Cloud Tasks पर माइग्रेट करेंगे.
इस ट्यूटोरियल में ये चरण शामिल हैं:
- सेटअप/प्रीवर्क
- कॉन्फ़िगरेशन अपडेट करना
- ऐप्लिकेशन कोड में बदलाव करना
3. सेटअप/प्रीवर्क
इस सेक्शन में, यह बताया गया है कि:
- अपना Cloud प्रोजेक्ट सेट अप करना
- बेसलाइन सैंपल ऐप्लिकेशन पाना
- बेसलाइन ऐप्लिकेशन को (फिर से) डिप्लॉय करें और उसकी पुष्टि करें
इन चरणों से यह पक्का किया जाता है कि आप काम करने वाले कोड से शुरुआत कर रहे हैं.
1. प्रोजेक्ट सेट अप करना
अगर आपने मॉड्यूल 1 का कोडलैब पूरा कर लिया है, तो हमारा सुझाव है कि आप उसी प्रोजेक्ट और कोड का फिर से इस्तेमाल करें. इसके अलावा, एक नया प्रोजेक्ट बनाया जा सकता है या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल किया जा सकता है. पक्का करें कि प्रोजेक्ट में, बिलिंग के लिए ऐक्टिव खाता हो और App Engine चालू हो.
2. बेसलाइन सैंपल ऐप्लिकेशन पाना
इस कोडलैब के लिए ज़रूरी है कि आपके पास Module 1 का App Engine ऐप्लिकेशन हो. इसके लिए, Module 1 का कोडलैब पूरा करें (सुझाया गया) या repo से Module 1 का ऐप्लिकेशन कॉपी करें. चाहे आपने बनाया हो या हमने, मॉड्यूल 1 का कोड वह जगह है जहां से हम "शुरू करेंगे." इस कोडलैब में, आपको हर चरण के बारे में बताया गया है. साथ ही, आखिर में ऐसा कोड दिया गया है जो मॉड्यूल 7 के रेपो फ़ोल्डर "FINISH" में मौजूद कोड जैसा है.
- शुरू करें: मॉड्यूल 1 फ़ोल्डर (Python 2)
- FINISH: Module 7 folder (Python 2)
- पूरी रिपो (क्लोन करने या ZIP फ़ाइल डाउनलोड करने के लिए)
भले ही, आपने मॉड्यूल 1 के किसी भी ऐप्लिकेशन का इस्तेमाल किया हो, फ़ोल्डर ऐसा दिखना चाहिए. इसमें lib फ़ोल्डर भी हो सकता है:
$ ls README.md main.py templates app.yaml requirements.txt
3. बेसलाइन ऐप्लिकेशन को (फिर से) डिप्लॉय करना
Module 1 ऐप्लिकेशन को (फिर से) डिप्लॉय करने के लिए, यह तरीका अपनाएं:
- अगर
libफ़ोल्डर मौजूद है, तो उसे मिटाएं. इसके बाद,pip install -t lib -r requirements.txtचलाकरlibको फिर से भरें. अगर आपके पास Python 2 और 3, दोनों इंस्टॉल हैं, तो आपकोpip2कमांड का इस्तेमाल करना पड़ सकता है. - पक्का करें कि आपने
gcloudकमांड-लाइन टूल को इंस्टॉल और शुरू कर लिया हो. साथ ही, आपने इसके इस्तेमाल की समीक्षा कर ली हो. - अगर आपको हर
gcloudकमांड के साथPROJECT_IDनहीं डालना है, तो अपने Cloud प्रोजेक्ट कोgcloud config set projectPROJECT_IDके साथ सेट करें. gcloud app deployकी मदद से, सैंपल ऐप्लिकेशन को डिप्लॉय करना- पुष्टि करें कि मॉड्यूल 1 ऐप्लिकेशन, उम्मीद के मुताबिक काम कर रहा है. साथ ही, इसमें हाल ही की विज़िट की जानकारी दिख रही है. इसकी जानकारी यहां दी गई है

4. कॉन्फ़िगरेशन अपडेट करना
App Engine की स्टैंडर्ड कॉन्फ़िगरेशन फ़ाइलों (app.yaml, requirements.txt, appengine_config.py) में कोई बदलाव करने की ज़रूरत नहीं है.
5. ऐप्लिकेशन की फ़ाइलों में बदलाव करना
मुख्य आवेदन फ़ाइल main.py है. इस सेक्शन में मौजूद सभी अपडेट, उस फ़ाइल से जुड़े हैं. वेब टेंप्लेट, templates/index.html में भी एक छोटा अपडेट किया गया है. इस सेक्शन में ये बदलाव लागू किए जाने हैं:
- इंपोर्ट अपडेट करना
- पुश टास्क जोड़ें
- टास्क हैंडलर जोड़ना
- वेब टेंप्लेट अपडेट करें
1. इंपोर्ट अपडेट करना
google.appengine.api.taskqueue को इंपोर्ट करने से, टास्क क्यू की सुविधा मिलती है. Python स्टैंडर्ड लाइब्रेरी के कुछ पैकेज भी ज़रूरी हैं:
- हम सबसे पुरानी विज़िट को मिटाने का टास्क जोड़ रहे हैं. इसलिए, ऐप्लिकेशन को टाइमस्टैंप से डील करना होगा. इसका मतलब है कि
timeऔरdatetimeका इस्तेमाल करना होगा. - टास्क पूरा करने के बारे में काम की जानकारी लॉग करने के लिए, हमें
loggingकी ज़रूरत होती है.
इन सभी इंपोर्ट को जोड़ने के बाद, यहां बताया गया है कि इन बदलावों से पहले और बाद में आपका कोड कैसा दिखता है:
BEFORE:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
AFTER:
from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
2. पुश टास्क जोड़ें (टास्क के लिए डेटा इकट्ठा करें, नया टास्क कतार में लगाएं)
पुश क्यू के दस्तावेज़ में बताया गया है कि "किसी टास्क को प्रोसेस करने के लिए, आपको उसे पुश क्यू में जोड़ना होगा. App Engine, default नाम की एक डिफ़ॉल्ट पुश क्यू उपलब्ध कराता है. यह डिफ़ॉल्ट सेटिंग के साथ कॉन्फ़िगर किया जाता है और इस्तेमाल के लिए तैयार होता है. अगर आपको सिर्फ़ डिफ़ॉल्ट सूची में सभी टास्क जोड़ने हैं, तो आपको अन्य सूचियां बनाने और उन्हें कॉन्फ़िगर करने की ज़रूरत नहीं है." इस कोडलैब में, default क्यू का इस्तेमाल किया गया है. एक जैसी या अलग-अलग विशेषताओं वाली पुश कतारें तय करने के बारे में ज़्यादा जानने के लिए, पुश कतारें बनाने से जुड़ा दस्तावेज़ पढ़ें.
इस कोडलैब का मुख्य मकसद, default पुश क्यू में एक ऐसा टास्क जोड़ना है जो Datastore से उन पुरानी विज़िट को मिटा सके जो अब नहीं दिखती हैं. बेसलाइक ऐप्लिकेशन, हर विज़िट (GET अनुरोध से /) को रजिस्टर करता है. इसके लिए, वह नई Visit इकाई बनाता है. इसके बाद, वह हाल ही की विज़िट को फ़ेच करके दिखाता है. सबसे पुरानी विज़िट में से किसी को भी फिर से कभी नहीं दिखाया जाएगा या इस्तेमाल नहीं किया जाएगा. इसलिए, पुश टास्क सबसे पुरानी विज़िट से पहले की सभी विज़िट मिटा देता है. इसके लिए, ऐप्लिकेशन के व्यवहार में थोड़ा बदलाव करना होगा:
- हाल की विज़िट के बारे में क्वेरी करते समय, उन विज़िट को तुरंत वापस लाने के बजाय, ऐप्लिकेशन में बदलाव करें. इससे आखिरी
Visitका टाइमस्टैंप सेव हो जाएगा. यह सबसे पुराना टाइमस्टैंप होता है. इससे पुरानी सभी विज़िट को मिटाना सुरक्षित होता है. - इस टाइमस्टैंप को पेलोड के तौर पर इस्तेमाल करके, एक पुश टास्क बनाएं. साथ ही, इसे टास्क हैंडलर को भेजें. इसे एचटीटीपी
POSTसे/trimके ज़रिए ऐक्सेस किया जा सकता है. खास तौर पर, Datastore टाइमस्टैंप को बदलने के लिए स्टैंडर्ड Python यूटिलिटी का इस्तेमाल करें. साथ ही, इसे टास्क को फ़्लोट के तौर पर भेजें. हालांकि, इसे स्ट्रिंग के तौर पर भी लॉग करें और उस स्ट्रिंग को सेंटिनल वैल्यू के तौर पर दिखाएं, ताकि उपयोगकर्ता को दिखाया जा सके.
यह सब fetch_visits() में होता है. इन अपडेट को करने से पहले और बाद में, यह इस तरह दिखता है:
BEFORE:
def fetch_visits(limit):
return (v.to_dict() for v in Visit.query().order(
-Visit.timestamp).fetch(limit))
AFTER:
def fetch_visits(limit):
'get most recent visits and add task to delete older visits'
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
taskqueue.add(url='/trim', params={'oldest': oldest})
return (v.to_dict() for v in data), oldest_str
3. टास्क हैंडलर जोड़ें (टास्क चलने पर कॉल किया गया कोड)
fetch_visits() में पुरानी विज़िट को आसानी से मिटाया जा सकता था. हालांकि, ध्यान रखें कि इस सुविधा का इस्तेमाल करने वाले व्यक्ति से कोई लेना-देना नहीं है. यह एक सहायक सुविधा है. साथ ही, यह ऐप्लिकेशन के स्टैंडर्ड अनुरोधों के बाहर, एसिंक्रोनस तरीके से प्रोसेस करने के लिए एक अच्छा विकल्प है. Datastore में कम जानकारी होने की वजह से, क्वेरी के नतीजे तेज़ी से मिलेंगे. इससे, उपयोगकर्ता को फ़ायदा होगा. एक नया फ़ंक्शन trim() बनाएं. इसे /trim पर टास्क क्यू POST के अनुरोध के ज़रिए कॉल किया जाता है. यह फ़ंक्शन ये काम करता है:
- यह "सबसे पुरानी विज़िट" का टाइमस्टैंप पेलोड निकालता है
- यह टाइमस्टैंप से पुरानी सभी इकाइयों को ढूंढने के लिए, Datastore क्वेरी जारी करता है.
- यह "सिर्फ़ कुंजियां" क्वेरी का इस्तेमाल करता है, क्योंकि इसमें उपयोगकर्ता के असल डेटा की ज़रूरत नहीं होती.
- यह कुकी, मिटाई जाने वाली इकाइयों की संख्या को लॉग करती है. इसमें शून्य भी शामिल है.
- किसी भी इकाई को मिटाने के लिए
ndb.delete_multi()कॉल (अगर नहीं है, तो छोड़ दिया जाता है). - यह फ़ंक्शन, खाली स्ट्रिंग दिखाता है. साथ ही, एचटीटीपी 200 कोड भी दिखाता है.
यहां दी गई trim() में यह सब देखा जा सकता है. इसे fetch_visits() के ठीक बाद main.py में जोड़ें:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = request.form.get('oldest', type=float)
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info('No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
4. वेब टेंप्लेट अपडेट करें
अगर यह वैरिएबल मौजूद है, तो सबसे पुराना टाइमस्टैंप दिखाने के लिए, इस Jinja2 शर्त के साथ वेब टेंप्लेट, templates/index.html को अपडेट करें:
{% if oldest is defined %}
<b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}
इस स्निपेट को, दिखाई गई विज़िट की सूची के बाद और बॉडी को बंद करने से पहले जोड़ें, ताकि आपका टेंप्लेट ऐसा दिखे:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
{% if oldest is defined %}
<b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}
</body>
</html>
6. खास जानकारी/सफ़ाई
इस सेक्शन में, ऐप्लिकेशन को डिप्लॉय करके इस कोडलैब को पूरा किया गया है. साथ ही, यह पुष्टि की गई है कि ऐप्लिकेशन ठीक से काम कर रहा है और आउटपुट में कोई गड़बड़ी नहीं है. ऐप्लिकेशन की पुष्टि होने के बाद, क्लीन-अप करें और अगले चरणों पर विचार करें.
ऐप्लिकेशन डिप्लॉय करना और उसकी पुष्टि करना
gcloud app deploy का इस्तेमाल करके ऐप्लिकेशन डिप्लॉय करें. आउटपुट, मॉड्यूल 1 ऐप्लिकेशन के आउटपुट जैसा ही होना चाहिए. हालांकि, सबसे नीचे एक नई लाइन में यह जानकारी दिखनी चाहिए कि कौनसी विज़िट मिटाई जाएंगी:

कोडलैब पूरा करने के लिए बधाई. आपका कोड अब Module 7 repo folder में मौजूद कोड से मेल खाना चाहिए. अब यह मॉड्यूल 8 में Cloud Tasks पर माइग्रेट करने के लिए तैयार है.
व्यवस्थित करें
सामान्य
अगर आपको अभी और काम नहीं करना है, तो हमारा सुझाव है कि आप अपने App Engine ऐप्लिकेशन को बंद कर दें, ताकि आपसे शुल्क न लिया जाए. हालांकि, अगर आपको कुछ और टेस्ट या एक्सपेरिमेंट करने हैं, तो App Engine प्लैटफ़ॉर्म पर मुफ़्त कोटा उपलब्ध है. इसलिए, जब तक आप इस्तेमाल की उस सीमा से ज़्यादा नहीं होते हैं, तब तक आपसे कोई शुल्क नहीं लिया जाएगा. यह शुल्क कंप्यूट के लिए है. हालांकि, App Engine की सेवाओं के लिए भी शुल्क लिया जा सकता है. इसलिए, ज़्यादा जानकारी के लिए कीमत वाला पेज देखें. अगर इस माइग्रेशन में अन्य क्लाउड सेवाएं शामिल हैं, तो उनके लिए अलग से बिल भेजा जाता है. अगर लागू हो, तो दोनों ही मामलों में, नीचे दिया गया "इस कोडलैब के लिए खास जानकारी" सेक्शन देखें.
पूरी जानकारी के लिए बता दें कि App Engine जैसे Google Cloud के सर्वरलेस कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने से, बिल्ड और स्टोरेज के लिए मामूली शुल्क लगता है. Cloud Build का अपना मुफ़्त कोटा होता है. साथ ही, Cloud Storage का भी अपना मुफ़्त कोटा होता है. उस इमेज को सेव करने के लिए, स्टोरेज कोटा का कुछ हिस्सा इस्तेमाल किया जाता है. हालांकि, ऐसा हो सकता है कि आपके देश/इलाके में बिना किसी शुल्क के स्टोरेज इस्तेमाल करने की सुविधा उपलब्ध न हो. इसलिए, स्टोरेज के इस्तेमाल पर नज़र रखें, ताकि संभावित लागत को कम किया जा सके. Cloud Storage के कुछ "फ़ोल्डर" की समीक्षा करनी चाहिए. इनमें ये शामिल हैं:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- ऊपर दिए गए स्टोरेज लिंक, आपके
PROJECT_IDऔर *LOC*ation पर निर्भर करते हैं. उदाहरण के लिए, अगर आपका ऐप्लिकेशन अमेरिका में होस्ट किया गया है, तो "us" दिखेगा.
दूसरी ओर, अगर आपको इस ऐप्लिकेशन या माइग्रेशन से जुड़े अन्य कोडलैब का इस्तेमाल नहीं करना है और आपको सब कुछ पूरी तरह से मिटाना है, तो अपना प्रोजेक्ट बंद करें.
इस कोडलैब के लिए खास तौर पर
यहां दी गई सेवाएं, इस कोड सीखने की लैब के लिए खास तौर पर बनाई गई हैं. ज़्यादा जानकारी के लिए, हर प्रॉडक्ट का दस्तावेज़ देखें:
- App Engine की Task Queue सेवा के लिए, लेगसी बंडल की गई सेवाओं के लिए कीमत वाले पेज के मुताबिक कोई अतिरिक्त बिलिंग नहीं होती. जैसे, Task Queue.
- App Engine Datastore सेवा, Cloud Datastore (Cloud Firestore in Datastore mode) से मिलती है. इसमें भी बिना शुल्क वाली सेवा उपलब्ध है. ज़्यादा जानकारी के लिए, इसका कीमत वाला पेज देखें.
अगले चरण
इस "माइग्रेशन" में, आपने Module 1 के सैंपल ऐप्लिकेशन में Task Queue की पुश क्यू सुविधा का इस्तेमाल किया. इससे, वेबसाइट पर आने वाले लोगों को ट्रैक करने की सुविधा जोड़ी गई. इससे Module 7 का सैंपल ऐप्लिकेशन बना. अगले माइग्रेशन में, आपको App Engine की पुश टास्क सुविधा से Cloud Tasks पर अपग्रेड करने का तरीका बताया जाएगा. हालांकि, अगर आपको ऐसा करना है, तो ही अपग्रेड करें. साल 2021 के पतझड़ के सीज़न से, Python 3 पर अपग्रेड करते समय उपयोगकर्ताओं को Cloud Tasks पर माइग्रेट करने की ज़रूरत नहीं है. इस बारे में ज़्यादा जानने के लिए, अगला सेक्शन पढ़ें.
अगर आपको Cloud Tasks पर माइग्रेट करना है, तो अगला चरण Module 8 codelab है. इसके अलावा, माइग्रेट करने के लिए अन्य सेवाएं भी उपलब्ध हैं. जैसे, Cloud Datastore, Cloud Memorystore, Cloud Storage या Cloud Pub/Sub (पुल कतारें). Cloud Run और Cloud Functions पर, अलग-अलग प्रॉडक्ट के माइग्रेशन भी किए जा सकते हैं. Serverless Migration Station का सारा कॉन्टेंट (कोड लैब, वीडियो, सोर्स कोड [उपलब्ध होने पर]) इसके ओपन सोर्स रेपो पर ऐक्सेस किया जा सकता है.
7. Python 3 पर माइग्रेट करना
साल 2021 के पतझड़ में, App Engine टीम ने बंडल की गई कई सेवाओं के लिए सहायता को बढ़ा दिया. अब ये सेवाएं, दूसरी जनरेशन के रनटाइम में भी उपलब्ध हैं. पहले ये सिर्फ़ पहली जनरेशन के रनटाइम में उपलब्ध थीं. इसका मतलब है कि अब आपको अपने ऐप्लिकेशन को Python 3 पर पोर्ट करते समय, App Engine Task Queue जैसी बंडल की गई सेवाओं से, Cloud Tasks जैसे स्टैंडअलोन Cloud या तीसरे पक्ष के विकल्पों पर माइग्रेट करने की ज़रूरत नहीं है. दूसरे शब्दों में कहें, तो Python 3 App Engine ऐप्लिकेशन में Task Queue का इस्तेमाल तब तक किया जा सकता है, जब तक कोड को अगली जनरेशन के रनटाइम से बंडल की गई सेवाओं को ऐक्सेस करने के लिए फिर से तैयार नहीं किया जाता.
बंडल की गई सेवाओं के इस्तेमाल को Python 3 में माइग्रेट करने के तरीके के बारे में ज़्यादा जानने के लिए, मॉड्यूल 17 का कोडलैब और उससे जुड़ा वीडियो देखें. हालांकि, यह विषय मॉड्यूल 7 के दायरे से बाहर है. यहां मॉड्यूल 1 और 7 के उन ऐप्लिकेशन के Python 3 वर्शन दिए गए हैं जिन्हें Python 3 पर पोर्ट किया गया है. ये अब भी App Engine NDB और Task Queue का इस्तेमाल कर रहे हैं.
8. अन्य संसाधन
यहां डेवलपर के लिए कुछ और संसाधन दिए गए हैं. इनकी मदद से, डेवलपर इस या इससे मिलते-जुलते माइग्रेशन मॉड्यूल के साथ-साथ इससे जुड़े प्रॉडक्ट के बारे में ज़्यादा जान सकते हैं. इसमें इस कॉन्टेंट पर सुझाव/राय देने या शिकायत करने की जगह, कोड के लिंक, और कई तरह के दस्तावेज़ शामिल हैं, जो आपके काम आ सकते हैं.
कोडलैब से जुड़ी समस्याएं/सुझाव/राय
अगर आपको इस कोडलैब में कोई समस्या मिलती है, तो कृपया शिकायत दर्ज करने से पहले अपनी समस्या खोजें. नई समस्याएं खोजने और बनाने के लिए लिंक:
माइग्रेशन के लिए उपलब्ध संसाधन
मॉड्यूल 2 (START) और मॉड्यूल 7 (FINISH) के लिए, रेपो फ़ोल्डर के लिंक यहां दी गई टेबल में देखे जा सकते हैं.
कोडलैब | Python 2 | Python 3 |
कोड (इस ट्यूटोरियल में शामिल नहीं है) | ||
मॉड्यूल 7 (यह कोडलैब) | कोड (इस ट्यूटोरियल में शामिल नहीं है) |
ऑनलाइन संसाधन
यहां कुछ ऑनलाइन संसाधन दिए गए हैं, जो इस ट्यूटोरियल के लिए काम के हो सकते हैं:
App Engine टास्क क्यू
- App Engine की टास्क क्यू सेवा के बारे में खास जानकारी
- App Engine की टास्क क्यू में पुश क्यू के बारे में खास जानकारी
- Task Queue की पुश कतारें बनाना
queue.yamlरेफ़रंसqueue.yamlबनाम Cloud Tasks- पुश क्यू को Cloud Tasks में माइग्रेट करने से जुड़ी गाइड
- App Engine Task Queue की पुश कतारों को Cloud Tasks के दस्तावेज़ के सैंपल में ले जाने का तरीका
App Engine प्लैटफ़ॉर्म
- App Engine के दस्तावेज़
- Python 2 App Engine (स्टैंडर्ड एनवायरमेंट) रनटाइम
- Python 2 App Engine पर App Engine की पहले से मौजूद लाइब्रेरी का इस्तेमाल करना
- Python 3 App Engine (स्टैंडर्ड एनवायरमेंट) रनटाइम
- App Engine के स्टैंडर्ड एनवायरमेंट के Python 2 और Python 3 रनटाइम के बीच अंतर
- Python 2 से 3 App Engine (स्टैंडर्ड एनवायरमेंट) में माइग्रेट करने से जुड़ी गाइड
- App Engine की कीमत और कोटे की जानकारी
- App Engine प्लैटफ़ॉर्म की दूसरी जनरेशन लॉन्च की गई (2018)
- पहली और दूसरी जनरेशन के प्लैटफ़ॉर्म की तुलना करना
- लेगसी रनटाइम के लिए लंबे समय तक सहायता
- दस्तावेज़ माइग्रेट करने के उदाहरण
- कम्यूनिटी के योगदान से तैयार किए गए माइग्रेशन के सैंपल
क्लाउड से जुड़ी अन्य जानकारी
- Google Cloud Platform पर Python
- Google Cloud की Python क्लाइंट लाइब्रेरी
- Google Cloud का "हमेशा के लिए बिना शुल्क" वाला टियर
- Google Cloud SDK (
gcloudकमांड-लाइन टूल) - Google Cloud के सभी दस्तावेज़
वीडियो
- Serverless Migration Station
- Serverless Expeditions
- Google Cloud Tech की सदस्यता लें
- Google Developers की सदस्यता लें
लाइसेंस
इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.