1. บทนำ
ภาพรวม
ฟังก์ชัน Cloud Run เป็นวิธีใหม่ในการทําให้เวิร์กโหลดใช้งานได้โดยใช้กระบวนทัศน์การส่งเหตุการณ์และลายเซ็นฟังก์ชัน GCF ที่คุ้นเคย ฟังก์ชัน Cloud Run ช่วยให้คุณควบคุมบริการพื้นฐานที่สร้างใน Cloud Run ได้โดยตรง แทนที่จะใช้กระบวนการบิลด์และการกำหนดค่าการทำให้ใช้งานได้ที่เราแนะนำ
ฟังก์ชัน Cloud Run มี UX ที่เรียบง่ายของการติดตั้งใช้งานแหล่งที่มาของ Cloud Run ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์ควบคุมภาระงานได้อย่างเต็มที่โดยใช้การกำหนดค่า Cloud Run
ในส่วนนี้ คุณจะได้เรียนรู้วิธีการติดตั้งใช้งานฟังก์ชันที่ขับเคลื่อนด้วยเหตุการณ์ใน Node คุณจะทําการติดตั้งใช้งานฟังก์ชันที่จะทริกเกอร์ทุกครั้งที่ระบบสรุปออบเจ็กต์ใน Bucket ของ Google Cloud Storage
Codelab นี้ใช้ตัวอย่าง nodejs ในตัวอย่างด้านล่าง อย่างไรก็ตาม คุณสามารถใช้ตัวอย่างโค้ดของ Cloud Functions รุ่นที่ 2 ในภาษาที่คุณเลือกได้
- ตัวอย่างฟังก์ชัน Python
- ตัวอย่างฟังก์ชัน Nodejs
- ตัวอย่างฟังก์ชัน Go
- ตัวอย่างฟังก์ชัน Java
- ตัวอย่างฟังก์ชัน PHP
- ตัวอย่างฟังก์ชัน Ruby
- ตัวอย่างฟังก์ชัน.NET
สิ่งที่คุณจะได้เรียนรู้
- วิธีทําให้ฟังก์ชัน Cloud Run ที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งทริกเกอร์เมื่อใดก็ตามที่มีการอัปโหลดออบเจ็กต์ไปยัง Bucket ของ GCS ใช้งานได้
- วิธีสร้างบัญชีบริการที่มีบทบาทที่เหมาะสมเพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run
2. ตั้งค่าตัวแปรสภาพแวดล้อมและเปิดใช้ API
อัปเดต gcloud CLI
Codelab นี้ต้องติดตั้ง gcloud CLI เวอร์ชันล่าสุด คุณอัปเดต CLI ได้โดยเรียกใช้
gcloud components update
เปิดใช้ API
ก่อนที่จะเริ่มใช้ Codelab นี้ได้ คุณจะต้องเปิดใช้ API หลายรายการ Codelab นี้กำหนดให้ใช้ API ต่อไปนี้ คุณเปิดใช้ API เหล่านั้นได้โดยการเรียกใช้คำสั่งต่อไปนี้
gcloud services enable run.googleapis.com \
cloudbuild.googleapis.com \
storage.googleapis.com \
artifactregistry.googleapis.com
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้ได้
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. สร้างที่เก็บข้อมูลและบัญชีบริการ
สร้างที่เก็บข้อมูล
คุณสร้าง Bucket ของ Cloud Storage ได้โดยการเรียกใช้คำสั่งต่อไปนี้
gsutil mb -l us-central1 gs://$BUCKET_NAME
สร้างบัญชีบริการ
ในตัวอย่างนี้ คุณจะสร้างบัญชีบริการที่มีสิทธิ์ EventArc ที่จำเป็นและบทบาทผู้เรียกใช้ Cloud Run เพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run
ก่อนอื่น ให้สร้างบัญชีบริการ
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
จากนั้นให้บทบาทผู้รับเหตุการณ์ Eventarc (roles/eventarc.eventReceiver) ในโปรเจ็กต์แก่บัญชีบริการที่เชื่อมโยงกับทริกเกอร์ Eventarc เพื่อให้ทริกเกอร์รับเหตุการณ์จากผู้ให้บริการเหตุการณ์ได้
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
จากนั้นให้บทบาทผู้เรียกใช้ Cloud Run แก่บัญชีบริการเพื่อให้เรียกใช้ฟังก์ชันได้
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. สร้างและทำให้ฟังก์ชันใช้งานได้
ก่อนอื่นให้สร้างไดเรกทอรีสำหรับซอร์สโค้ดและใช้คำสั่ง cd เพื่อไปยังไดเรกทอรีนั้น
mkdir ../$SERVICE_NAME && cd $_
จากนั้นสร้างไฟล์ package.json ที่มีเนื้อหาต่อไปนี้
{
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
จากนั้นสร้างไฟล์ index.js ที่มีเนื้อหาต่อไปนี้
const functions = require("@google-cloud/functions-framework");
// Register a CloudEvent callback with the Functions Framework that will
// be triggered by Cloud Storage.
functions.cloudEvent("helloGCS", (cloudEvent) => {
console.log(`Event ID: ${cloudEvent.id}`);
console.log(`Event Type: ${cloudEvent.type}`);
const file = cloudEvent.data;
console.log(`Bucket: ${file.bucket}`);
console.log(`File: ${file.name}`);
console.log(`Metageneration: ${file.metageneration}`);
console.log(`Created: ${file.timeCreated}`);
console.log(`Updated: ${file.updated}`);
});
ตอนนี้คุณสามารถทําให้ฟังก์ชัน Cloud Run ใช้งานได้โดยการเรียกใช้คําสั่งต่อไปนี้
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function helloGCS \
--region $REGION \
--no-allow-unauthenticated
โปรดทราบว่า
- โดยใช้แฟล็ก –source เพื่อบอก Cloud Run ให้สร้างฟังก์ชันเป็นบริการที่ใช้คอนเทนเนอร์ที่เรียกใช้ได้
- แฟล็ก –function (ใหม่) ใช้เพื่อตั้งค่าจุดแรกเข้าของบริการใหม่ให้เป็นลายเซ็นฟังก์ชันที่คุณต้องการเรียกใช้
- (ไม่บังคับ) –no-allow-unauthenticated เพื่อป้องกันไม่ให้ฟังก์ชันของคุณเรียกใช้แบบสาธารณะได้
คุณดูบริการใหม่ได้crf-event-codelabโดยเรียกใช้คำสั่งต่อไปนี้
gcloud beta run services describe $SERVICE_NAME
5. สร้างเหตุการณ์
เราสามารถสร้างทริกเกอร์ Eventarc เพื่อส่งข้อความไปยังฟังก์ชันทุกครั้งที่มีการสิ้นสุดออบเจ็กต์ใน Google Cloud Storage ได้ดังนี้
BUCKET_REGION=$REGION
gcloud eventarc triggers create $TRIGGER_NAME \
--location=$REGION \
--destination-run-service=$SERVICE_NAME \
--destination-run-region=$BUCKET_REGION \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=$BUCKET_NAME" \
--service-account=$SERVICE_ACCOUNT_ADDRESS
โปรดทราบว่า
- gcs-function-trigger คือชื่อของทริกเกอร์
- crf-event-codelab คือชื่อของบริการ Cloud Run ที่มีการทำให้ฟังก์ชันใช้งานได้
- สําหรับแฟล็ก -event-filters อย่าใช้คํานําหน้า gs:// ในชื่อที่เก็บข้อมูล
ดูบทแนะนำแบบละเอียดเกี่ยวกับการตั้งค่าบริการทริกเกอร์จาก Cloud Storage โดยใช้ Eventarc ได้ในเอกสารประกอบของ Cloud Run ที่นี่ https://cloud.google.com/run/docs/tutorials/eventarc
6. ทดสอบฟังก์ชัน
เมื่อการติดตั้งใช้งานเสร็จสมบูรณ์ คุณจะเห็น URL ของบริการ หากต้องการเรียกใช้ฟังก์ชัน คุณต้องส่งคำขอที่ผ่านการตรวจสอบสิทธิ์พร้อมโทเค็นประจำตัวของคุณหรือโทเค็นประจำตัวของหลักการที่มีบทบาท Cloud Run Invoker ดังที่แสดงด้านล่าง
# get the Service URL SERVICE_URL="$(gcloud run services describe $SERVICE_NAME --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
เมื่อเราได้ติดตั้งใช้งานฟังก์ชันและสร้างทริกเกอร์แล้ว ตอนนี้เราก็พร้อมที่จะเรียกใช้ฟังก์ชันแล้ว
สร้างไฟล์และอัปโหลดไปยัง Bucket ของ Cloud Storage คุณทำได้ผ่านอินเทอร์เฟซเว็บของ Cloud Console หรือใช้เครื่องมือ CLI ของ gsutil เช่น
echo "hello world" > test.txt gsutil cp test.txt gs://$BUCKET_NAME
เมื่ออัปโหลดไฟล์สำเร็จแล้ว ระบบจะสร้างเหตุการณ์และฟังก์ชันจะพิมพ์ข้อมูลพื้นฐานบางอย่างเกี่ยวกับออบเจ็กต์ เช่น ชื่อไฟล์ คุณดูเอาต์พุตนี้ได้ในรายการบันทึกของฟังก์ชันใน Cloud Console หรือจะค้นหาเอาต์พุตนี้โดยใช้ gcloud CLI ก็ได้
gcloud logging read "resource.labels.service_name=$SERVICE_NAME AND textPayload: File" --format=json
และคุณควรเห็นเอาต์พุตต่อไปนี้
"textPayload": "File: test.txt"
7. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบสำหรับฟังก์ชัน Cloud Run
สิ่งที่เราได้พูดถึง
- วิธีทําให้ฟังก์ชัน Cloud Run ที่ขับเคลื่อนด้วยเหตุการณ์ซึ่งทริกเกอร์เมื่อใดก็ตามที่มีการอัปโหลดออบเจ็กต์ไปยัง Bucket ของ GCS ใช้งานได้
- วิธีสร้างบัญชีบริการที่มีบทบาทที่เหมาะสมเพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run
8. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากบริการ Cloud Run นี้ถูกเรียกใช้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี) คุณสามารถลบบริการ Cloud Run หรือลบโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 ได้
หากต้องการลบบริการ Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run/ แล้วลบบริการ crf-event-codelab ที่คุณสร้างใน Codelab นี้
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list