การทริกเกอร์การประมวลผลเหตุการณ์จาก Cloud Storage โดยใช้ฟังก์ชัน Eventarc และ Cloud Run

1. ภาพรวม

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

424779013ac38648.png

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

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

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

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

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

เปิดใช้งาน 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. เปิดใช้ 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. โคลนที่เก็บ
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 เพื่ออนุญาตให้ดำเนินการอ่านจากที่เก็บอาร์ติแฟกต์

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

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

เหตุการณ์ "finalization" ของออบเจ็กต์จะทริกเกอร์เมื่อ "การเขียน" ออบเจ็กต์ 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",
        ...
    }
  }

ลงทะเบียนการเรียกกลับ CloudEvent

ลงทะเบียนการเรียกกลับ CloudEvent ด้วย Functions Framework ที่ 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 อย่างเป็นทางการของไคลเอ็นต์ คุณจะต้องสร้างออบเจ็กต์บริการตามเอกสาร Discovery ของ API ซึ่งจะอธิบาย API ให้กับ SDK คุณจะต้องดึงข้อมูลจากบริการการค้นพบของ Vision API โดยใช้ข้อมูลเข้าสู่ระบบ

index.js

const client = new vision.ImageAnnotatorClient();

สร้างคําขอ Vision API

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

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

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

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

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

ในเทอร์มินัล Cloud Shell ให้เรียกใช้คําสั่งด้านล่างเพื่อทําให้ฟังก์ชัน Cloud Run พร้อมใช้งานโดยที่เก็บข้อมูลทริกเกอร์ใน menu-item-uploads-$PROJECT_ID

หากต้องการทำให้ฟังก์ชัน 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 จากขั้นตอนก่อนหน้ามีผล ซึ่งโดยปกติจะใช้เวลา 1-2 นาที จากนั้นให้ลองทำให้เสร็จอีกครั้ง

ตัวอย่างเอาต์พุตข้อผิดพลาด

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

ในคอนโซล Cloud ให้ตรวจสอบบริการ Cloud Run ที่สร้างขึ้นสําหรับฟังก์ชัน

546c5c951cf0f2f.png

ในคอนโซล Cloud ให้ตรวจสอบทริกเกอร์ Eventarc ที่สร้างขึ้นสําหรับฟังก์ชัน

dec11309016b09ac.png

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

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. ยินดีด้วย

ยินดีด้วย คุณทำแล็บเสร็จแล้ว

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

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

ล้างข้อมูล

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

การลบโปรเจ็กต์

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