Eventarc और Cloud Run फ़ंक्शन का इस्तेमाल करके, Cloud Storage से इवेंट प्रोसेसिंग को ट्रिगर करना

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

इस लैब में, इवेंट प्रोसेसिंग को ट्रिगर करने के लिए, Cloud Storage बकेट इवेंट और Eventarc का इस्तेमाल करने का तरीका बताया गया है. डेटा का विश्लेषण करने और इमेज को प्रोसेस करने के लिए, Cloud Run फ़ंक्शन का इस्तेमाल किया जाएगा. यह फ़ंक्शन, Google के Vision API का इस्तेमाल करेगा और नतीजे में मिली इमेज को Cloud Storage बकेट में वापस सेव करेगा.

424779013ac38648.png

आपको क्या सीखने को मिलेगा

इमेज प्रोसेसिंग पाइपलाइन बनाने का तरीका.

  • स्टोरेज बकेट कॉन्फ़िगर करना
  • Cloud Storage में ऑब्जेक्ट को पढ़ने और उनमें बदलाव करने के लिए, Cloud Run फ़ंक्शन बनाना
  • Eventarc ट्रिगर को डिप्लॉय करना
  • खाने की इमेज का पता लगाने के लिए, Vision API को इंटिग्रेट करना
  • एंड-टू-एंड समाधान की जांच करना और उसकी पुष्टि करना

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

  • इस लैब में यह माना गया है कि आपको Cloud Console और शेल एनवायरमेंट के बारे में पता है.
  • Cloud Storage, Cloud Run फ़ंक्शन या Vision API का इस्तेमाल करने का अनुभव होना मददगार होता है, लेकिन ज़रूरी नहीं है.

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

Cloud प्रोजेक्ट का सेटअप

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

Cloud Shell चालू करें

सर्च बार की दाईं ओर मौजूद आइकॉन पर क्लिक करके, Cloud Shell चालू करें.

b02c63d9c7632ef8.png

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

  1. Cloud Shell टर्मिनल में नीचे दिए गए कमांड चलाकर, प्रोजेक्ट और संसाधन से जुड़े एनवायरमेंट वैरिएबल बनाएं.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NAME=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1 
export UPLOAD_BUCKET_NAME=menu-item-uploads-$PROJECT_ID
export UPLOAD_BUCKET=gs://menu-item-uploads-$PROJECT_ID
export BUCKET_THUMBNAILS=gs://menu-item-thumbnails-$PROJECT_ID
export MENU_SERVICE_NAME=menu-service
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
  1. लैब के लिए ज़रूरी एपीआई चालू करना
gcloud services enable \
    vision.googleapis.com \
    cloudfunctions.googleapis.com \
    pubsub.googleapis.com \
    cloudbuild.googleapis.com \
    logging.googleapis.com \
    eventarc.googleapis.com \
    artifactregistry.googleapis.com \
    run.googleapis.com \
    --quiet
  1. डेटा स्टोर करने की जगह को क्लोन करना
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions

3. Cloud Storage बकेट कॉन्फ़िगर करना

स्टोरेज बकेट बनाना

इमेज प्रोसेसिंग पाइपलाइन के लिए, अपलोड और थंबनेल की Cloud Storage बकेट बनाएं.

दो बकेट बनाने के लिए, gsutil mb कमांड और कोई यूनीक नाम इस्तेमाल करें:

  1. वह अपलोड बकेट जहां इमेज सबसे पहले अपलोड की जाएंगी
  2. जनरेट की गई थंबनेल इमेज को सेव करने के लिए थंबनेल बकेट

नई इमेज अपलोड करने के लिए बकेट बनाएं:

gsutil mb -p $PROJECT_ID -l $REGION $UPLOAD_BUCKET

आउटपुट का उदाहरण:

Creating gs://menu-item-uploads-cymbal-eats-8399-3119/...

जनरेट किए गए थंबनेल सेव करने के लिए, एक बकेट बनाएं:

gsutil mb -p $PROJECT_ID -l $REGION $BUCKET_THUMBNAILS

आउटपुट का उदाहरण:

Creating gs://menu-item-thumbnails-cymbal-eats-8399-3119/...

बकेट की अनुमतियां अपडेट करना

उपयोगकर्ताओं को डेटा पढ़ने की अनुमति देने के लिए, स्टोरेज बकेट की अनुमतियां अपडेट करें.

अपनी बकेट में मौजूद ऑब्जेक्ट को पढ़ने और उनमें बदलाव करने की अनुमति देने के लिए, gsutil iam ch कमांड का इस्तेमाल करें:

gsutil iam ch allUsers:objectViewer $UPLOAD_BUCKET
gsutil iam ch allUsers:objectViewer $BUCKET_THUMBNAILS

आउटपुट का उदाहरण

Updated IAM policy for project [cymbal-eats-8399-3119].
[...]

4. सेवा खाते कॉन्फ़िगर करना

थंबनेल प्रोसेस करने के लिए, Cloud फ़ंक्शन के लिए कस्टम सेवा खाता बनाएं:

export CF_SERVICE_ACCOUNT=thumbnail-service-sa
gcloud iam service-accounts create ${CF_SERVICE_ACCOUNT}

आर्टफ़ैक्ट रजिस्ट्री से पढ़ने की अनुमति देने के लिए, artifactregistry.reader भूमिका दें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/artifactregistry.reader"

जनरेट की गई इमेज को थंबनेल बकेट में सेव करने की अनुमति देने के लिए, storage.objectCreator भूमिका दें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/storage.objectCreator"

Cloud Run सेवा को शुरू करने की अनुमति देने के लिए, run.invoker भूमिका दें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/run.invoker"

सेवा देने वाली कंपनियों से इवेंट पाने की अनुमति देने के लिए, eventarc.eventReceiver भूमिका दें:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member "serviceAccount:${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/eventarc.eventReceiver"

Cloud Storage के सेवा खाते को pubsub.publisher की भूमिका दें. इससे, बकेट में इमेज अपलोड होने पर, सेवा खाते को इवेंट पब्लिश करने की अनुमति मिलेगी.

GCS_SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER)

gcloud projects add-iam-policy-binding $PROJECT_NUMBER \
    --member "serviceAccount:$GCS_SERVICE_ACCOUNT" \
    --role "roles/pubsub.publisher"

5. इमेज प्रोसेसिंग फ़ंक्शन के बारे में खास जानकारी

Cloud Storage से इमेज डाउनलोड करने, इमेज का साइज़ बदलने, और इमेज को वापस Cloud Storage में अपलोड करने के लिए फ़ंक्शन बनाएं. यह फ़ंक्शन, इमेज के लिए ब्यौरा लेबल असाइन करने के लिए, Vision API को कॉल करेगा. फ़ंक्शन, ब्यौरे के लेबल की जांच करेगा. अगर लेबल में इमेज को "खाना" के तौर पर पहचाना जाता है, तो मेन्यू आइटम की इमेज और थंबनेल को अपडेट करने के लिए, मेन्यू सेवा को एक इवेंट भेजा जाएगा.

4c3c3b758dba6a9f.png

फ़ंक्शन को ट्रिगर करना

Cloud Storage के फ़ंक्शन, Cloud Storage से मिलने वाली Pub/Sub सूचनाओं पर आधारित होते हैं. साथ ही, ये मिलते-जुलते इवेंट टाइप के साथ काम करते हैं:

इस लैब में, आपको Cloud Storage में किसी ऑब्जेक्ट के फ़ाइनल होने पर, फ़ंक्शन को डिप्लॉय और ट्रिगर करना होगा.

ऑब्जेक्ट फ़ाइनल करना

ऑब्जेक्ट को फ़ाइनल करने वाले इवेंट तब ट्रिगर होते हैं, जब Cloud Storage ऑब्जेक्ट को "लिखने" की प्रोसेस पूरी हो जाती है. खास तौर पर, इसका मतलब है कि नया ऑब्जेक्ट बनाना या किसी मौजूदा ऑब्जेक्ट को ओवरराइट करना, इस इवेंट को ट्रिगर करता है. इस ट्रिगर से, संग्रहित करने और मेटाडेटा अपडेट करने की कार्रवाइयों को अनदेखा किया जाता है.

6. Cloud Storage को इंटिग्रेट करना

Cloud Storage, Google Cloud में अपने ऑब्जेक्ट सेव करने की सेवा है. ऑब्जेक्ट, डेटा का ऐसा हिस्सा होता है जिसमें किसी भी फ़ॉर्मैट की फ़ाइल शामिल हो सकती है. ऑब्जेक्ट को बकेट नाम के कंटेनर में सेव किया जाता है. सभी बकेट किसी प्रोजेक्ट से जुड़े होते हैं. साथ ही, अपने प्रोजेक्ट को किसी संगठन के तहत ग्रुप किया जा सकता है. क्लाइंट लाइब्रेरी और एपीआई , Cloud Storage के साथ इंटिग्रेट करते हैं

इस लैब में, Cloud Storage में ऑब्जेक्ट पढ़ने और लिखने के लिए, क्लाइंट लाइब्रेरी का इस्तेमाल किया जाएगा.

क्लाइंट लाइब्रेरी इंस्टॉल करना

क्लाउड क्लाइंट लाइब्रेरी, कई लोकप्रिय प्रोग्रामिंग भाषाओं में उपलब्ध हैं. लाइब्रेरी का इस्तेमाल शुरू करने के लिए, आपको क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.

क्लाइंट लाइब्रेरी का इस्तेमाल करना

लागू करने से जुड़ी जानकारी, प्रोग्रामिंग भाषा पर निर्भर करती है. अपने ऐप्लिकेशन में क्लाइंट लाइब्रेरी का इस्तेमाल करने के लिए, सबसे पहले Cloud Storage की डिपेंडेंसी इंपोर्ट करें. उदाहरण के लिए, Node.js प्रोजेक्ट में, इंपोर्ट को package.json फ़ाइल में जोड़ा जाता है. नीचे दिया गया स्निपेट, इस लैब की package.json फ़ाइल की सूचना दिखाता है.

package.json

{
    "name": "thumbnail-service",
    "version": "0.1.0",
    "dependencies": {
      "@google-cloud/functions-framework": "^3.0.0",
      "@google-cloud/storage": "^5.18.2",
      "@google-cloud/vision": "^2.4.2",
        ...
    }
  }

CloudEvent कॉलबैक रजिस्टर करना

Functions फ़्रेमवर्क की मदद से, CloudEvent कॉलबैक रजिस्टर करें. यह कॉलबैक, बकेट में नई इमेज अपलोड होने पर Cloud Storage से ट्रिगर होगा.

index.js

functions.cloudEvent('process-thumbnails', async (cloudEvent) => {
    console.log(`Event ID: ${cloudEvent.id}`);
    console.log(`Event Type: ${cloudEvent.type}`);
    ...

स्टोरेज का रेफ़रंस ऑब्जेक्ट बनाना

क्लाइंट लाइब्रेरी इंपोर्ट होने के बाद, आपको एक नया स्टोरेज क्लाइंट और बकेट बनानी होगी. इनसे आपका ऐप्लिकेशन इंटरैक्ट करेगा.

index.js

const storage = new Storage();
const bucket = storage.bucket(file.bucket);
const thumbBucket = storage.bucket(process.env.BUCKET_THUMBNAILS);

Cloud Storage ऑब्जेक्ट डाउनलोड करना

index.js

await bucket.file(file.name).download({
            destination: originalFile
        });

Cloud Storage में ऑब्जेक्ट अपलोड करना

Cloud Storage में अपलोड करने के अनुरोध तीन तरीकों से भेजे जा सकते हैं: एक बार में एक अनुरोध, फिर से शुरू किया जा सकने वाला अनुरोध या एक्सएमएल एपीआई का मल्टीपार्ट अपलोड. बड़े साइज़ के अपलोड या स्ट्रीमिंग अपलोड के लिए, फिर से शुरू किए जा सकने वाले अपलोड का इस्तेमाल करें. एक्सएमएल एपीआई की मदद से, फ़ाइलों को अलग-अलग हिस्सों में अपलोड किया जाता है और एक ऑब्जेक्ट के तौर पर इकट्ठा किया जाता है. छोटे ऑब्जेक्ट के लिए, एक बार में एक अनुरोध वाले अपलोड का इस्तेमाल करें.

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

index.js

const thumbnailImage = await thumbBucket.upload(thumbFile);

7. Vision API को इंटिग्रेट करना

Cloud Vision की मदद से, डेवलपर अपने ऐप्लिकेशन में विज़न डिटेक्ट करने की सुविधाओं को आसानी से इंटिग्रेट कर पाते हैं. जैसे, इमेज लेबल करने, चेहरे और लैंडमार्क की पहचान करने, ऑप्टिकल कैरेक्टर रिकग्निशन (ओसीआर), और अश्लील कॉन्टेंट को टैग करने की सुविधा.

क्लाइंट लाइब्रेरी इंस्टॉल करना

क्लाउड क्लाइंट लाइब्रेरी, कई लोकप्रिय प्रोग्रामिंग भाषाओं में उपलब्ध हैं. लाइब्रेरी का इस्तेमाल शुरू करने के लिए, आपको क्लाइंट लाइब्रेरी इंस्टॉल करनी होगी.

Image Annotator क्लाइंट बनाना

आधिकारिक क्लाइंट SDK टूल का इस्तेमाल करके Google API ऐक्सेस करने के लिए, एपीआई के डिस्कवरी दस्तावेज़ के आधार पर एक सेवा ऑब्जेक्ट बनाया जाता है. इस दस्तावेज़ में, SDK टूल के लिए एपीआई के बारे में जानकारी होती है. आपको अपने क्रेडेंशियल का इस्तेमाल करके, Vision API की डिस्कवरी सेवा से इसे फ़ेच करना होगा.

index.js

const client = new vision.ImageAnnotatorClient();

Vision API का अनुरोध बनाना

Vision API, इमेज फ़ाइल में मौजूद ऑब्जेक्ट का पता लगा सकता है. इसके लिए, वह आपके अनुरोध के मुख्य हिस्से में इमेज फ़ाइल के कॉन्टेंट को Base64 कोड में एन्कोड करके भेजता है.

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

  • Base64 कोड में बदला गया इमेज डेटा
  • उन सुविधाओं की सूची जिनके बारे में आपको उस इमेज पर एनोटेट करना है.

index.js

        const client = new vision.ImageAnnotatorClient();
        const visionRequest = {
            image: { source: { imageUri: `gs://${file.bucket}/${file.name}` } },
            features: [
                { type: 'LABEL_DETECTION' },
            ]
        };
        const visionPromise = client.annotateImage(visionRequest);

8. Cloud Run फ़ंक्शन डिप्लॉय करना

इमेज का साइज़ बदलने की यह सेवा, Cymbal Eats के बड़े सिस्टम का हिस्सा है. इस सेक्शन में, आपको सिर्फ़ इमेज प्रोसेसिंग की सुविधा से जुड़े कॉम्पोनेंट डिप्लॉय करने होंगे. पूरे इंस्टॉलेशन में, इमेज अपलोड करने के लिए यूज़र इंटरफ़ेस (यूआई) और मेटाडेटा को सेव करने के लिए डाउनस्ट्रीम अनुरोध शामिल होता है. ये सुविधाएं, इस लैब के हिस्से के तौर पर इंस्टॉल नहीं की जाती हैं.

फ़ंक्शन डिप्लॉय करने के दौरान, ये कॉम्पोनेंट बनाए जाएंगे:

  • Cloud Run फ़ंक्शन
  • Eventarc ट्रिगर
  • Pub/Sub टॉपिक और सदस्यता

menu-item-uploads-$PROJECT_ID पर ट्रिगर बकेट के साथ Cloud Run फ़ंक्शन डिप्लॉय करने के लिए, cloudshell टर्मिनल में यह कमांड चलाएं:

Cloud Run फ़ंक्शन को सीधे Cloud Run पर डिप्लॉय करने के लिए, आपको सबसे पहले फ़ंक्शन को डिप्लॉय करना होगा. इसके बाद, उसके लिए ट्रिगर बनाना होगा.

Cloud Run फ़ंक्शन डिप्लॉय करें:

gcloud beta run deploy process-thumbnails \
      --source=thumbnail \
      --function process-thumbnails \
      --region $REGION \
      --base-image google-22-full/nodejs20 \
      --no-allow-unauthenticated \
      --project=$PROJECT_ID \
--service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com" \
--set-env-vars=BUCKET_THUMBNAILS=$BUCKET_THUMBNAILS,MENU_SERVICE_URL=$MENU_SERVICE_URL \
  --max-instances=1 \
  --quiet

आउटपुट का उदाहरण:

Done.                                                                                                                                                                                    
Service [process-thumbnails] revision [process-thumbnails-00001-abc] has been deployed and is serving 100 percent of traffic.
Service URL: https://process-thumbnails-000000000.us-east1.run.app

ट्रिगर बनाएं:

gcloud eventarc triggers create process-thumbnails-trigger \
     --location=$REGION \
     --destination-run-service=process-thumbnails \
    --destination-run-region=$REGION \
     --event-filters="type=google.cloud.storage.object.v1.finalized" \
     --event-filters="bucket=$UPLOAD_BUCKET_NAME" \
     --service-account="${CF_SERVICE_ACCOUNT}@${PROJECT_ID}.iam.gserviceaccount.com"

आउटपुट का उदाहरण:

Creating trigger [process-thumbnails-trigger] in project [qwiklabs-gcp-02-53f8532696e1], location [us-east1]...done.                                                                     
WARNING: It may take up to 2 minutes for the new trigger to become active.

अगर अनुमति से जुड़ी समस्या की वजह से ट्रिगर डिप्लॉय नहीं हो पाता है, तो कृपया पिछले चरण में किए गए IAM बदलावों के लागू होने का इंतज़ार करें. आम तौर पर, इसमें एक से दो मिनट लगते हैं. इसके बाद, डिप्लॉयमेंट की कोशिश फिर से करें.

गड़बड़ी के आउटपुट का उदाहरण:

...If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent...
[...] 

Cloud Console में, फ़ंक्शन के लिए बनाई गई Cloud Run सेवा की समीक्षा करें:

546c5c951cf0f2f.png

Cloud Console में, फ़ंक्शन के लिए बनाए गए Eventarc ट्रिगर की समीक्षा करें:

dec11309016b09ac.png

Cloud Console में, Eventarc ट्रिगर के लिए बनाए गए Pub/Sub टॉपिक और सदस्यता की समीक्षा करें:

affe089c39ae1465.png

a4c41ede2af300db.png

9. एंड-टू-एंड समाधान की जांच करना और उसकी पुष्टि करना

Cloud Storage में नई फ़ोटो अपलोड करें और इमेज का विश्लेषण होने के दौरान, पाइपलाइन की प्रोग्रेस पर नज़र रखें. Cloud Functions के लॉग की निगरानी करके, आपको शुरू से आखिर तक के समाधान की जांच करनी होगी.

इमेज अपलोड करना

ab7b43f876f9c3a9.jpeg

  1. इस इमेज को अपने कंप्यूटर पर सेव करें
  2. फ़ाइल का नाम बदलकर 1.jpg करें
  3. Cloud Storage कंसोल खोलें
  4. menu-item-uploads-... बकेट पर क्लिक करें
  5. फ़ाइलें अपलोड करें पर क्लिक करें
  6. स्टोरेज बकेट में 1.jpg अपलोड करना
  7. Cloud Console में, Cloud Run पर जाएं
  8. process-thumbails पर क्लिक करें
  9. लॉग टैब पर क्लिक करें

fca8e4bafbdf135d.png

  1. menu-item-thumbnails-$PROJECT_ID Cloud Storage बकेट पर जाएं
  2. पुष्टि करें कि थंबनेल इमेज, थंबनेल बकेट में बनाई गई है

1b6dee72a1fde681.png

खाने की चीज़ों के बजाय कोई दूसरी इमेज अपलोड करना

यह पुष्टि करने के लिए कि यह सुविधा सही तरीके से काम कर रही है या नहीं, आपको ऐसी इमेज अपलोड करनी होगी जिसमें कोई ऐसा ऑब्जेक्ट न हो जिसे "खाद्य" आइटम के तौर पर वर्गीकृत किया जा सकता है.

c76dd525765f66a6.jpeg

  1. इस इमेज को अपने कंप्यूटर पर सेव करें
  2. फ़ाइल का नाम बदलकर 2.jpg करें
  3. Cloud Storage कंसोल खोलें
  4. menu-item-uploads-... बकेट पर क्लिक करें
  5. फ़ाइलें अपलोड करें पर क्लिक करें
  6. स्टोरेज बकेट में 2.jpg अपलोड करना
  7. Cloud Console में, Cloud Run पर जाएं
  8. process-thumbails पर क्लिक करें
  9. लॉग टैब पर क्लिक करें

18b1e30ee78d3955.png

10. बधाई हो!

बधाई हो, आपने लैब पूरा कर लिया है!

आगे क्या करना है:

Cymbal Eats के अन्य कोडलैब एक्सप्लोर करें:

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

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिया जाए, इसके लिए संसाधनों वाले प्रोजेक्ट को मिटाएं या प्रोजेक्ट को बनाए रखें और अलग-अलग संसाधनों को मिटाएं.

प्रोजेक्ट मिटाना

बिलिंग की सुविधा बंद करने का सबसे आसान तरीका, ट्यूटोरियल के लिए बनाया गया प्रोजेक्ट मिटाना है.