सामान्य "Google अनुवाद" App Engine, Cloud Functions, और Cloud Run पर Express.js ऐप्लिकेशन

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

कोडलैब (अपने हिसाब से इस्तेमाल किए जाने वाले टूल) की इस सीरीज़ का मकसद, डेवलपर की मदद करना है, ताकि वे अपने ऐप्लिकेशन को डिप्लॉय करते समय मौजूद कई विकल्पों को समझ सकें. आप एक आसान वेब ऐप्लिकेशन में Google Cloud Translation API को इस्तेमाल करने के तरीके के बारे में जान पाएंगे. इस ऐप्लिकेशन को स्थानीय तौर पर चलाया जा सकता है या इसे बिना सर्वर वाले कंप्यूट प्लैटफ़ॉर्म (App Engine, Cloud Functions या Cloud Run) पर डिप्लॉय किया जा सकता है.

Node.js के साथ आपको Express.js वेब फ़्रेमवर्क का इस्तेमाल करके यह JavaScript ट्यूटोरियल बनाना होगा. यहां आपको बिना सर्वर वाले प्लैटफ़ॉर्म से Google Cloud API को ऐक्सेस करने का तरीका भी पता चलेगा. इस ऐप्लिकेशन के सभी वर्शन "बिना सर्वर वाले बिना सर्वर" के हैं ओपन सोर्स रेपो, जिसमें इस ऐप्लिकेशन का Python वर्शन और स्वतंत्र कोडलैब (कोड बनाना सीखना) शामिल है. रेपो, ऐसे मिलते-जुलते ऐप्लिकेशन को भी होस्ट करता है जो डेवलपर को बताते हैं कि हमारे बिना सर्वर वाले प्लैटफ़ॉर्म से, गैर-Cloud Google API को ऐक्सेस कैसे करें.

यह कोडलैब इस ऐप्लिकेशन को ऊपर दिए गए बोल्ड प्लैटफ़ॉर्म पर डिप्लॉय करने पर फ़ोकस करता है.

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

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

  • Google Cloud प्रोजेक्ट, जिसमें चालू क्लाउड बिलिंग खाता हो
  • स्थानीय तौर पर चलाने के लिए इंस्टॉल किया गया वेब फ़्रेमवर्क ( Python ट्यूटोरियल करने वाले लोगों के लिए Flask या JavaScript/Node.js ट्यूटोरियल करने वालों के लिए एक्सप्रेस
  • Google Cloud डिप्लॉयमेंट के लिए, कम से कम एक अलग कंप्यूट प्लैटफ़ॉर्म चालू किया गया है
  • प्रोग्रामिंग की बुनियादी स्किल (Python या JavaScript/Node.js)
  • ऑपरेटिंग सिस्टम के बुनियादी निर्देशों के बारे में काम करने की जानकारी

सर्वे

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

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

Python या Node.js के साथ डेवलप करने के अपने अनुभव को आप कितनी रेटिंग देंगे/देंगी?

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

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

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

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान PROJECT_ID के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा किसी अन्य प्लैटफ़ॉर्म पर बिलिंग न करने के लिए, संसाधनों को बंद करने के लिए, "साफ़-सफ़ाई" का पालन करें कोडलैब के आखिर में दिए गए निर्देश देखें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

3. Translation API चालू करें

इस सेक्शन में, आपको Google API को चालू करने का तरीका बताया जाएगा. हमारे सैंपल ऐप्लिकेशन के लिए, आपको Cloud Translation API चालू करना होगा. सैंपल ऐप्लिकेशन को किस प्लैटफ़ॉर्म पर डिप्लॉय किया जा रहा है, इसके आधार पर आपको App Engine, Cloud Functions, और/या Cloud Run (साथ ही Cloud Artifact Registry) भी चालू करने होंगे.

Google API चालू करना

शुरुआती जानकारी

आप अपने ऐप्लिकेशन में चाहे जिस Google API का इस्तेमाल करना चाहते हों वह चालू होना चाहिए. कमांड-लाइन या Cloud Console पर जाकर, एपीआई चालू किए जा सकते हैं. एपीआई को चालू करने की प्रोसेस एक जैसी है. इसलिए, जब एक एपीआई चालू किया जाता है, तो इसी तरह दूसरा एपीआई भी चालू किया जा सकता है.

पहला विकल्प: gcloud कमांड-लाइन इंटरफ़ेस (क्लाउड शेल या लोकल एनवायरमेंट)

हालांकि, Cloud Console से एपीआई चालू करना सामान्य बात है, लेकिन कुछ डेवलपर कमांड लाइन से ही सारे काम करना पसंद करते हैं. ऐसा करने के लिए, आपको एपीआई की "सेवा का नाम" खोजना होगा. यह यूआरएल जैसा लग रहा है: SERVICE_NAME.googleapis.com. इन्हें इस्तेमाल किए जा सकने वाले प्रॉडक्ट के चार्ट में देखा जा सकता है. इसके अलावा, Google Discovery API की मदद से, प्रोग्राम बनाकर इनके लिए क्वेरी की जा सकती है.

Cloud Shell का इस्तेमाल करके या gcloud कमांड-लाइन टूल इंस्टॉल किए हुए आपके लोकल डेवलपमेंट एनवायरमेंट का इस्तेमाल करके), इस जानकारी के साथ एपीआई को चालू किया जा सकता है. इसके लिए, यह तरीका अपनाएं:

gcloud services enable SERVICE_NAME.googleapis.com

पहला उदाहरण: Cloud Vision API को चालू करना

gcloud services enable vision.googleapis.com

उदाहरण 2: Google App Engine को चालू करना

gcloud services enable appengine.googleapis.com

तीसरा उदाहरण: एक अनुरोध से कई एपीआई चालू करें. उदाहरण के लिए, अगर इस कोडलैब के व्यूअर किसी ऐप्लिकेशन को Cloud Translation API से App Engine, Cloud Functions, और Cloud Run में डिप्लॉय कर रहे हैं, तो कमांड लाइन यह होगी:

gcloud services enable appengine.googleapis.com cloudfunctions.googleapis.com artifactregistry.googleapis.com run.googleapis.com translate.googleapis.com

यह निर्देश App Engine, Cloud Functions, Cloud Run, और Cloud Translation API को चालू करता है. इसके अलावा, यह Cloud Artifact Registry को चालू कर देता है. इसकी वजह यह है कि कंटेनर इमेज को Cloud Build सिस्टम में रजिस्टर किया जाना चाहिए, ताकि उन्हें Cloud Run पर डिप्लॉय किया जा सके.

दूसरा विकल्प: Cloud Console

एपीआई मैनेजर में जाकर भी, Google API को चालू किया जा सकता है. Cloud Console में, एपीआई मैनेजर पर जाएं और लाइब्रेरी चुनें.

fb0f1d315f122d4a.png

मिलते-जुलते नतीजे देखने के लिए, खोज बार में किसी एपीआई का नाम डालें:

2275786a24f8f204.png

वह एपीआई चुनें जिसे आपको चालू करना है और चालू करें बटन पर क्लिक करें:

7960a6752a1da767.png

आप चाहे किसी भी Google API का इस्तेमाल करना चाहते हों, सभी एपीआई को चालू करने की प्रोसेस एक जैसी ही होती है.

लागत

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

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

उपयोगकर्ताओं को एपीआई को चालू करने से पहले, किसी भी एपीआई के लिए कीमत की जानकारी देखनी चाहिए. जैसे, Cloud Vision API की कीमत पेज. खास तौर पर यह ध्यान रखना चाहिए कि क्या एपीआई का कोई फ़्री टियर है और अगर उपलब्ध है, तो वह क्या है. अगर आपने हर दिन या महीने की तय सीमा के अंदर रहकर काम किया है, तो आपसे कोई शुल्क नहीं लिया जाएगा. Google प्रॉडक्ट ग्रुप एपीआई के हिसाब से, कीमत और मुफ़्त टियर अलग-अलग होते हैं. उदाहरण:

Google के अलग-अलग प्रॉडक्ट के लिए, अलग-अलग तरीके से बिल भेजा जाता है. इसलिए, पक्का करें कि आपने उस जानकारी के लिए सही दस्तावेज़ दिए हों.

पक्का करना कि कौनसी सेवाएं चालू हैं

पक्का करें कि एपीआई मैनेजर में, ऊपर बताए गए तरीके से Cloud Translation API का इस्तेमाल किया जा रहा है. अगर आपने कमांड-लाइन से, बिना सर्वर वाले प्लैटफ़ॉर्म को चालू नहीं किया है, तो Cloud Console में उनसे जुड़े हर डैशबोर्ड से ऐसा किया जा सकता है: App Engine, Cloud Functions, Cloud Run.

Cloud Console से एपीआई को चालू करने से जुड़ी विज़ुअल जानकारी काफ़ी अहम होती है. हालांकि, gcloud टूल का इस्तेमाल ज़्यादा तेज़ी से किया जा सकता है. इस टूल में कुछ ही सेकंड में सभी सेवाएं चालू हो जाती हैं:

$ gcloud services enable appengine.googleapis.com \
cloudfunctions.googleapis.com artifactregistry.googleapis.com \
run.googleapis.com translate.googleapis.com
Operation "operations/acf.p2-xxxxxx035451-704918f2-5470-4436-9bdd-c3b204yyyyyy" finished successfully.

कीमत के बारे में ज़्यादा जानकारी

लागत के बारे में ऊपर दिया गया सेक्शन सभी Google API पर सामान्य है. चलिए, इस ट्यूटोरियल की ज़्यादा खास बातों पर चर्चा करते हैं. हालांकि, इसका हर महीने का कोटा कुल "हमेशा मुफ़्त" सूची में शामिल नहीं है" टीयर की खास जानकारी वाले पेज पर दिखता है, तो Translation API के कीमत तय करने वाले पेज पर यह जानकारी मिलती है कि सभी उपयोगकर्ताओं को हर महीने तय संख्या में अनुवाद किए गए वर्ण मिलते हैं. इस थ्रेशोल्ड से नीचे रहने पर, एपीआई से कोई शुल्क नहीं लिया जाएगा. Google Cloud के बिना सर्वर वाले प्लैटफ़ॉर्म का इस्तेमाल करने की लागत के बारे में ज़्यादा जानने के लिए, डेटा स्टोर करने की जगह का लागत सेक्शन देखें. "स्टोरेज खाली करें" सेक्शन में इस बारे में चर्चा की जाएगी कि कोडलैब का यह मॉड्यूल पूरा होने के बाद, बिलिंग की सुविधा कैसे बंद की जाए.

4. सैंपल ऐप्लिकेशन कोड पाएं

ZIP या क्लोन रिपो डाउनलोड करें

  • ZIP फ़ाइल डाउनलोड करें या git clone https://github.com/googlecodelabs/cloud-nebulous-serverless.git की मदद से रेपो का क्लोन बनाएं
  • अगर आपके पास लोकल डेवलपर एनवायरमेंट नहीं है और आपको Cloud Shell में यह ट्यूटोरियल देखना है, तो यहां दिए गए git clone निर्देश से ही रेपो का क्लोन बनाएं.
  • ZIP फ़ाइल को उसके हरे कोड बटन से भी ऐक्सेस किया जा सकता है, जैसा कि इस स्क्रीनशॉट में दिखाया गया है:

5cd6110c4414cf65.png

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

5. Node.js के एनवायरमेंट की पुष्टि करें

Node.js के एनवायरमेंट को सेट अप करने के लिए, यह तरीका अपनाएं:

  1. पक्का करें कि आपने Node (>=10) और NPM (>=6) के कंटेंपररी वर्शन इंस्टॉल किए हैं
  2. वहां जाएं जहां आपने रेपो को क्लोन किया था (या ZIP फ़ाइल को अनज़िप किया था) फिर cloud/nodejs फ़ोल्डर पर जाएं
  3. पुष्टि करें कि package.json मौजूद है. इसके बाद, npm install चलाएं

ऊपर दिए गए #1 के लिए, आप पुष्टि कर सकते हैं कि आपके पास कमांड-लाइन में क्या-क्या वर्शन हैं:

$ node -v
v17.0.1
$ npm -v
8.1.0

6. सैंपल ऐप्लिकेशन के बारे में जानकारी

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

package.json कॉन्फ़िगरेशन फ़ाइल से यह पता चलता है कि इस ऐप्लिकेशन के लिए, तीसरे पक्ष के कौनसे पैकेज की ज़रूरत है (ध्यान दें कि पैकेज वर्शन, यहां दी गई सूची में बताए गए वर्शन के अलावा भी अपडेट किए जा सकते हैं):

{
  "name": "cloud-nebulous-serverless-nodejs",
  "version": "0.0.1",
  "description": "Nebulous Serverless sample app",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "test": "mocha test/test_neb.js"
  },
  "author": "Google LLC",
  "license": "Apache-2.0",
  "dependencies": {
    "@google-cloud/translate": "^6.3.1",
    "express": "^4.17.1",
    "nunjucks": "^3.2.3"
  },
  "devDependencies": {
    "mocha": "^9.1.3",
    "supertest": "^6.1.6"
  }
}

अब index.js फ़ाइल खोलें, ताकि हम देख सकें कि यह कैसे काम करती है. लाइसेंस के बारे में टिप्पणी की गई लाइनों को हटाने पर, सबसे ऊपर और सबसे नीचे ऐसा दिखता है:

const express = require('express');
const nunjucks = require('nunjucks');
const {TranslationServiceClient} = require('@google-cloud/translate');

const app = express();
app.use(express.urlencoded({extended: true}));
nunjucks.configure('templates', {autoescape: true, express: app});
const TRANSLATE = new TranslationServiceClient();

const PORT = process.env.PORT || 8080;
const SOURCE = ['en', 'English'];
const TARGET = ['es', 'Spanish'];
let parent;
TRANSLATE.getProjectId().then(result => {
    parent = `projects/${result}`;
});


if (!process.env.FUNCTION_TARGET) {
    app.listen(PORT, () =>
        console.log(`Listening on port ${PORT}`)
    );
}

# . . . [translate() function definition] . . .

app.all('/', translate);
module.exports = {
    app
};
  1. require में फ़्रेमवर्क और टेंप्लेट करने की सुविधा के साथ-साथ Cloud Translation API क्लाइंट लाइब्रेरी भी उपलब्ध होती है.
  2. ग्लोबल वैरिएबल, वेब ऐप्लिकेशन, Cloud प्रोजेक्ट आईडी, Translation API क्लाइंट, पैरंट "जगह की जानकारी का पाथ" दिखाते हैं के साथ-साथ SOURCE और TARGET भाषाओं के लिए उपलब्ध है. इस मामले में, यह अंग्रेज़ी (en) और स्पैनिश (es) है. हालांकि, इन वैल्यू को बेझिझक Cloud Translation API में इस्तेमाल होने वाले अन्य भाषा कोड में भी बदला जा सकता है.
  3. हर जोड़े का पहला एलिमेंट (SOURCE और TARGET) भाषा कोड है. वहीं दूसरा एलिमेंट, भाषा का नाम है. इसे सिर्फ़ डिसप्ले के लिए इस्तेमाल किया जाता है, क्योंकि एपीआई के काम का नहीं है.
  4. सबसे नीचे दी गई कुछ लाइनों का मतलब है कि सभी एचटीटीपी अनुरोधों को translate() पर भेजना है और फिर app ऐप्लिकेशन ऑब्जेक्ट को एक्सपोर्ट करना है.

आखिर में, index.js के बीच में ऐप्लिकेशन का मुख्य बिंदु है, translate() फ़ंक्शन:

async function translate(req, rsp) {
    let text = null;
    let translated = null;
    if (req.method === 'POST') {
        text = req.body.text.trim();
        if (text) {
            const data = {
                contents: [text],
                parent: parent,
                targetLanguageCode: TARGET[0]
            };
            const [response] = await TRANSLATE.translateText(data);
            translated = response.translations[0].translatedText;
        }
    }
    const context = {
        orig:  {text: text, lc: SOURCE},
        trans: {text: translated, lc: TARGET}
    };
    rsp.render('index.html', context);
}

मुख्य फ़ंक्शन, उपयोगकर्ता से इनपुट लेने का काम करता है और काम को बेहतर बनाने के लिए Translation API को कॉल करता है. आइए, इसके बारे में जानते हैं:

  1. फ़ॉर्म के बेसिक वैरिएबल को रीसेट करें. यह मुख्य रूप से जीईटी अनुरोधों के लिए है, क्योंकि पोस्ट अनुरोधों में ऐसा डेटा होगा जो इनकी जगह ले लेगा.
  2. अगर यह एक पीओएसटी है, तो अनुवाद करने के लिए टेक्स्ट लें और अगर वह खाली नहीं है, तो एपीआई मेटाडेटा की ज़रूरत के बारे में बताने वाली JSON संरचना बनाएं. इसके बाद, एपीआई को सर्विस के लिए कॉल करें.
  3. हमने अंग्रेज़ी के किसी खास सोर्स के लिए, SOURCE[0] में एपीआई को पास नहीं किया है. जब सोर्स भाषा को छोड़ा जाता है, तो इसका मतलब है कि एपीआई से सोर्स भाषा की अपने-आप पहचान करने का अनुरोध किया जा रहा है. ऐसा करने के लिए, दस्तावेज़ में sourceLanguageCode देखें पर क्लिक करें.
  4. इसके बावजूद, टेंप्लेट के कॉन्टेक्स्ट में असल नतीजों (POST) या कोई डेटा नहीं (GET) फ़ॉर्मैट करें और रेंडर करें.

ऐप्लिकेशन का विज़ुअल हिस्सा, टेंप्लेट index.html फ़ाइल में है. इसमें, पहले अनुवाद किए गए सभी नतीजे दिखते हैं. अगर ऐसा नहीं है, तो किसी फ़ॉर्म के बाद उसका अनुवाद करने के लिए कहा जाता है:

<!doctype html>
<html><head><title>My Google Translate 1990s</title><body>
<style>
body {
  font-family: Verdana, Helvetica, sans-serif;
  background-color: #DDDDDD;
}
</style>
<h2>My Google Translate (1990s edition)</h2>

{% if trans['text'] %}
    <h4>Previous translation</h4>
    <li><b>Original</b>:   {{ orig['text'] }}  (<i>{{ orig['lc'][0] }}</i>)</li>
    <li><b>Translated</b>: {{ trans['text'] }} (<i>{{ trans['lc'][0] }}</i>)</li>
{% endif %}

<h4>Enter <i>{{ orig['lc'][1] }}</i> text to translate to <i>{{ trans['lc'][1] }}</i>:</h4>
<form method="POST"><input name="text"><input type="submit"></form>
</body></html>

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

  1. सेवा को स्थानीय तौर पर चलाएं
  2. App Engine में डिप्लॉय करें (स्टैंडर्ड एनवायरमेंट)
  3. Cloud Functions में डिप्लॉय करें
  4. Cloud Run पर डिप्लॉय करें

7. पहला विकल्प: सेवा को स्थानीय तौर पर चलाना

कोडलैब का यह सेक्शन सिर्फ़ लोकल नेटवर्क पर चलने के लिए है. अगर सिर्फ़ क्लाउड पर डिप्लॉय किया जा रहा है, तो अगले सेक्शन पर जाएं.

सैंपल ऐप्लिकेशन को स्थानीय तौर पर चलाने के लिए, तीन अलग-अलग चरणों का पालन करना होगा:

  1. सेवा खाता बनाना
  2. सेवा खाते के लिए सार्वजनिक/निजी कुंजी का जोड़ा बनाना
  3. क्रेडेंशियल फ़ाइल डाउनलोड करें और ऐप्लिकेशन कोड के साथ बंडल का इस्तेमाल करें
  4. सेवा शुरू करें

सेवा खातों के बारे में जानें

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

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

सेवा खाते का कुंजी का जोड़ा बनाना और क्रेडेंशियल फ़ाइल डाउनलोड करना

स्थानीय तौर पर इस्तेमाल करने के लिए, सेवा खाता और सार्वजनिक/निजी कुंजी का जोड़ा बनाने के लिए, इस पेज पर दिए गए निर्देशों का पालन करें. सेवा खाता कुंजी बनाते समय, आपसे ज़रूरी अनुमतियां देने के लिए कहा जाएगा. roles/cloudtranslate.user को ज़रूर चुनें, ताकि आप एपीआई को ऐक्सेस कर सकें.

कुंजी का जोड़ा बन जाने के बाद, आपको सेवा खाते की कुंजी वाली फ़ाइल डाउनलोड करने के लिए कहा जाएगा. इसे credentials.json नाम दें और इसे ऐप्लिकेशन के टॉप-लेवल फ़ोल्डर में ले जाएं. अब आपको क्लाउड SDK टूल को यह बताना होगा कि वह उन क्रेडेंशियल का इस्तेमाल करे: उस फ़ाइल पर ले जाने के लिए, GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल सेट करें. इस प्रोसेस के बारे में ज़्यादा जानकारी इस पेज पर भी मिल सकती है. इसमें सेवा खातों के इस्तेमाल की जानकारी दी गई है.

सेवा शुरू करें

जब आप आगे बढ़ने के लिए तैयार हों, तो यहां दिए गए निर्देश के साथ, Express सर्वर को स्थानीय तौर पर लॉन्च करें:

$ npm start

> cloud-nebulous-serverless-nodejs@0.0.1 start
> node index.js

Listening on port 8080

localhost:8080 पर इससे कनेक्ट करने के लिए, अपने वेब ब्राउज़र पर जाएं. आपको कुछ ऐसा दिखेगा:

adc6665b7ae13c40.png

यह देखने के लिए कि कोई चीज़ काम कर रही है, उसका अनुवाद करें!

fc154326080bf14f.png

जब आप इससे संतुष्ट हो जाएं, तो ^C (control-C) के साथ सर्वर को बंद करें और बाहर निकलें. स्थानीय डिप्लॉयमेंट चलाने के लिए बधाई. अच्छी खबर है: क्लाउड पर डिप्लॉय करना बहुत आसान है.

समस्या हल करने से जुड़ी जानकारी

क्या अनुवाद का अनुरोध करते समय आपको इस तरह की कोई गड़बड़ी मिल रही है?

node:fs:2486
      handleErrorFromBinding(ctx);
      ^

Error: The file at credentials.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/tmp/nodejs/credentials.json'
    . . .

SOLUTION: इस गड़बड़ी का मतलब है कि आपने सेवा खाता नहीं बनाया और सार्वजनिक/निजी की-पेयर वाली फ़ाइल credentials.json डाउनलोड नहीं की. कृपया " पहला विकल्प: सेवा को स्थानीय तौर पर चलाना" और इस प्रक्रिया को पूरा करें और आगे बढ़ने से पहले मुख्य फ़ोल्डर में क्रेडिट इंस्टॉल करें.

8. विकल्प 2: App Engine में डिप्लॉय करें (स्टैंडर्ड एनवायरमेंट)

कोडलैब का यह सेक्शन सिर्फ़ नोड App Engine में डिप्लॉय करने के लिए है. अगर आपको दिलचस्पी नहीं है, तो अगले सेक्शन पर जाएं.

यह डिप्लॉयमेंट app.yaml कॉन्फ़िगरेशन फ़ाइल का इस्तेमाल करता है. इससे App Engine को यह पता चलता है कि एक लाइन के साथ किस रनटाइम का इस्तेमाल करना है:

runtime: nodejs16

app.yaml फ़ाइल का इस्तेमाल, Cloud Functions या Cloud Run नहीं करता. अगर आप App Engine का इस्तेमाल नहीं करना चाहते, तो यह फ़ाइल सुरक्षित तरीके से मिटाई जा सकती है. जब आप App Engine पर डिप्लॉय करने के लिए तैयार हों, तब इस निर्देश को चलाएं:

$ gcloud app deploy

क्षेत्र चुनने के बाद, gcloud app deploy आउटपुट बहुत कम शब्दों वाला होगा और यह ऐसा दिखना चाहिए:

Services to deploy:

descriptor:                  [/private/tmp/nodejs/app.yaml]
source:                      [/private/tmp/nodejs]
target project:              [PROJECT_ID]
target service:              [default]
target version:              [2021...]
target url:                  [https://PROJECT_ID.REG_ABBR.appspot.com]
target service account:      [App Engine default service account]


Do you want to continue (Y/n)?

Beginning deployment of service [default]...
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 2 files to Google Cloud Storage                          ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...⠏WARNING: *** Improve build performance by generating and committing package-lock.json.

Updating service [default]...done.
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REG_ABBR.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s default

To view your application in the web browser run:
  $ gcloud app browse

To take a quick anonymous survey, run:
  $ gcloud survey

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

da28f951c33a2c3d.png

कोई अनुरोध सबमिट करने पर, पता चलेगा कि यह अन्य सभी डिप्लॉयमेंट की तरह ही काम करता है.

9. तीसरा विकल्प: क्लाउड फ़ंक्शन में डिप्लॉय करें

कोडलैब का यह सेक्शन सिर्फ़ नोड Cloud Functions को डिप्लॉय करने के लिए है. अगर आपको दिलचस्पी नहीं है, तो अगले सेक्शन पर जाएं.

Cloud Functions वाली कोई कॉन्फ़िगरेशन फ़ाइल नहीं है, इसलिए जब आप Cloud Functions पर डिप्लॉय करने के लिए तैयार हों, तो यह निर्देश चलाएं:

$ gcloud functions deploy translate \
  --runtime nodejs16 \
  --entry-point app \
  --trigger-http \
  --region REGION \
  --allow-unauthenticated

आपके GCP प्रोजेक्ट में डिफ़ॉल्ट रूप से REGION का इस्तेमाल किया जा सकता है. हालांकि, अपने फ़ंक्शन को किसी खास इलाके में डिप्लॉय करने के लिए, --region फ़्लैग का इस्तेमाल किया जा सकता है. Cloud Functions, आपको क्लाउड के दूसरे प्रॉडक्ट पसंद करने का सुझाव नहीं देता है. आप चाहे कोई भी इलाका चुनें, gcloud functions deploy आउटपुट इस तरह दिखना चाहिए:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/15ac7fc1-731d-4f3b-bc15-8f2614xxxxxx?project=062269xxxxxx
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
buildName: projects/062269xxxxxx/locations/REGION/builds/aaf7e0cd-fbbd-4624-abeb-3e7437xxxxxx
entryPoint: app
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://REGION-PROJECT_ID.cloudfunctions.net/translate
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/REGION/functions/translate
runtime: nodejs16
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/gcf-upload-REGION-01de94c2-6eb4-4c49-aaff-09276cdb7ae9/a1db9f2d-3511-414b-aeeb-de6042xxxxxx.zip
status: ACTIVE
timeout: 60s
updateTime: '2021...'
versionId: '...'

अब आपका ऐप्लिकेशन दुनिया भर में उपलब्ध है. इसलिए, डिप्लॉयमेंट आउटपुट ("httpsTrigger/url" में) के मुताबिक, इस ऐप्लिकेशन को उस यूआरएल से ऐक्सेस किया जा सकता है जिसमें आपका प्रोजेक्ट आईडी है. यूआरएल कुछ ऐसा दिखना चाहिए: https://REGION-PROJECT_ID.cloudfunctions.net/translate. यह इस बात पर निर्भर करता है कि आपने कौनसा इलाका और Cloud प्रोजेक्ट आईडी चुना है.

518f1c3165f2096d.png

10. विकल्प 4: क्लाउड रन में डिप्लॉय करें

कोडलैब का यह सेक्शन सिर्फ़ Cloud Run पर डिप्लॉय करने के लिए है. अगर आपको दिलचस्पी नहीं है, तो अगले सेक्शन पर जाएं.

Cloud Run के साथ कोई कॉन्फ़िगरेशन फ़ाइल नहीं होती, इसलिए जब आप Cloud Run पर डिप्लॉय करने के लिए तैयार हों, तो नीचे दिए गए निर्देशों का पालन करें.

अब आप इस आदेश को चलाकर अपनी अनुवाद सेवा को Cloud Run पर डिप्लॉय करने के लिए तैयार हैं:

$ gcloud run deploy translate --source . --allow-unauthenticated --platform managed

आउटपुट ऐसा दिखना चाहिए. साथ ही, अगले चरणों के बारे में कुछ निर्देश दें:

Please specify a region:
 [1] asia-east1
 [2] asia-east2
. . . (other regions) . . .
 [28] us-west4
 [29] cancel
Please enter your numeric choice:  REGION_CHOICE

To make this the default region, run `gcloud config set run/region REGION`.

Deploying from source requires an Artifact Registry repository to
store build artifacts. A repository named [cloud-run-source-deploy] in
 region [REGION] will be created.

Do you want to continue (Y/n)?

This command is equivalent to running "gcloud builds submit --pack image=[IMAGE] ." and "gcloud run deploy translate --image [IMAGE]"

Building . . . and deploying container to Cloud Run service [translate] in project [PROJECT_ID] region [REGION]
✓ Building and deploying... Done.
  ✓ Creating Container Repository...
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/60e1b
  9bb-b991-4b4e-8d8a-HASH?project=PROJECT_NUMBER].
  ✓ Creating Revision...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [translate] revision [translate-00001-xyz] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

Cloud Build आपके ऐप्लिकेशन को Cloud Run पर ठीक उसी तरह इस्तेमाल करता है जिस तरह आप ऐप्लिकेशन को स्थानीय तौर पर चलाते हैं. Node.js के उपयोगकर्ताओं के लिए, यह npm install और npm start पर काम करता है. Python के लिए, यह pip install -r requirements.txt चलाता है और आपके Procfile में दिए गए निर्देशों से ऐप्लिकेशन को चालू करता है. (यह बात, Cloud Buildpack के साथ काम करने वाली अन्य सभी भाषाओं पर लागू होती है. बिल्ड की प्रोसेस पूरी होने के बाद, आपका ऐप्लिकेशन काम के लिए तैयार हो जाएगा.

इसके बाद, आपका ऐप्लिकेशन दुनिया भर में उपलब्ध होता है. हालांकि, उसे इलाके के हिसाब से डिप्लॉय किया जाता है. साथ ही, डिप्लॉयमेंट आउटपुट में "Service URL" के नीचे दिखाए गए आपके प्रोजेक्ट आईडी वाले यूआरएल पर जाकर, इस ऐप्लिकेशन को ऐक्सेस किया जा सकता है:

169f6edf5f7d2068.अंग्रेज़ी

यह देखने के लिए कि कोई चीज़ काम कर रही है, उसका अनुवाद करें!

31554e71cb80f1b4.png

11. नतीजा

बधाई हो! आपने Cloud Translation API को चालू और इस्तेमाल करने, ज़रूरी क्रेडेंशियल पाने, और एक आसान वेब ऐप्लिकेशन को स्थानीय तौर पर Express इंजन, Cloud Functions, और/या Cloud Run में डिप्लॉय करने के बारे में सीखा है. ज़्यादा जानने या इस ऐप्लिकेशन के दूसरे वर्शन के साथ-साथ दूसरे कोडलैब ऐक्सेस करने के लिए, कृपया रेपो फ़ोल्डर देखें.

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

Cloud Translation API की मदद से, हर महीने अनुवाद किए गए वर्णों की संख्या तय की जा सकती है. इसके लिए, कोई शुल्क नहीं चुकाना पड़ता. App Engine का एक मुफ़्त कोटा भी है. ऐसा Cloud Functions और Cloud Run के लिए भी किया जाता है. दोनों में से कोई भी सीमा पार होने पर आपको शुल्क देना होगा. अगर आपको अगले कोडलैब का इस्तेमाल जारी रखना है, तो आपको अपना ऐप्लिकेशन बंद करने की ज़रूरत नहीं है.

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

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

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

यहां दिए गए सेक्शन में, पढ़ने के लिए अतिरिक्त कॉन्टेंट के साथ-साथ सुझाए गए एक्सरसाइज़ भी दिए गए हैं. इनकी मदद से, इस ट्यूटोरियल को पूरा करने के बाद मिली जानकारी को बेहतर बनाया जा सकता है.

अतिरिक्त स्टडी

अब आपको Translation API का थोड़ा-बहुत अनुभव है. अब आपके हुनर को बेहतर बनाने के लिए हम कुछ और काम करने जा रहे हैं. अपना लर्निंग पाथ जारी रखने के लिए, हमारे सैंपल ऐप्लिकेशन में बदलाव करें, ताकि ये काम किए जा सकें:

  1. कोडलैब के इस मॉड्यूल के अन्य सभी वर्शन को ऐप्लिकेशन में काम करने या Google Cloud के बिना सर्वर वाले कंप्यूट प्लैटफ़ॉर्म पर डिप्लॉय करने के लिए पूरा करें. ज़्यादा जानने के लिए, रेपो README देखें.
  2. इस ट्यूटोरियल को पूरा करने के लिए, प्रोग्रामिंग की किसी दूसरी भाषा का इस्तेमाल करें.
  3. अलग-अलग स्रोत या लक्षित भाषाओं का समर्थन करने के लिए इस ऐप्लिकेशन को बदलें.
  4. लेख का एक से ज़्यादा भाषाओं में अनुवाद करने के लिए इस ऐप्लिकेशन को अपग्रेड करें; समर्थित लक्ष्य भाषाओं के पुलडाउन के लिए टेम्प्लेट फ़ाइल को बदल सकते हैं.

ज़्यादा जानें

Google App Engine

Google Cloud के फ़ंक्शन

Google क्लाउड रन

Google Cloud Buildpack, कंटेनर रजिस्ट्री, Artifact Registry

Google Cloud Translation और Google ML Kit

Google Cloud के अन्य प्रॉडक्ट/पेज

लाइसेंस

इस ट्यूटोरियल को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है. वहीं, रेपो में मौजूद सोर्स कोड को Apache 2 के तहत लाइसेंस मिला है.