Node.js पर Cloud Run के साथ कंटेनर को डिप्लॉय करें और चलाएं

1. शुरू करने से पहले

6a5cf23c8e20491f.png

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

ज़रूरी शर्तें

लागू नहीं

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.

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

क्लाउड शेल

Google Cloud को आपके लैपटॉप से, कहीं से भी इस्तेमाल किया जा सकता है. हालांकि, आप Google Cloud में Cloud Shell का इस्तेमाल करेंगे. यह कमांड-लाइन सुविधा है.

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

  1. Cloud Console से Cloud Shell को चालू करने के लिए, Cloud Shell को चालू करें fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q पर क्लिक करें. प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

14-06-2017 को 10.13.43 PM.png पर स्क्रीन शॉट लिया गया

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके PROJECT_ID पर सेट है.

gcloud auth list

कमांड आउटपुट

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर किसी कारण से, प्रोजेक्ट सेट नहीं है, तो बस निम्न आदेश जारी करें:

gcloud config set project <PROJECT_ID>

क्या आपको अपना PROJECT_ID चाहिए? देखें कि आपने सेटअप के चरणों में किस आईडी का इस्तेमाल किया है या इसे Cloud Console के डैशबोर्ड में देखें:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell, डिफ़ॉल्ट रूप से कुछ एनवायरमेंट वैरिएबल सेट करता है. ये वैरिएबल, आने वाले समय में कमांड चलाने के दौरान काम आ सकते हैं.

echo $GOOGLE_CLOUD_PROJECT

कमांड आउटपुट

<PROJECT_ID>
  1. आखिर में, डिफ़ॉल्ट ज़ोन और प्रोजेक्ट कॉन्फ़िगरेशन सेट करें.
gcloud config set compute/zone us-central1-f

आपके पास कई तरह के ज़ोन चुनने का विकल्प होता है. ज़्यादा जानकारी के लिए, क्षेत्र और ज़ोन.

Cloud Run API चालू करना

Cloud Shell से, Cloud Run API चालू करें.

gcloud services enable run.googleapis.com

इससे इस टेक्स्ट से मिलता-जुलता एक मैसेज दिखेगा:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. ऐप्लिकेशन का सैंपल लिखें

आपको एचटीटीपी अनुरोधों के जवाब में, आसान और एक्सप्रेस-आधारित Node.js ऐप्लिकेशन बनाना होगा.

अपना ऐप्लिकेशन बनाने के लिए, Cloud Shell का इस्तेमाल करके helloworld-nodejs नाम की एक नई डायरेक्ट्री बनाएं और उसमें डायरेक्ट्री बदलें.

mkdir helloworld-nodejs
cd helloworld-nodejs

इस कॉन्टेंट के साथ package.json फ़ाइल बनाएं:

{
  "name": "cloudrun-helloworld",
  "version": "1.0.0",
  "description": "Simple hello world sample in Node",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.17.1"
  }
}

सबसे ज़रूरी बात, ऊपर दी गई फ़ाइल में स्टार्ट स्क्रिप्ट निर्देश और एक्सप्रेस वेब ऐप्लिकेशन फ़्रेमवर्क पर निर्भरता है.

इसके बाद, उसी डायरेक्ट्री में, एक index.js फ़ाइल बनाएं और यहां दिए गए कॉन्टेंट को उसमें कॉपी करें:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

यह कोड एक बेसिक वेब सर्वर बनाता है, जो PORT एनवायरमेंट वैरिएबल के तय किए गए पोर्ट पर ध्यान देता है. अब आपका ऐप्लिकेशन कंटेनर बनाने, टेस्ट करने, और कंटेनर रजिस्ट्री में अपलोड किए जाने के लिए तैयार है.

4. अपने ऐप्लिकेशन को कंटेनर में बदलें और उसे कंटेनर रजिस्ट्री में अपलोड करें

सैंपल ऐप्लिकेशन को कंटेनर में बदलने के लिए, सोर्स फ़ाइलों वाली डायरेक्ट्री में Dockerfile नाम की एक नई फ़ाइल बनाएं और उसमें यहां दिया गया कॉन्टेंट कॉपी करें:

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim

# Create and change to the app directory.
WORKDIR /usr/src/app

# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./

# Install production dependencies.
RUN npm install --only=production

# Copy local code to the container image.
COPY . ./

# Run the web service on container startup.
CMD [ "npm", "start" ]

अब, Cloud Build का इस्तेमाल करके कंटेनर इमेज बनाएं. इसके लिए, Dockerfile वाली डायरेक्ट्री से यहां दिया गया कमांड चलाएं:

gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

$GOOGLE_CLOUD_PROJECT एक एनवायरमेंट वैरिएबल है, जिसमें Cloud Shell में चलाते समय आपका Google Cloud प्रोजेक्ट आईडी शामिल होता है. gcloud config get-value project चलाकर भी यह जानकारी पाई जा सकती है.

रजिस्ट्री में पुश करने के बाद, आपको इमेज के नाम (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld) के साथ SUCCESS मैसेज दिखेगा. इमेज को कंटेनर रजिस्ट्री में सेव किया गया है. ज़रूरत पड़ने पर, इस इमेज को फिर से इस्तेमाल किया जा सकता है.

इस निर्देश का इस्तेमाल करके, अपने मौजूदा प्रोजेक्ट से जुड़ी सभी कंटेनर इमेज को सूची में शामिल किया जा सकता है:

gcloud container images list

अगर आपको Cloud Shell से ऐप्लिकेशन को स्थानीय तौर पर चलाना है और उसकी जांच करनी है, तो इस स्टैंडर्ड docker निर्देश का इस्तेमाल करके इसे शुरू किया जा सकता है:

docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Cloud Shell में, Web Preview170b7a95be8c6296.png पर क्लिक करें और पोर्ट 8080 पर झलक देखें को चुनें.

3618ca3a4a135570.png

ऐसा करने पर एक ब्राउज़र विंडो खुलेगी, जिस पर नमस्ते दुनिया लिखा होगा!

a0307f34cacf9e6a.png

आपके पास सिर्फ़ curl localhost:8080 का इस्तेमाल करने का भी विकल्प है.

5. Cloud Run पर डिप्लॉय करें

कंटेनर वाले ऐप्लिकेशन को Cloud Run पर डिप्लॉय करने के लिए, नीचे दिए गए निर्देश का इस्तेमाल किया जाता है. पक्का करें कि आपने जिस ऐप्लिकेशन को बनाया है या पहले से बनी gcr.io/cloudrun/hello इमेज का इस्तेमाल कर रहे हैं, आप उसमें इमेज के सही नाम के साथ बदलाव कर सकते हैं:

gcloud run deploy helloworld \
  --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated

--allow-unauthenticated डिप्लॉयमेंट विकल्प की मदद से, पुष्टि किए बिना ऐप्लिकेशन तक पहुंचा जा सकता है. --platform managed \ डिप्लॉयमेंट विकल्प का मतलब है कि पूरी तरह से मैनेज किए गए एनवायरमेंट का अनुरोध किया जा रहा है, न कि Anthos के ज़रिए Kubernetes इन्फ़्रास्ट्रक्चर के लिए.

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

Service [helloworld] revision [helloworld-00001] has been deployed
and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app

अब किसी वेब ब्राउज़र में सेवा यूआरएल खोलकर, डिप्लॉय किए गए कंटेनर पर जाएं:

63260b4d3aee42b8.png

Cloud Run, मिलने वाले अनुरोधों को मैनेज करने के लिए आपके कंटेनर की इमेज को अपने-आप और हॉरिज़ॉन्टल तौर पर स्केल करता है. इसके बाद, मांग कम होने पर उसका साइज़ छोटा कर देता है. अनुरोध मैनेज करने के दौरान इस्तेमाल किए गए सीपीयू, मेमोरी, और नेटवर्किंग के लिए ही आपको पैसे चुकाने होंगे.

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

सेवा का इस्तेमाल न करने पर Cloud Run शुल्क नहीं लेता, लेकिन कंटेनर की बनाई गई इमेज को सेव करने के लिए आपसे शुल्क लिया जा सकता है.

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

gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld

Cloud Run सेवा को मिटाने के लिए, इस निर्देश का इस्तेमाल करें:

gcloud run services delete helloworld \
  --platform managed \
  --region us-central1

7. बधाई हो

बधाई हो! आपने कंटेनर इमेज में पैकेज किया गया एक ऐप्लिकेशन Cloud Run पर डिप्लॉय किया है.

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

अगला अच्छा कदम यह होगा कि क्विकस्टार्ट: Google Cloud पर Anthos के लिए Cloud Run में डिप्लॉय करें को देखें.

कोड सोर्स से Cloud Run के लिए सही, एक स्टेटलेस एचटीटीपी कंटेनर बनाने और उसे कंटेनर रजिस्ट्री में भेजने के बारे में ज़्यादा जानकारी के लिए, नीचे दिए गए संसाधन देखें:

मौजूदा ओपन सोर्स प्रोजेक्ट, KNative के बारे में ज़्यादा जानने के लिए, KNative देखें.