במדריך הזה מוסבר איך לבצע טרנסקוד לסרטונים אופליין בעדיפות נמוכה באמצעות משימות Cloud Run.
מטרות
במדריך הזה תלמדו:
- יוצרים קטגוריות של Cloud Storage כדי לאחסן את הסרטונים לעיבוד ואת תוצאות הקידוד.
- פריסת משימה של Cloud Run באמצעות יחידות GPU כדי להאיץ את הקידוד מחדש של סרטונים.
- מריצים את העבודה ומוודאים שהמרת הקידוד של הסרטון בוצעה בהצלחה.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשקי ה-API של Cloud Run, Artifact Registry ו-Cloud Build, אם הם עדיין לא מופעלים:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable run.googleapis.com
cloudbuild.googleapis.com artifactregistry.googleapis.com - מגדירים את האזור כמשתנה סביבה:
export REGION=REGION
- יוצרים חשבון שירות:
gcloud iam service-accounts create video-encoding
- כברירת מחדל, בפרויקטים חדשים מוקצה אוטומטית מכסת GPU של 3 יחידות לאחר הפריסה הראשונית. אם אתם צריכים להגדיל את המכסה, אתם יכולים לבקש
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionמכסה נוספת ל-Cloud Run Admin API בדף Quotas and system limits.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להשלמת המדריך, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- אדמין של Artifact Registry Repository (
roles/artifactregistry.repoAdmin) - עריכה ב-Cloud Build (
roles/cloudbuild.builds.editor) - אדמין ב-Cloud Run (
roles/run.admin) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - משתמש בחשבון שירות (
roles/iam.serviceAccountUser)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מתן התפקידים
המסוף
-
נכנסים לדף IAM במסוף Google Cloud .
כניסה לדף IAM - בוחרים את הפרויקט.
- לוחצים על Grant access.
-
בשדה New principals, מזינים את מזהה המשתמש. בדרך כלל מדובר בכתובת האימייל שמשמשת לפריסת שירות Cloud Run.
- בוחרים תפקיד מהרשימה Select a role.
- כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים אותם.
- לוחצים על Save.
gcloud
כדי להקצות לחשבון שלכם את תפקידי ה-IAM הנדרשים בפרויקט:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
מחליפים את:
- מחליפים את PROJECT_NUMBER במספר הפרויקט ב- Google Cloud .
- PROJECT_ID במזהה הפרויקט ב- Google Cloud .
- PRINCIPAL עם החשבון שאליו אתם מוסיפים את הקישור. בדרך כלל זו כתובת האימייל שמשמשת לפריסת שירות Cloud Run.
- ROLE עם התפקיד שאתם מוסיפים לחשבון של כלי הפריסה.
הכנת הבקשה
כדי לאחזר את דוגמת קוד לשימוש:
משכפלים את המאגר לדוגמה ומעבירים אותו למכונה המקומית:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesעוברים לספרייה שמכילה את הקוד לדוגמה של Cloud Run:
cd cloud-run-samples/jobs-video-encoding
יצירת קטגוריות ב-Cloud Storage
כדי לאחסן את הסרטונים לעיבוד ולשמור את תוצאות הקידוד, יוצרים את שתי הקטגוריות הבאות ב-Cloud Storage:
יוצרים קטגוריה לאחסון סרטונים לפני העיבוד:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- LOCATION: המיקום ב-Cloud Storage.
נותנים לחשבון השירות גישת קריאה לקטגוריה הזו:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"מחליפים את PROJECT_ID במזהה הפרויקט.
יוצרים קטגוריה לאחסון סרטונים שעברו המרה אחרי העיבוד:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- LOCATION: המיקום ב-Cloud Storage.
נותנים לחשבון השירות הרשאת גישה לקריאה ולכתיבה בקטגוריה הזו:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"מחליפים את PROJECT_ID במזהה הפרויקט.
פריסת משימה ב-Cloud Run
יוצרים משימת Cloud Run באמצעות קובץ Dockerfile במאגר לדוגמה ומטמיעים את הקטגוריות שיצרתם:
עוברים לספרייה לדוגמה:
cd cloud-run-samples/jobs-video-encoding
יוצרים Artifact Registry אם הרישום של Cloud Run שמוגדר כברירת מחדל עדיין לא קיים:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONמחליפים את LOCATION בשם המיקום של המאגר.
יוצרים את קובץ האימג' של הקונטיינר:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32מחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- LOCATION:שם המיקום של המרשם.
- IMAGE_NAME: שם קובץ האימג' בקונטיינר, לדוגמה:
ffmpeg-image.
Cloud Run משתמש בסוג מכונה גדול יותר כדי לקצר את משך זמן של תהליך build.
פורסים את העבודה:
gcloud run jobs create video-encoding-job \ --image LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --region REGION \ --memory 32Gi \ --cpu 8 \ --gpu 1 \ --gpu-type nvidia-l4 \ --no-gpu-zonal-redundancy \ --max-retries 1 \ --service-account video-encoding@PROJECT_ID.iam.gserviceaccount.com \ --add-volume=name=input-volume,type=cloud-storage,bucket=preprocessing-PROJECT_ID,readonly=true \ --add-volume-mount=volume=input-volume,mount-path=/inputs \ --add-volume=name=output-volume,type=cloud-storage,bucket=transcoded-PROJECT_ID \ --add-volume-mount=volume=output-volume,mount-path=/outputsמחליפים את מה שכתוב בשדות הבאים:
- PROJECT_ID: מזהה הפרויקט.
- REGION: שם האזור. הערה: זה צריך להיות אותו אזור שבו יש לכם מכסת GPU.
- IMAGE_NAME: שם קובץ האימג' בקונטיינר, למשל
ffmpeg-image.
אם זו הפעם הראשונה שאתם מבצעים פריסה ממקור בפרויקט הזה, Cloud Run יציג לכם בקשה ליצור מאגר ברירת מחדל של Artifact Registry.
הרצת המשימה
כדי להריץ את העבודה, פועלים לפי השלבים הבאים:
מעלים סרטון לדוגמה כדי לקודד אותו:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDמריצים את העבודה:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"הקובץ
entrypoint.shדורש קובץ קלט, קובץ פלט וארגומנטים לשליחה אל FFmpeg.בודקים את היומנים של Cloud Run כדי לוודא שהמרת הקידוד של הסרטון בוצעה:
gcloud run jobs logs read video-encoding-job --region REGIONמורידים את הסרטון שהקידוד שלו הומר:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .
הסרת המשאבים
כדי להימנע מחיובים נוספים בחשבון Google Cloud , מוחקים את כל המשאבים שהצבתם באמצעות ההפעלה המהירה הזו.
מחיקת המאגר
ב-Cloud Run משלמים רק על הזמן שבו המשימה פועלת. עם זאת, יכול להיות שעדיין תחויבו על אחסון קובץ האימג' של הקונטיינר ב-Artifact Registry. כדי למחוק מאגרי Artifact Registry, פועלים לפי השלבים במאמר מחיקת מאגרים במסמכי התיעוד של Artifact Registry.
מחיקת המשרה
משימות ב-Cloud Run כרוכות בעלויות רק כשמשימת עבודה מופעלת. כדי למחוק את העבודה ב-Cloud Run, מבצעים את אחד מהשלבים הבאים:
המסוף
כדי למחוק משרה:
נכנסים ל-Cloud Run במסוף Google Cloud :
ברשימת המשרות, מאתרים את המשרה שרוצים למחוק ולוחצים על תיבת הסימון שלה כדי לבחור אותה.
לוחצים על Delete. הפעולה הזו תסיים את כל ההרצות של המשימות שנמצאות בתהליך ואת כל המכונות של הקונטיינרים שפועלות.
gcloud
כדי למחוק משימה, מריצים את הפקודה הבאה:
gcloud run jobs delete JOB_NAME
מחליפים את JOB_NAME בשם של המשימה.
מחיקת פרויקט הבדיקה
כשמוחקים את הפרויקט ב- Google Cloud , החיוב על כל המשאבים באותו פרויקט נפסק. כדי לשחרר את כל Google Cloud המשאבים בפרויקט, פועלים לפי השלבים הבאים:
כדי למחוק Google Cloud פרויקט:
gcloud projects delete PROJECT_ID