1. บทนำ
ภาพรวม
ฟังก์ชัน Cloud Run เป็นวิธีใหม่ในการทำให้เวิร์กโหลดใช้งานได้โดยใช้กระบวนทัศน์การสร้างเหตุการณ์และลายเซ็นฟังก์ชันของ GCF ที่คุ้นเคย ฟังก์ชัน Cloud Run ช่วยให้คุณควบคุมบริการพื้นฐานที่สร้างใน Cloud Run ได้โดยตรง แทนที่จะใช้กระบวนการบิลด์และการกำหนดค่าการทำให้ใช้งานได้ที่เราแนะนำ
ในส่วนนี้ คุณจะได้เรียนรู้วิธีการทำให้ใช้งานได้ฟังก์ชันที่ขับเคลื่อนด้วยเหตุการณ์ใน Python ซึ่งใช้ Gemini เพื่อสรุปไฟล์ข้อความธรรมดาที่อัปโหลดไปยัง Bucket ของ Cloud Storage
สิ่งที่คุณจะได้เรียนรู้
- วิธีทำให้ฟังก์ชัน Cloud Run ที่ขับเคลื่อนด้วยเหตุการณ์ทำงานได้ทุกครั้งที่มีการอัปโหลดออบเจ็กต์ไปยัง Bucket ของ GCS
- วิธีสร้างบัญชีบริการที่มีบทบาทที่เหมาะสมเพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run
- วิธีใช้ Gemini เพื่อสรุปเอกสารข้อความธรรมดาที่อัปโหลดไปยัง Cloud Storage
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 \
eventarc.googleapis.com \
aiplatform.googleapis.com
ตั้งค่าตัวแปรสภาพแวดล้อม
คุณตั้งค่าตัวแปรสภาพแวดล้อมที่จะใช้ตลอดทั้งโค้ดแล็บนี้ได้
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_NAME=crf-vertexai-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
ก่อนอื่น ให้สร้างบัญชีบริการ
SERVICE_ACCOUNT="crf-vertexai-codelab" 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
ตอนนี้ให้มอบบทบาทผู้ใช้ AI Platform ให้กับบัญชีบริการเพื่อให้บัญชีบริการเรียกใช้ Gemini ได้
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/aiplatform.user"
และมอบบทบาทผู้ดูออบเจ็กต์พื้นที่เก็บข้อมูลให้แก่บัญชีบริการเพื่อให้เข้าถึงไฟล์ได้
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
--role="roles/storage.objectViewer"
Cloud Pub/Sub ต้องการบทบาท roles/iam.serviceAccountTokenCreator ในโปรเจ็กต์ของคุณเพื่อสร้างโทเค็นระบุตัวตน
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
ทริกเกอร์ของคุณต้องมีบทบาท roles/pubsub.publisher ซึ่งมอบให้แก่บัญชีบริการ Google Cloud Storage เพื่อรับเหตุการณ์ผ่าน Cloud Storage
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. สร้างและทำให้ฟังก์ชันใช้งานได้
ก่อนอื่นให้สร้างไดเรกทอรีสำหรับซอร์สโค้ดและใช้คำสั่ง cd เพื่อไปยังไดเรกทอรีนั้น
mkdir $SERVICE_NAME && cd $_
จากนั้นสร้างไฟล์ requirements.txt ที่มีเนื้อหาต่อไปนี้
functions-framework==3.* google-cloud-aiplatform==1.63.* google-cloud-storage==2.16.*
จากนั้นสร้างไฟล์ main.py ที่มีเนื้อหาต่อไปนี้
import functions_framework
import vertexai
from vertexai.generative_models import GenerativeModel
from google.cloud import storage
vertexai.init(project="<YOUR_PROJECT_ID>", location="us-central1")
model = GenerativeModel(
model_name="gemini-1.5-pro-001",
system_instruction=[
"Summarize the following document in a single sentence. Do not respond with more than one sentence.",
],
)
# Triggered by a change in a storage bucket
@functions_framework.cloud_event
def hello_gcs(cloud_event):
data = cloud_event.data
# download the file
storage_client = storage.Client()
blob = storage_client.bucket(data["bucket"]).get_blob(data["name"])
#print(blob)
doc = blob.download_as_text()
contents = [doc]
response = model.generate_content(contents)
print(response.text)
print(f"Response from Model: {response.text}")
ตอนนี้คุณสามารถทำให้ฟังก์ชัน Cloud Run ใช้งานได้โดยการเรียกใช้คำสั่งต่อไปนี้
gcloud beta run deploy $SERVICE_NAME \
--source . \
--function hello_gcs \
--region $REGION \
--no-allow-unauthenticated \
--service-account $SERVICE_ACCOUNT_ADDRESS
โปรดทราบว่า
- ใช้แฟล็ก
--sourceเพื่อบอกให้ Cloud Run สร้างฟังก์ชันเป็นบริการที่ใช้คอนเทนเนอร์ที่เรียกใช้ได้ - โดยใช้แฟล็ก
--function(ใหม่) เพื่อตั้งค่าจุดแรกเข้าของบริการใหม่ให้เป็นลายเซ็นฟังก์ชันที่คุณต้องการเรียกใช้ - (ไม่บังคับ)
--no-allow-unauthenticatedเพื่อป้องกันไม่ให้เรียกใช้ฟังก์ชันของคุณแบบสาธารณะ
ระบบอาจขอให้คุณ "การติดตั้งใช้งานจากแหล่งที่มาต้องใช้ที่เก็บ Docker ของ Artifact Registry เพื่อจัดเก็บคอนเทนเนอร์ที่สร้างขึ้น ระบบจะสร้างที่เก็บชื่อ [cloud-run-source-deploy] ในภูมิภาค [<YOUR_REGION>]" ยอมรับค่าเริ่มต้นเป็น "ใช่" เพื่อสร้างที่เก็บ
คุณดูบริการใหม่ได้crf-vertexai-codelabโดยเรียกใช้คำสั่งต่อไปนี้
gcloud beta run services describe $SERVICE_NAME --region $REGION
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
โปรดทราบว่าสำหรับแฟล็ก --event-filters อย่าใช้คำนำหน้า gs:// ในชื่อ Bucket
หากเห็นข้อผิดพลาด If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent. โปรดรอสักครู่แล้วลองอีกครั้ง
ดูบทแนะนำแบบละเอียดเกี่ยวกับการตั้งค่าบริการทริกเกอร์จาก Cloud Storage โดยใช้ Eventarc ได้ในเอกสารประกอบของ Cloud Run ที่ https://cloud.google.com/run/docs/tutorials/eventarc
6. ทดสอบฟังก์ชัน
เมื่อเราได้ติดตั้งใช้งานฟังก์ชันและสร้างทริกเกอร์แล้ว ตอนนี้เราก็พร้อมที่จะเรียกใช้ฟังก์ชันแล้ว
สร้างไฟล์และอัปโหลดไปยัง Bucket ของ Cloud Storage คุณสามารถทำได้ผ่านอินเทอร์เฟซเว็บของ Cloud Console หรือใช้เครื่องมือ CLI ของ gsutil เช่น
gsutil cp <YOUR_PLAIN_TEXT_FILE> gs://$BUCKET_NAME
เมื่ออัปโหลดไฟล์สำเร็จแล้ว ระบบจะสร้างเหตุการณ์และฟังก์ชันของคุณจะเรียกใช้ Gemini เพื่อสรุปไฟล์ข้อความธรรมดา ระบบจะพิมพ์ข้อมูลสรุปลงในบันทึก
คุณจะดูบันทึกใน Cloud Console สำหรับบริการ Cloud Run หรือเรียกใช้คำสั่งต่อไปนี้ก็ได้
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE_NAME AND textPayload: Response"
ตัวอย่างเช่น การอัปโหลดไฟล์ข้อความธรรมดาของคู่มือผู้ใช้ฟังก์ชัน Cloud Run สำหรับผลการแสดงตัวอย่างแบบส่วนตัวจะทำให้ระบบพิมพ์ข้อความต่อไปนี้ลงในบันทึก
Response from Model: Cloud Run functions offer a new way to deploy serverless workloads with familiar Google Cloud Functions paradigms while providing control over the underlying Cloud Run service.
7. ยินดีด้วย
ขอแสดงความยินดีที่ทำ Codelab นี้เสร็จสมบูรณ์
เราขอแนะนำให้อ่านเอกสารประกอบสำหรับฟังก์ชัน Cloud Run
สิ่งที่เราได้พูดถึง
- วิธีทำให้ฟังก์ชัน Cloud Run ที่ขับเคลื่อนด้วยเหตุการณ์ทำงานได้ทุกครั้งที่มีการอัปโหลดออบเจ็กต์ไปยัง Bucket ของ GCS
- วิธีสร้างบัญชีบริการที่มีบทบาทที่เหมาะสมเพื่อรับเหตุการณ์จาก Cloud Storage และเรียกใช้ฟังก์ชัน Cloud Run
- วิธีใช้ Gemini เพื่อสรุปเอกสารข้อความธรรมดาที่อัปโหลดไปยัง Cloud Storage
8. ล้างข้อมูล
หากต้องการหลีกเลี่ยงการเรียกเก็บเงินโดยไม่ตั้งใจ (เช่น หากบริการ Cloud Run นี้ถูกเรียกใช้โดยไม่ตั้งใจมากกว่าการจัดสรรการเรียกใช้ Cloud Run รายเดือนในระดับฟรี) คุณสามารถลบบริการ Cloud Run หรือลบโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 ได้
หากต้องการลบบริการ Cloud Run ให้ไปที่ Cloud Console ของ Cloud Run ที่ https://console.cloud.google.com/run/ แล้วลบบริการ crf-vertexai-codelab ที่คุณสร้างใน Codelab นี้
หากเลือกที่จะลบทั้งโปรเจ็กต์ ให้ไปที่ https://console.cloud.google.com/cloud-resource-manager เลือกโปรเจ็กต์ที่สร้างในขั้นตอนที่ 2 แล้วเลือก "ลบ" หากลบโปรเจ็กต์ คุณจะต้องเปลี่ยนโปรเจ็กต์ใน Cloud SDK คุณดูรายการโปรเจ็กต์ทั้งหมดที่พร้อมใช้งานได้โดยเรียกใช้ gcloud projects list