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

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

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

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

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

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

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

  • Google Cloud प्रोजेक्ट और चालू क्लाउड बिलिंग खाता
  • स्थानीय तौर पर चलाने के लिए इंस्टॉल किया गया वेब फ़्रेमवर्क ( Python ट्यूटोरियल करने वालों के लिए Flask या JavaScript/Node.js ट्यूटोरियल करने वालों के लिए Express)
  • 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 में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. संसाधन बंद करने के लिए, कोडलैब के आखिर में दिए गए "बंद करें" निर्देशों का पालन करें, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.

3. Translation API चालू करना

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

Google API चालू करना

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

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

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

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

दूसरा उदाहरण: 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 Run पर डिप्लॉय करने के लिए, Cloud Build सिस्टम को कंटेनर इमेज रजिस्टर करनी होती हैं.

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

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

fb0f1d315f122d4a.png

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

2275786a24f8f204.png

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

7960a6752a1da767.png

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

लागत

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

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

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

  • Google Cloud/GCP — हर प्रॉडक्ट के लिए अलग-अलग बिलिंग होती है. आम तौर पर, इस्तेमाल के हिसाब से शुल्क लिया जाता है. मुफ़्त टियर के बारे में जानकारी ऊपर दी गई है.
  • Google Maps — इसमें एपीआई का एक सुइट शामिल है. साथ ही, यह उपयोगकर्ताओं को हर महीने 200 डॉलर का मुफ़्त क्रेडिट देता है.
  • Google Workspace (पहले G Suite) के एपीआई — इनका इस्तेमाल, Workspace की हर महीने ली जाने वाली सदस्यता शुल्क में शामिल होता है. हालांकि, इनका इस्तेमाल कुछ सीमाओं तक ही किया जा सकता है. इसलिए, Gmail, Google Drive, Calendar, Docs, Sheets या Slides जैसे ऐप्लिकेशन के लिए एपीआई इस्तेमाल करने पर, सीधे तौर पर बिलिंग नहीं की जाती.

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

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

ZIP फ़ाइल डाउनलोड करना या रेपो क्लोन करना

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

5cd6110c4414cf65.png

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

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

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

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

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

$ 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 क्लाइंट, Translation API कॉल के लिए पैरंट "location path", और 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. फ़ॉर्म के लिए बुनियादी वैरिएबल रीसेट करें. यह मुख्य रूप से GET अनुरोधों के लिए है, क्योंकि POST अनुरोधों में ऐसा डेटा होगा जो इन्हें बदल देगा.
  2. अगर यह POST अनुरोध है, तो अनुवाद करने के लिए टेक्स्ट को चुनें. अगर यह खाली नहीं है, तो एपीआई के मेटाडेटा की ज़रूरत के हिसाब से 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 को ऐक्सेस करने का सुरक्षा तंत्र हैं. इनका इस्तेमाल तब किया जाता है, जब ऐसे डेटा को ऐक्सेस किया जा रहा हो जो लोगों से जुड़ा न हो. क्लाउड पर डिप्लॉय करते समय, उपयोगकर्ताओं को क्लाउड पर शामिल होने में लगने वाला समय कम करने के लिए, Google Cloud के सभी कंप्यूट प्लैटफ़ॉर्म (सवरलेस और अन्य) डिफ़ॉल्ट सेवा खाते उपलब्ध कराते हैं.

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

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

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

कुंजी का जोड़ा बन जाने के बाद, आपको सेवा खाते की कुंजी वाली फ़ाइल डाउनलोड करने के लिए कहा जाएगा. इसे credentials.json नाम दें और ऐप्लिकेशन के टॉप-लेवल फ़ोल्डर में ले जाएं. अब आपको Cloud 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'
    . . .

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

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

कोडलैब का यह सेक्शन, सिर्फ़ Node 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

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

da28f951c33a2c3d.png

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

9. तीसरा विकल्प: Cloud Functions पर डिप्लॉय करना

कोड लैब का यह सेक्शन, सिर्फ़ Node 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, अन्य Cloud प्रॉडक्ट की तरह आपको सूचना नहीं देता. आपने जो भी क्षेत्र चुना है उसके हिसाब से, 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. चौथा विकल्प: Cloud Run पर डिप्लॉय करना

कोड लैब का यह सेक्शन सिर्फ़ 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 Buildpacks, आपके ऐप्लिकेशन को Cloud Run पर उसी तरह से बिल्ड करता है जिस तरह से ऐप्लिकेशन को स्थानीय तौर पर चलाने पर बिल्ड किया जाता है. Node.js का इस्तेमाल करने वाले लोगों के लिए, यह npm install और npm start को चलाता है. Python के लिए, यह pip install -r requirements.txt को चलाता है और आपके Procfile में दिए गए निर्देशों के हिसाब से ऐप्लिकेशन शुरू करता है. (यह Cloud Buildpacks के साथ काम करने वाली अन्य सभी भाषाओं पर भी लागू होता है.) बिल्ड प्रोसेस पूरी होने के बाद, आपका ऐप्लिकेशन इस्तेमाल के लिए तैयार हो जाएगा.

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

169f6edf5f7d2068.png

इसे आज़माने के लिए, किसी टेक्स्ट का अनुवाद करें!

31554e71cb80f1b4.png

11. नतीजा

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

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

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

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

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

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

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

अन्य स्टडी

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

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

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

Google App Engine

Google Cloud Functions

Google Cloud Run

Google Cloud Buildpacks, Container Registry, Artifact Registry

Google Cloud Translation और Google ML Kit

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

लाइसेंस

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