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 के नए उपयोगकर्ता, मुफ़्त में आज़माने के लिए 300 डॉलर के प्रोग्राम में शामिल हो सकते हैं.

Cloud Shell

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 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. सैंपल ऐप्लिकेशन लिखना

आपको एचटीटीपी अनुरोधों का जवाब देने वाला, express पर आधारित एक सामान्य 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"
  }
}

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

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

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

सैंपल ऐप्लिकेशन को कंटेनर में रखने के लिए, सोर्स फ़ाइलों वाली डायरेक्ट्री में 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 मैसेज दिखेगा. इमेज को Container Registry में सेव किया जाता है. इसे ज़रूरत पड़ने पर फिर से इस्तेमाल किया जा सकता है.

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

gcloud container images list

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

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

Cloud Shell में, वेब प्रीव्यू 170b7a95be8c6296.png पर क्लिक करें. इसके बाद, पोर्ट 8080 पर प्रीव्यू करें को चुनें.

3618ca3a4a135570.png

इससे एक ब्राउज़र विंडो खुलती है, जिसमें Hello World! लिखा होता है

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 प्रोजेक्ट को मिटाया जा सकता है. इससे उस प्रोजेक्ट के लिए इस्तेमाल किए गए सभी संसाधनों की बिलिंग बंद हो जाएगी. इसके अलावा, इस कमांड का इस्तेमाल करके, helloworld इमेज को मिटाया जा सकता है:

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 पर Cloud Run for Anthos में डिप्लॉय करना लेख पढ़ें.

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

Knative के बारे में ज़्यादा जानने के लिए, Knative पर जाएं. यह एक ओपन सोर्स प्रोजेक्ट है.