1. מבוא
סקירה כללית
פונקציות Cloud Run הן דרך חדשה לפרוס עומסי עבודה באמצעות פרדיגמות מוכרות של אירועים ושל חתימות פונקציות של GCF. במקום להשתמש בתהליך build ובהגדרות הפריסה המובנות שלנו, פונקציות Cloud Run מאפשרות לכם שליטה ישירה בשירות הבסיסי שנוצר ב-Cloud Run.
בקטע הזה נסביר איך לפרוס פונקציה מבוססת-אירועים ב-Python שמשתמשת ב-Gemini כדי לסכם קובץ טקסט פשוט שהועלה לקטגוריה של Cloud Storage.
מה תלמדו
- איך פורסים פונקציית Cloud Run מבוססת-אירועים שמופעלת בכל פעם שאובייקט מועלה לקטגוריה ב-GCS
- איך יוצרים חשבון שירות עם התפקידים המתאימים כדי לקבל אירוע מ-Cloud Storage ולהפעיל את פונקציית Cloud Run
- איך משתמשים ב-Gemini כדי לסכם מסמך בטקסט פשוט שהועלה ל-Cloud Storage
2. הגדרת משתני סביבה והפעלת ממשקי API
עדכון ה-CLI של gcloud
כדי להשתמש ב-codelab הזה, צריך להתקין גרסה עדכנית של ה-CLI של gcloud. אפשר לעדכן את ה-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
הגדרה של משתני סביבה
אתם יכולים להגדיר משתני סביבה שישמשו אתכם לאורך כל ה-codelab הזה.
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. יצירה של קטגוריית אחסון וחשבון שירות
יצירה של קטגוריית אחסון
כדי ליצור קטגוריה של 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 את התפקיד 'מקבל אירועים ב-Eventarc' (roles/eventarc.eventReceiver) בפרויקט, כדי שהטריגר יוכל לקבל אירועים מספקי אירועים.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
לאחר מכן, מקצים לחשבון השירות את התפקיד Cloud Run Invoker כדי שהוא יוכל להפעיל את הפונקציה.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
עכשיו, צריך להקצות לחשבון השירות את התפקיד AI Platform User כדי שהוא יוכל לבצע קריאות ל-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
כדי שהטריגר יקבל אירועים דרך Cloud Storage, צריך להקצות לחשבון השירות של Google Cloud Storage את התפקיד roles/pubsub.publisher.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
4. יצירה ופריסה של הפונקציה
קודם יוצרים ספרייה לקוד המקור ועוברים לספרייה הזו.
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>]'." מאשרים את ברירת המחדל yes כדי ליצור את המאגר.
כדי לראות את השירות החדש 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:// לשם הקטגוריה.
אם מופיעה שגיאה If you recently started to use Eventarc, it may take a few minutes before all necessary permissions are propagated to the Service Agent., כדאי לחכות כמה דקות לפני שמנסים שוב.
מדריך מפורט להגדרת שירות Trigger מ-Cloud Storage באמצעות Eventarc זמין במסמכי Cloud Run בכתובת https://cloud.google.com/run/docs/tutorials/eventarc
6. בדיקת הפונקציה
אחרי שפרסנו את הפונקציה ויצרנו טריגר, אנחנו מוכנים להפעיל את הפונקציה.
יוצרים קובץ ומעלים אותו לקטגוריה של Cloud Storage. אפשר לעשות את זה דרך ממשק האינטרנט של מסוף Cloud או באמצעות כלי gsutil CLI, למשל:
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 מבוססת-אירועים שמופעלת בכל פעם שאובייקט מועלה לקטגוריה של GCS
- איך יוצרים חשבון שירות עם התפקידים המתאימים כדי לקבל אירוע מ-Cloud Storage ולהפעיל את פונקציית Cloud Run
- איך משתמשים ב-Gemini כדי לסכם מסמך בטקסט פשוט שהועלה ל-Cloud Storage
8. הסרת המשאבים
כדי להימנע מחיובים לא מכוונים (לדוגמה, אם שירות Cloud Run הזה מופעל בטעות יותר פעמים מההקצאה החודשית של הפעלות Cloud Run בחבילה ללא תשלום), אפשר למחוק את שירות Cloud Run או את הפרויקט שיצרתם בשלב 2.
כדי למחוק את שירותי Cloud Run, עוברים אל Cloud Run Cloud Console בכתובת https://console.cloud.google.com/run/ ומוחקים את שירות crf-vertexai-codelab שיצרתם ב-codelab הזה.
אם אתם רוצים למחוק את הפרויקט כולו, אתם יכולים להיכנס לכתובת https://console.cloud.google.com/cloud-resource-manager, לבחור את הפרויקט שיצרתם בשלב 2 וללחוץ על 'מחיקה'. אם תמחקו את הפרויקט, תצטרכו לשנות את הפרויקטים ב-Cloud SDK. כדי לראות את רשימת כל הפרויקטים הזמינים, מריצים את הפקודה gcloud projects list.