การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage โดยใช้ Eventarc และ Cloud Functions (รุ่นที่ 2)

1. ภาพรวม

ในห้องทดลองนี้ คุณจะได้เรียนรู้วิธีใช้เหตุการณ์ของที่เก็บข้อมูล Cloud Storage และ Eventarc เพื่อทริกเกอร์การประมวลผลเหตุการณ์ คุณจะใช้ Cloud Functions (รุ่นที่ 2) เพื่อวิเคราะห์ข้อมูลและประมวลผลรูปภาพ ฟังก์ชันนี้จะใช้ Vision API ของ Google และบันทึกภาพที่ได้กลับเข้าไปในที่เก็บข้อมูล Cloud Storage

4756e4c218d84e26.png

สิ่งที่คุณจะได้เรียนรู้

วิธีสร้างไปป์ไลน์การประมวลผลรูปภาพ

  • กำหนดค่าที่เก็บข้อมูลของพื้นที่เก็บข้อมูล
  • สร้าง Cloud Function เพื่ออ่านและเขียนออบเจ็กต์ใน Cloud Storage
  • ผสานรวม Vision API เพื่อตรวจจับรูปภาพอาหาร
  • ทำให้ Cloud Function ใช้งานได้
  • ทำให้ทริกเกอร์ Eventarc ใช้งานได้
  • ทดสอบและตรวจสอบโซลูชันแบบครบวงจร

ข้อกำหนดเบื้องต้น

  • ห้องทดลองนี้จะถือว่ามีความคุ้นเคยกับ Cloud Console และสภาพแวดล้อมของ Shell
  • ประสบการณ์การใช้งาน Cloud Storage, Cloud Functions หรือ Vision API แบบเดิมมีประโยชน์แต่ไม่บังคับ

2. การตั้งค่าและข้อกำหนด

ตั้งค่าโปรเจ็กต์ที่อยู่ในระบบคลาวด์

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เปิดใช้งาน Cloud Shell

เปิดใช้งาน Cloud Shell โดยคลิกไอคอนทางด้านขวาของแถบค้นหา

8613854df02635a3.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=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. เปิดใช้ API ที่จำเป็นสำหรับห้องทดลอง
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. เปิดใช้ API ที่จำเป็นสำหรับห้องทดลอง (ขั้นตอนเฉพาะสำหรับ Qwiklabs)
gcloud services disable cloudfunctions.googleapis.com
gcloud services enable cloudfunctions.googleapis.com
  1. โคลนที่เก็บ
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/cloud-functions

3. กำหนดค่าที่เก็บข้อมูล Cloud Storage

สร้างที่เก็บข้อมูลของพื้นที่เก็บข้อมูล

สร้างการอัปโหลดและภาพปกของที่เก็บข้อมูล Cloud Storage สำหรับไปป์ไลน์การประมวลผลรูปภาพ

ใช้คำสั่ง gsutil mb และชื่อที่ไม่ซ้ำกันเพื่อสร้างที่เก็บข้อมูล 2 รายการ ได้แก่

  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 Function เพื่อประมวลผลภาพขนาดย่อ โดยทำดังนี้

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

มอบบทบาท artifactregistry.reader เพื่ออนุญาตการดำเนินการอ่านจาก Artifact Registry:

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"

มอบบทบาท run.invoker เพื่ออนุญาตการเรียกใช้บริการ Cloud Run:

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"

มอบบทบาท pubsub.publisher ให้กับบัญชีบริการ Cloud Storage การดำเนินการนี้จะช่วยให้บัญชีบริการเผยแพร่เหตุการณ์เมื่อมีการอัปโหลดรูปภาพลงในที่เก็บข้อมูลได้

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 จะอิงตามการแจ้งเตือน Pub/Sub จาก Cloud Storage และรองรับประเภทเหตุการณ์ที่คล้ายกัน ดังนี้

ในห้องทดลองนี้ คุณจะได้ทำให้ใช้งานได้และทริกเกอร์ฟังก์ชันเมื่อมีการสรุปออบเจ็กต์ใน Cloud Storage

มีการทำให้วัตถุสิ้นสุด

ออบเจ็กต์ทำให้เหตุการณ์ทริกเกอร์ขั้นสุดท้ายเมื่อ "write" ของออบเจ็กต์ Cloud Storage เสร็จเรียบร้อยแล้ว ซึ่งหมายความว่าการสร้างออบเจ็กต์ใหม่หรือเขียนทับออบเจ็กต์ที่มีอยู่จะทริกเกอร์เหตุการณ์นี้ ทริกเกอร์นี้ไม่สนใจการดำเนินการเก็บถาวรและการอัปเดตข้อมูลเมตา

6. ผสานรวม Cloud Storage

Cloud Storage คือบริการสำหรับจัดเก็บออบเจ็กต์ใน Google Cloud ออบเจ็กต์คือชิ้นส่วนข้อมูลที่เปลี่ยนแปลงไม่ได้ ซึ่งประกอบไปด้วยไฟล์รูปแบบใดๆ ก็ตาม คุณจัดเก็บออบเจ็กต์ในคอนเทนเนอร์ที่เรียกว่าที่เก็บข้อมูล ที่เก็บข้อมูลทั้งหมดเชื่อมโยงกับโปรเจ็กต์ และคุณจะจัดกลุ่มโปรเจ็กต์ภายใต้องค์กรได้ ไลบรารีไคลเอ็นต์และ API ทำให้ผสานรวมกับ Cloud Storage

ในห้องทดลองนี้ คุณจะใช้ไลบรารีของไคลเอ็นต์เพื่ออ่านและเขียนออบเจ็กต์ไปยัง Cloud Storage

การติดตั้งไลบรารีของไคลเอ็นต์

ไลบรารีของไคลเอ็นต์ระบบคลาวด์มีให้บริการในภาษาโปรแกรมยอดนิยมจำนวนมาก หากต้องการเริ่มใช้ไลบรารี คุณต้องติดตั้งไลบรารีของไคลเอ็นต์

การใช้ไลบรารีของไคลเอ็นต์

รายละเอียดการใช้งานจำนวนมากขึ้นอยู่กับภาษาโปรแกรม หากต้องการใช้ไลบรารีของไคลเอ็นต์ในแอปพลิเคชันของคุณ ขั้นตอนแรกคือการนำเข้าทรัพยากร Dependency ของ 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",
        ...
    }
  }

ลงทะเบียน Callback ของ CloudEvent

ลงทะเบียน Callback 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 ได้ 3 วิธี ได้แก่ คำขอเดียว คำขอกลับมาทำงานต่อ หรือการอัปโหลดหลายส่วนของ XML API สำหรับการอัปโหลดขนาดใหญ่ขึ้นหรือการอัปโหลดแบบสตรีมมิง ให้ใช้การอัปโหลดที่ดำเนินการต่อได้ ไฟล์ XML API จะอัปโหลดเป็นส่วนๆ และประกอบเข้าด้วยกันเป็นออบเจ็กต์เดียว สำหรับออบเจ็กต์ขนาดเล็ก ให้ใช้การอัปโหลดแบบคำขอรวมครั้งเดียว

โค้ดด้านล่างจะอัปโหลดรูปภาพไปยังพื้นที่เก็บข้อมูลระบบคลาวด์โดยใช้การอัปโหลดคำขอเดียว

index.js

const thumbnailImage = await thumbBucket.upload(thumbFile);

7. ผสานรวม Vision API

Cloud Vision ช่วยให้นักพัฒนาซอฟต์แวร์ผสานรวมฟีเจอร์การตรวจจับการมองเห็นในแอปพลิเคชันได้อย่างง่ายดาย รวมถึงการติดป้ายกำกับรูปภาพ การตรวจจับใบหน้าและจุดสังเกต การรู้จำอักขระด้วยภาพ (OCR) และการติดแท็กเนื้อหาที่อาจไม่เหมาะสม

การติดตั้งไลบรารีของไคลเอ็นต์

ไลบรารีของไคลเอ็นต์ระบบคลาวด์มีให้บริการในภาษาโปรแกรมยอดนิยมจำนวนมาก หากต้องการเริ่มใช้ไลบรารี คุณต้องติดตั้งไลบรารีของไคลเอ็นต์

สร้างไคลเอ็นต์ตัวเขียนคำอธิบายประกอบรูปภาพ

หากต้องการเข้าถึง Google APIs โดยใช้ SDK ของไคลเอ็นต์อย่างเป็นทางการ คุณต้องสร้างออบเจ็กต์บริการตามเอกสารการค้นพบของ API ซึ่งจะอธิบายถึง API ของ SDK นั้น คุณจะต้องดึงข้อมูลจากบริการค้นพบของ Vision API โดยใช้ข้อมูลเข้าสู่ระบบของคุณ

ดัชนี.js

const client = new vision.ImageAnnotatorClient();

สร้างคำขอ Vision API

Vision API สามารถตรวจหาฟีเจอร์ในไฟล์รูปภาพได้โดยส่งเนื้อหาของไฟล์ภาพเป็นสตริงที่เข้ารหัส base64 ในเนื้อหาคำขอ

วิธีสร้างคำขอโดยใช้ทรัพยากรรูปภาพเพื่อใส่คำอธิบายประกอบในรูปภาพ คำขอที่ส่งไปยัง API นี้อยู่ในรูปแบบของออบเจ็กต์ที่มีรายการคำขอ แต่ละรายการในลิสต์นี้ประกอบด้วยข้อมูล 2 บิต ดังนี้

  • ข้อมูลรูปภาพที่เข้ารหัสฐาน 64
  • รายการฟีเจอร์ที่คุณต้องการใส่คำอธิบายประกอบเกี่ยวกับรูปภาพนั้น

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 Function ใช้งานได้

บริการปรับขนาดรูปภาพนี้เป็นส่วนหนึ่งของระบบ Cymbal Eats ที่ใหญ่กว่า ในส่วนนี้ คุณจะได้ปรับใช้เฉพาะคอมโพเนนต์ที่เกี่ยวข้องกับฟีเจอร์การประมวลผลรูปภาพ การติดตั้งเต็มรูปแบบจะรวม UI สำหรับอัปโหลดรูปภาพและคำขอดาวน์สตรีมเพื่อเก็บข้อมูลเมตาที่ได้ ความสามารถเหล่านี้จะไม่ได้รับการติดตั้งในห้องทดลองนี้

คอมโพเนนต์ต่อไปนี้จะสร้างขึ้นระหว่างการทำให้ฟังก์ชันใช้งานได้

  • Cloud Function
  • บริการ Cloud Run
  • ทริกเกอร์ Eventarc
  • หัวข้อ Pub/Sub และการสมัครใช้บริการ

ในเทอร์มินัล Cloudshell ให้เรียกใช้คำสั่งด้านล่างเพื่อทำให้ Cloud Function ใช้งานได้ด้วยที่เก็บข้อมูลทริกเกอร์ใน menu-item-uploads-$PROJECT_ID

gcloud functions deploy process-thumbnails \
  --gen2 \
  --runtime=nodejs16 \
  --source=thumbnail \
  --region=$REGION \
  --project=$PROJECT_ID \
  --entry-point=process-thumbnails \
  --trigger-bucket=$UPLOAD_BUCKET \
  --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

หากการทำให้ใช้งานได้ล้มเหลวเนื่องจากปัญหาด้านสิทธิ์บนที่เก็บข้อมูลของพื้นที่เก็บข้อมูลอัปโหลด โปรดรอให้การเปลี่ยนแปลง IAM จากขั้นตอนก่อนหน้าเผยแพร่ โดยปกติแล้วจะใช้เวลา 1-2 นาที จากนั้นลองทำให้ใช้งานได้อีกครั้ง

ตัวอย่างเอาต์พุต

Deploying function (may take a while - up to 2 minutes)...done.
[...] 

ตรวจสอบ Cloud Function ที่สร้างขึ้นต่อไปนี้ใน Cloud Console

8148dd29e6757603.png

ใน Cloud Console ให้ตรวจสอบบริการ Cloud Run ที่สร้างขึ้นสำหรับฟังก์ชัน ดังนี้

42e970cdd48cae76.png

ใน Cloud Console ให้ตรวจสอบทริกเกอร์ Eventarc ที่สร้างขึ้นสำหรับฟังก์ชัน ดังนี้

9441995a5cc62e38.png

ใน Cloud Console ให้ตรวจสอบหัวข้อและการสมัครใช้บริการ Pub/Sub ที่สร้างขึ้นสำหรับทริกเกอร์ Eventarc ดังนี้

affe089c39ae1465.png

a4c41ede2af300db.png

9. ทดสอบและตรวจสอบโซลูชันแบบครบวงจร

อัปโหลดรูปภาพใหม่ไปยัง Cloud Storage และตรวจสอบความคืบหน้าของไปป์ไลน์ขณะวิเคราะห์รูปภาพ คุณจะต้องทดสอบโซลูชันจากต้นทางถึงปลายทางโดยการตรวจสอบบันทึกของฟังก์ชันระบบคลาวด์

การอัปโหลดรูปภาพที่เหมาะสม

2fdd13b63d6148f4.jpeg

  1. บันทึกอิมเมจนี้ลงในเครื่องของคุณ
  2. เปลี่ยนชื่อไฟล์ 1.jpg
  3. เปิดคอนโซล Cloud Storage
  4. คลิกที่เก็บข้อมูล menu-item-uploads-...
  5. คลิกอัปโหลดไฟล์
  6. อัปโหลด 1.jpg ไปยังที่เก็บข้อมูลของพื้นที่เก็บข้อมูล
  7. ใน Cloud Console ให้ไปที่ Cloud Functions
  8. คลิกภาพปกกระบวนการ
  9. คลิกแท็บบันทึก

7ab4e783e474c90d.png

  1. ไปที่ที่เก็บข้อมูล Cloud Storage menu-item-thumbnails-$PROJECT_ID
  2. ตรวจสอบว่าระบบสร้างภาพขนาดย่อในที่เก็บข้อมูลภาพขนาดย่อแล้ว

84d8023782eb3e0c.png

การอัปโหลดรูปภาพที่ไม่ใช่อาหาร

ในการตรวจสอบว่าฟังก์ชันทำงานอย่างถูกต้อง คุณจะต้องอัปโหลดรูปภาพที่ไม่มีวัตถุที่จัดว่าเป็น "อาหาร" รายการ

3226a24251084b28.jpeg

  1. บันทึกอิมเมจนี้ลงในเครื่องของคุณ
  2. เปลี่ยนชื่อไฟล์ 2.jpg
  3. เปิดคอนโซล Cloud Storage
  4. คลิกที่เก็บข้อมูล menu-item-uploads-...
  5. คลิกอัปโหลดไฟล์
  6. อัปโหลด 2.jpg ไปยังที่เก็บข้อมูลของพื้นที่เก็บข้อมูล
  7. ใน Cloud Console ให้ไปที่ Cloud Functions
  8. คลิกภาพปกกระบวนการ
  9. คลิกแท็บบันทึก

421c36c342fceea8.png

10. ยินดีด้วย

ยินดีด้วย คุณใช้งานห้องทดลองเสร็จแล้ว

ขั้นตอนต่อไปที่ทำได้

สำรวจ Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

เพื่อหลีกเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในบทแนะนำนี้ โปรดลบโปรเจ็กต์ที่มีทรัพยากรดังกล่าวหรือเก็บโปรเจ็กต์ไว้และลบทรัพยากรแต่ละรายการ

กำลังลบโปรเจ็กต์

วิธีที่ง่ายที่สุดในการยกเลิกการเรียกเก็บเงินคือการลบโปรเจ็กต์ที่คุณสร้างไว้สำหรับบทแนะนำ