1. บทนำ
Eventarc ช่วยให้เชื่อมต่อบริการ Cloud Run กับเหตุการณ์จากแหล่งที่มาต่างๆ ได้อย่างง่ายดาย ซึ่งช่วยให้คุณสร้างสถาปัตยกรรมที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งมีการเชื่อมต่อและกระจาย Microservice แบบหลวมๆ โดยจะดูแลเรื่องการนำเข้าเหตุการณ์ การนำส่ง ความปลอดภัย การให้สิทธิ์ และการจัดการข้อผิดพลาดสำหรับคุณ
เวิร์กโฟลว์คือแพลตฟอร์มการจัดการเป็นกลุ่มที่มีการจัดการครบวงจร ซึ่งจะเรียกใช้บริการตามลำดับที่คุณกำหนด ซึ่งก็คือเวิร์กโฟลว์ เวิร์กโฟลว์เหล่านี้สามารถรวมบริการที่โฮสต์บน Cloud Run หรือ Cloud Functions, บริการของ Google Cloud เช่น Cloud Vision AI และ BigQuery และ API แบบ HTTP ทั้งหมดเข้าด้วยกัน
ใน Codelab นี้ คุณจะสร้าง Microservice เป็นกลุ่มๆ ที่ขับเคลื่อนด้วยเหตุการณ์เพื่อประมวลผลรูปภาพ คุณจะใช้เวิร์กโฟลว์เพื่อจัดการลำดับ อินพุต และเอาต์พุตของการประมวลผลรูปภาพ 4 ฟังก์ชันระบบคลาวด์ จากนั้นคุณจะเปิดใช้การจัดการเป็นกลุ่มเพื่อตอบสนองต่อเหตุการณ์ Cloud Storage ในลักษณะที่มีการจับคู่แบบหลวมกับ Eventarc
สุดท้ายแล้วคุณจะได้สถาปัตยกรรมแบบ Serverless ที่ยืดหยุ่นแต่มีโครงสร้างเพื่อประมวลผลรูปภาพ
สิ่งที่คุณจะได้เรียนรู้
- ภาพรวมของ Eventarc และเวิร์กโฟลว์
- วิธีทำให้บริการ Cloud Functions ใช้งานได้
- วิธีจัดการบริการเป็นกลุ่มโดยใช้เวิร์กโฟลว์
- วิธีทำให้เวิร์กโฟลว์ตอบสนองต่อเหตุการณ์ Cloud Storage ด้วย Eventarc
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
จากคอนโซล Google Cloud ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน ดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 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. ภาพรวมสถาปัตยกรรม
สถาปัตยกรรมของแอปพลิเคชันมีดังนี้
- ระบบจะบันทึกรูปภาพลงในที่เก็บข้อมูลอินพุตที่สร้างเหตุการณ์การสร้าง Cloud Storage
- Eventarc จะอ่านเหตุการณ์การสร้าง Cloud Storage ผ่านทริกเกอร์ Cloud Storage และส่งไปยัง Workflows เป็น CloudEvent
- ในขั้นตอนแรกของเวิร์กโฟลว์ Filter ซึ่งเป็นบริการ Cloud Function จะใช้ Vision API เพื่อระบุว่ารูปภาพปลอดภัยหรือไม่ หากอิมเมจปลอดภัย เวิร์กโฟลว์จะดำเนินการในขั้นตอนถัดไป
- ในขั้นตอนที่ 2 ของเวิร์กโฟลว์ Labeler ซึ่งเป็นบริการ Cloud Function จะแยกป้ายกำกับของรูปภาพด้วย Vision API และบันทึกป้ายกำกับลงในที่เก็บข้อมูลเอาต์พุต
- ในขั้นตอนที่ 3 Adjustr ซึ่งเป็นบริการ Cloud Function อื่นจะปรับขนาดรูปภาพโดยใช้ ImageSharp และบันทึกรูปภาพที่ปรับขนาดลงในที่เก็บข้อมูลเอาต์พุต
- ในขั้นตอนสุดท้าย 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 รายการใช้งานได้และทำงานอยู่ ดังนี้
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 วินาที ดังนี้
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 โดยทำดังนี้
11. ทดสอบไปป์ไลน์
ไปป์ไลน์การประมวลผลรูปภาพพร้อมรับเหตุการณ์จาก Cloud Storage แล้ว หากต้องการทดสอบไปป์ไลน์ ให้อัปโหลดรูปภาพไปยังที่เก็บข้อมูลอินพุตดังนี้
gsutil cp beach.jpg gs://$BUCKET1
ทันทีที่คุณอัปโหลดภาพ คุณควรจะเห็นการดำเนินการของเวิร์กโฟลว์ในสถานะที่ใช้งานอยู่:
หลังจากผ่านไปประมาณ 1 นาที คุณควรจะเห็นว่าการดำเนินการสำเร็จแล้ว นอกจากนี้ คุณยังดูอินพุตและเอาต์พุตของเวิร์กโฟลว์ได้ด้วย โดยทำดังนี้
หากคุณแสดงเนื้อหาของที่เก็บข้อมูลเอาต์พุต คุณควรจะเห็นรูปภาพที่มีการปรับขนาด รูปภาพที่มีการปรับขนาดและมีลายน้ำ และป้ายกำกับของรูปภาพ
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
หากต้องการตรวจสอบอีกครั้ง ให้เปิดรูปภาพที่มีการปรับขนาดและมีลายน้ำเพื่อดูผลลัพธ์ โดยทำดังนี้
12. ขอแสดงความยินดี
ยินดีด้วย คุณศึกษา Codelab จบแล้ว
สรุปประเด็นที่ได้พูดถึง
- ภาพรวมของ Eventarc และเวิร์กโฟลว์
- วิธีทำให้บริการ Cloud Functions ใช้งานได้
- วิธีจัดการบริการเป็นกลุ่มโดยใช้เวิร์กโฟลว์
- วิธีทำให้เวิร์กโฟลว์ตอบสนองต่อเหตุการณ์ Cloud Storage ด้วย Eventarc