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

1. ภาพรวม

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

424779013ac38648.png

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

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

  • กำหนดค่าที่เก็บข้อมูลของพื้นที่เก็บข้อมูล
  • สร้างฟังก์ชัน Cloud Run เพื่ออ่านและเขียนออบเจ็กต์ใน Cloud Storage
  • ทําให้ทริกเกอร์ 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 APIs ไม่ได้ใช้ คุณอัปเดตได้ทุกเมื่อ
  • รหัสโปรเจ็กต์จะไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยทั่วไปจะระบุเป็น PROJECT_ID) หากไม่ชอบรหัสที่สร้างขึ้น คุณอาจสร้างรหัสแบบสุ่มอีกรหัสหนึ่งได้ หรือคุณอาจลองใช้ชื่อของคุณเองและดูว่ามีชื่อนั้นหรือไม่ คุณจะเปลี่ยนแปลงรหัสนี้หลังจากขั้นตอนนี้ไม่ได้ และรหัสจะคงอยู่ตลอดระยะเวลาของโปรเจ็กต์
  • โปรดทราบว่ายังมีค่าที่ 3 ซึ่งคือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
  1. จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้จะไม่มีค่าใช้จ่ายมากนัก หรืออาจไม่มีค่าใช้จ่ายเลย หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่สร้างขึ้นหรือลบโปรเจ็กต์ได้ ผู้ใช้ 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 Bucket ดังนี้

  1. อัปโหลดที่เก็บข้อมูลที่ระบบจะอัปโหลดรูปภาพก่อน
  2. ที่เก็บข้อมูลภาพขนาดย่อเพื่อจัดเก็บรูปภาพปกที่สร้างขึ้น

สร้างที่เก็บข้อมูลเพื่ออัปโหลดรูปภาพใหม่

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

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

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

สร้าง Bucket เพื่อจัดเก็บภาพปกที่สร้างขึ้น

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

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

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

อัปเดตสิทธิ์ของ Bucket

อัปเดตสิทธิ์ของที่เก็บข้อมูลเพื่ออนุญาตสิทธิ์อ่านแก่ผู้ใช้

ใช้คำสั่ง 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 เพื่ออนุญาตให้จัดเก็บรูปภาพที่สร้างขึ้นใน Bucket ของภาพขนาดย่อ

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 ซึ่งจะทำให้บัญชีบริการเผยแพร่เหตุการณ์ได้เมื่อมีการอัปโหลดรูปภาพลงใน Bucket

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 และรองรับประเภทเหตุการณ์ที่คล้ายกัน ดังนี้

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

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

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

6. ผสานรวม Cloud Storage

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

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

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

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

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

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

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 ระบบจะอัปโหลดไฟล์เป็นส่วนๆ และประกอบเป็นออบเจ็กต์เดียว สำหรับออบเจ็กต์ขนาดเล็ก ให้ใช้การอัปโหลดแบบคำขอเดียว

โค้ดด้านล่างจะอัปโหลดรูปภาพไปยัง Cloud Storage โดยใช้การอัปโหลดแบบคำขอเดียว

index.js

const thumbnailImage = await thumbBucket.upload(thumbFile);

7. ผสานรวม Vision API

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

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

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

สร้างไคลเอ็นต์โปรแกรมอธิบายรูปภาพ

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

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

  • ฟังก์ชัน 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 Console ให้ตรวจสอบบริการ Cloud Run ที่สร้างขึ้นสำหรับฟังก์ชัน

546c5c951cf0f2f.png

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

dec11309016b09ac.png

ใน Cloud Console ให้ตรวจสอบ Topic และ Subscription ของ 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 Run ใน Cloud Console
  8. คลิก process-thumbails
  9. คลิกแท็บบันทึก

fca8e4bafbdf135d.png

  1. ไปที่ Bucket ของ 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 ไปยัง Bucket ของพื้นที่เก็บข้อมูล
  7. ไปที่ Cloud Run ใน Cloud Console
  8. คลิก process-thumbails
  9. คลิกแท็บบันทึก

18b1e30ee78d3955.png

10. ยินดีด้วย

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

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

ดู Codelab อื่นๆ ของ Cymbal Eats

ล้างข้อมูล

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

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

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