สร้างกลุ่มที่ขับเคลื่อนด้วยเหตุการณ์ด้วย Eventarc และ Workflows

1. บทนำ

cb762f29e9183a3f.png 1c05e3d0c2bd2b45.png a03f943ca09ac4c.png

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

เวิร์กโฟลว์คือแพลตฟอร์มการจัดการเป็นกลุ่มที่มีการจัดการครบวงจร ซึ่งจะเรียกใช้บริการตามลำดับที่คุณกำหนด ซึ่งก็คือเวิร์กโฟลว์ เวิร์กโฟลว์เหล่านี้สามารถรวมบริการที่โฮสต์บน Cloud Run หรือ Cloud Functions, บริการของ Google Cloud เช่น Cloud Vision AI และ BigQuery และ API แบบ HTTP ทั้งหมดเข้าด้วยกัน

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

สุดท้ายแล้วคุณจะได้สถาปัตยกรรมแบบ Serverless ที่ยืดหยุ่นแต่มีโครงสร้างเพื่อประมวลผลรูปภาพ

e372ceed8c26c5fb.png

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

  • ภาพรวมของ Eventarc และเวิร์กโฟลว์
  • วิธีทำให้บริการ Cloud Functions ใช้งานได้
  • วิธีจัดการบริการเป็นกลุ่มโดยใช้เวิร์กโฟลว์
  • วิธีทำให้เวิร์กโฟลว์ตอบสนองต่อเหตุการณ์ Cloud Storage ด้วย Eventarc

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

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน ดังนี้

55efc1aaa7a4d3ad.png

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

7ffe5cbb04455448.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ใช้งานได้ต่อเนื่องและทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานทั้งหมดใน Codelab นี้ทำได้ในเบราว์เซอร์ คุณไม่จำเป็นต้องติดตั้งอะไรเลย

ตั้งค่า gcloud

ตั้งค่ารหัสโปรเจ็กต์และภูมิภาคที่ต้องการทำให้แอปพลิเคชันใช้งานได้ใน Cloud Shell บันทึกเป็นตัวแปร PROJECT_ID และ REGION โปรดดูที่ตำแหน่ง Cloud Functions สำหรับภูมิภาคที่พร้อมใช้งาน

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

ดูซอร์สโค้ด

ซอร์สโค้ดของแอปพลิเคชันจะอยู่ในโฟลเดอร์ processing-pipelines ของที่เก็บ eventarc-samples

โคลนที่เก็บ:

git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git

ไปที่โฟลเดอร์ eventarc-samples/processing-pipelines:

cd eventarc-samples/processing-pipelines

3. ภาพรวมสถาปัตยกรรม

สถาปัตยกรรมของแอปพลิเคชันมีดังนี้

6aa6fbc7721dd6b6.png

  1. ระบบจะบันทึกรูปภาพลงในที่เก็บข้อมูลอินพุตที่สร้างเหตุการณ์การสร้าง Cloud Storage
  2. Eventarc จะอ่านเหตุการณ์การสร้าง Cloud Storage ผ่านทริกเกอร์ Cloud Storage และส่งไปยัง Workflows เป็น CloudEvent
  3. ในขั้นตอนแรกของเวิร์กโฟลว์ Filter ซึ่งเป็นบริการ Cloud Function จะใช้ Vision API เพื่อระบุว่ารูปภาพปลอดภัยหรือไม่ หากอิมเมจปลอดภัย เวิร์กโฟลว์จะดำเนินการในขั้นตอนถัดไป
  4. ในขั้นตอนที่ 2 ของเวิร์กโฟลว์ Labeler ซึ่งเป็นบริการ Cloud Function จะแยกป้ายกำกับของรูปภาพด้วย Vision API และบันทึกป้ายกำกับลงในที่เก็บข้อมูลเอาต์พุต
  5. ในขั้นตอนที่ 3 Adjustr ซึ่งเป็นบริการ Cloud Function อื่นจะปรับขนาดรูปภาพโดยใช้ ImageSharp และบันทึกรูปภาพที่ปรับขนาดลงในที่เก็บข้อมูลเอาต์พุต
  6. ในขั้นตอนสุดท้าย Watermarker ซึ่งเป็นบริการ Cloud Function อีกบริการหนึ่งจะเพิ่มลายน้ำของป้ายกำกับจาก Labeler ไปยังรูปภาพที่ปรับขนาดโดยใช้ ImageSharp และบันทึกรูปภาพลงในที่เก็บข้อมูลเอาต์พุต

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

4. สร้างที่เก็บข้อมูล

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

เรียกใช้สิ่งต่อไปนี้ใน Cloud Shell

REGION=us-central1
BUCKET1=$PROJECT_ID-images-input
BUCKET2=$PROJECT_ID-images-output

gsutil mb -l $REGION gs://$BUCKET1
gsutil mb -l $REGION gs://$BUCKET2

5. ทำให้บริการตัวกรองใช้งานได้

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

ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับ Cloud Functions gen2 และ Vision API โดยทำดังนี้

gcloud services enable \
  artifactregistry.googleapis.com \
  cloudbuild.googleapis.com \
  cloudfunctions.googleapis.com \
  run.googleapis.com \
  vision.googleapis.com

ทำให้บริการใช้งานได้ภายในโฟลเดอร์ processing-pipelines ระดับบนสุด

SERVICE_NAME=filter

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --entry-point Filter.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v3/filter/csharp

เมื่อมีการทำให้ฟังก์ชันใช้งานได้แล้ว ให้ตั้งค่า URL บริการในตัวแปร โดยเราจะต้องใช้ในภายหลัง

FILTER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

6. ทำให้บริการผู้ติดป้ายกำกับใช้งานได้

บริการ Cloud Functions ที่ 2 จะได้รับที่เก็บข้อมูลและไฟล์ ดึงข้อมูลป้ายกำกับของรูปภาพด้วย Vision API และบันทึกป้ายกำกับลงในที่เก็บข้อมูลเอาต์พุต

ทำให้บริการใช้งานได้ภายในโฟลเดอร์ processing-pipelines ระดับบนสุด

SERVICE_NAME=labeler

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Labeler.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/labeler/csharp

เมื่อมีการทำให้ฟังก์ชันใช้งานได้แล้ว ให้ตั้งค่า URL บริการในตัวแปร โดยเราจะต้องใช้ในภายหลัง

LABELER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

7. ทำให้บริการตัวปรับขนาดใช้งานได้

บริการ Cloud Functions นี้จะได้รับที่เก็บข้อมูลและข้อมูลไฟล์ ปรับขนาดรูปภาพโดยใช้ ImageSharp และบันทึกรูปภาพลงในที่เก็บข้อมูลเอาต์พุต

ทำให้บริการใช้งานได้ภายในโฟลเดอร์ processing-pipelines ระดับบนสุด

SERVICE_NAME=resizer

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Resizer.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/resizer/csharp \
  --timeout=120s

จดค่า timeout เป็น 2 นาทีเพื่อให้ฟังก์ชันตัวปรับขนาดใช้เวลาประมวลผลนานขึ้น

เมื่อมีการทำให้ฟังก์ชันใช้งานได้แล้ว ให้ตั้งค่า URL บริการในตัวแปร โดยเราจะต้องใช้ในภายหลัง

RESIZER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

8. ทำให้บริการเครื่องมือลายน้ำใช้งานได้

บริการ Cloud Functions นี้จะรับข้อมูลที่เก็บข้อมูล ไฟล์ และป้ายกำกับ อ่านไฟล์ เพิ่มป้ายกำกับเป็นลายน้ำไปยังรูปภาพโดยใช้ ImageSharp และบันทึกรูปภาพลงในที่เก็บข้อมูลเอาต์พุต

ทำให้บริการใช้งานได้ภายในโฟลเดอร์ processing-pipelines ระดับบนสุด

SERVICE_NAME=watermarker

gcloud functions deploy $SERVICE_NAME \
  --gen2 \
  --allow-unauthenticated \
  --runtime dotnet3 \
  --trigger-http \
  --region=$REGION \
  --set-env-vars BUCKET=$BUCKET2 \
  --entry-point Watermarker.Function \
  --set-build-env-vars GOOGLE_BUILDABLE=image-v2/watermarker/csharp

เมื่อมีการทำให้ฟังก์ชันใช้งานได้แล้ว ให้ตั้งค่า URL บริการในตัวแปร โดยเราจะต้องใช้ในภายหลัง

WATERMARKER_URL=$(gcloud functions describe $SERVICE_NAME --region=$REGION --gen2 --format 'value(serviceConfig.uri)')

ในจุดนี้ ควรทำให้ Cloud Functions ทั้ง 4 รายการใช้งานได้และทำงานอยู่ ดังนี้

76a218568982c90c.png

9. กำหนดและทำให้เวิร์กโฟลว์ใช้งานได้

ใช้เวิร์กโฟลว์เพื่อรวมตัวกรอง ผู้ติดป้ายกำกับ ตัวปรับขนาด และบริการลายน้ำเข้าไว้ในเวิร์กโฟลว์ เวิร์กโฟลว์จะจัดกลุ่มบริการเหล่านี้ตามลำดับและด้วยพารามิเตอร์ที่เรากำหนด

ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับเวิร์กโฟลว์ดังนี้

gcloud services enable \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

กำหนด

เวิร์กโฟลว์ได้รับ CloudEvent เป็นพารามิเตอร์ ซึ่งจะมาจาก Eventarc เมื่อเราสร้างทริกเกอร์ ใน 2 ขั้นตอนแรก เวิร์กโฟลว์จะบันทึกเหตุการณ์และดึงข้อมูลที่เก็บข้อมูลและไฟล์จากเหตุการณ์ ดังนี้

main:
  params: [event]
  steps:
  - log_event:
      call: sys.log
      args:
          text: ${event}
          severity: INFO
  - extract_bucket_and_file:
      assign:
      - bucket: ${event.data.bucket}
      - file: ${event.data.name}

ในขั้นตอน filter เวิร์กโฟลว์จะเรียกใช้บริการตัวกรองที่เราทำให้ใช้งานได้ก่อนหน้านี้ จากนั้นจะบันทึกและตรวจสอบความปลอดภัยของไฟล์โดยทำดังนี้

  - filter:
      call: http.post
      args:
        url: FILTER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: filterResponse
  - log_safety:
      call: sys.log
      args:
          text: ${filterResponse.body.safe}
          severity: INFO
  - check_safety:
      switch:
        - condition: ${filterResponse.body.safe == true}
          next: label
      next: end

ในขั้นตอน label เวิร์กโฟลว์จะเรียกใช้บริการผู้ติดป้ายกำกับและบันทึกการตอบกลับ (ป้ายกำกับ 3 อันดับแรก) ดังนี้

  - label:
      call: http.post
      args:
        url: LABELER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: labelResponse

ในขั้นตอน resize เวิร์กโฟลว์จะเรียกใช้บริการตัวปรับขนาดและบันทึกการตอบกลับ (ที่เก็บข้อมูลและไฟล์ของรูปภาพที่ปรับขนาด) ดังนี้

  - resize:
      call: http.post
      args:
        url: RESIZER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${bucket}
            file: ${file}
      result: resizeResponse

ในขั้นตอน watermark เวิร์กโฟลว์จะเรียกใช้บริการลายน้ำพร้อมรูปภาพและป้ายกำกับที่ปรับขนาดแล้ว และบันทึกผลลัพธ์ (รูปภาพที่ปรับขนาดและมีลายน้ำ):

  - watermark:
      call: http.post
      args:
        url: WATERMARKER_URL # TODO: Replace
        auth:
          type: OIDC
        body:
            bucket: ${resizeResponse.body.bucket}
            file: ${resizeResponse.body.file}
            labels: ${labelResponse.body.labels}
      result: watermarkResponse

ในขั้นตอน final เวิร์กโฟลว์จะแสดงรหัสสถานะ HTTP จากบริการเครื่องมือติดป้ายกำกับ ตัวปรับขนาด และเครื่องมือลายน้ำ ดังนี้

  - final:
      return:
        label: ${labelResponse.code}
        resize: ${resizeResponse.code}
        watermark: ${watermarkResponse.code}

ทำให้ใช้งานได้

ก่อนทำให้เวิร์กโฟลว์ใช้งานได้ โปรดตรวจสอบว่าได้แทนที่ URL ของบริการด้วย URL ของฟังก์ชันที่ทำให้ใช้งานได้แล้วด้วยตนเองหรือใช้ sed ดังนี้

ภายในโฟลเดอร์ processing-pipelines ระดับบนสุด ให้ไปที่โฟลเดอร์ image-v3 ที่มี workflows.yaml ไฟล์อยู่ ดังนี้

cd image-v3/

เรียกใช้ sed เพื่อแทนที่ URL ตัวยึดตำแหน่งด้วย URL จริงของบริการที่ทำให้ใช้งานได้แล้ว

sed -i -e "s|FILTER_URL|${FILTER_URL}|" workflow.yaml
sed -i -e "s|LABELER_URL|${LABELER_URL}|" workflow.yaml
sed -i -e "s|RESIZER_URL|${RESIZER_URL}|" workflow.yaml
sed -i -e "s|WATERMARKER_URL|${WATERMARKER_URL}|" workflow.yaml

ทำให้เวิร์กโฟลว์ใช้งานได้:

WORKFLOW_NAME=image-processing

gcloud workflows deploy $WORKFLOW_NAME \
    --source=workflow.yaml \
    --location=$REGION

คุณควรเห็นเวิร์กโฟลว์ที่มีการทำให้ใช้งานได้ในคอนโซลภายใน 2-3 วินาที ดังนี้

92cf4e758bdc3dde.png

10. สร้างทริกเกอร์

เมื่อทำให้เวิร์กโฟลว์ใช้งานได้แล้ว ขั้นตอนสุดท้ายคือการเชื่อมต่อกับเหตุการณ์ Cloud Storage ด้วยทริกเกอร์ Eventarc

การตั้งค่าเพียงครั้งเดียว

ก่อนอื่น ให้เปิดใช้บริการที่จำเป็นสำหรับ Eventarc ดังนี้

gcloud services enable \
 eventarc.googleapis.com

สร้างบัญชีบริการที่คุณจะใช้ในทริกเกอร์ Eventarc

SERVICE_ACCOUNT=eventarc-trigger-imageproc-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Eventarc trigger image processing service account"

มอบบทบาท workflows.invoker เพื่อให้ใช้บัญชีบริการเพื่อเรียกใช้เวิร์กโฟลว์จาก Eventarc ได้โดยทำดังนี้

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/workflows.invoker \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

มอบบทบาท eventarc.eventReceiver เพื่อใช้บัญชีบริการใน

ทริกเกอร์ Cloud Storage:

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

มอบบทบาท pubsub.publisher ให้กับบัญชีบริการ Cloud Storage จำเป็นสำหรับทริกเกอร์ Cloud Storage ของ Eventarc

STORAGE_SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p $PROJECT_ID)"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$STORAGE_SERVICE_ACCOUNT \
    --role roles/pubsub.publisher

สร้าง

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

TRIGGER_NAME=trigger-image-processing

gcloud eventarc triggers create $TRIGGER_NAME \
  --location=$REGION \
  --destination-workflow=$WORKFLOW_NAME \
  --destination-workflow-location=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET1" \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

คุณจะเห็นว่าทริกเกอร์สร้างแล้วและพร้อมในส่วน Eventarc ของ Cloud Console โดยทำดังนี้

14330c4fa2451bc0.png

11. ทดสอบไปป์ไลน์

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

gsutil cp beach.jpg gs://$BUCKET1

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

36d07cb63c39e7d9.png

หลังจากผ่านไปประมาณ 1 นาที คุณควรจะเห็นว่าการดำเนินการสำเร็จแล้ว นอกจากนี้ คุณยังดูอินพุตและเอาต์พุตของเวิร์กโฟลว์ได้ด้วย โดยทำดังนี้

229200c79d989c25.png

หากคุณแสดงเนื้อหาของที่เก็บข้อมูลเอาต์พุต คุณควรจะเห็นรูปภาพที่มีการปรับขนาด รูปภาพที่มีการปรับขนาดและมีลายน้ำ และป้ายกำกับของรูปภาพ

gsutil ls gs://$BUCKET2

gs://$PROJECT_ID-images-output/beach-400x400-watermark.jpeg
gs://$PROJECT_ID-images-output/beach-400x400.png
gs://$PROJECT_ID-images-output/beach-labels.txt

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

75f3c0019ca842ce.jpeg

12. ขอแสดงความยินดี

ยินดีด้วย คุณศึกษา Codelab จบแล้ว

สรุปประเด็นที่ได้พูดถึง

  • ภาพรวมของ Eventarc และเวิร์กโฟลว์
  • วิธีทำให้บริการ Cloud Functions ใช้งานได้
  • วิธีจัดการบริการเป็นกลุ่มโดยใช้เวิร์กโฟลว์
  • วิธีทำให้เวิร์กโฟลว์ตอบสนองต่อเหตุการณ์ Cloud Storage ด้วย Eventarc