本教學課程說明如何使用 Cloud Run 工作,轉碼低優先順序的離線影片。
目標
在本教學課程中,您將執行下列操作:
- 建立 Cloud Storage bucket,用於儲存待處理的影片和編碼結果。
- 部署使用 GPU 的 Cloud Run 工作,加快影片轉碼速度。
- 執行工作,並確認影片已成功轉碼。
費用
在本文件中,您會使用下列 Google Cloud的計費元件:
您可以使用 Pricing Calculator,根據預測用量估算費用。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
Create or select a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Run, Artifact Registry, and Cloud Build APIs:
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable run.googleapis.com
cloudbuild.googleapis.com artifactregistry.googleapis.com - 將地區設為環境變數:
export REGION=REGION
- 建立服務帳戶:
gcloud iam service-accounts create video-encoding
- 在「配額和系統限制」頁面的 Cloud Run Admin API 下方,要求
Total Nvidia L4 GPU allocation without zonal redundancy, per project per region,完成本教學課程。或者,您也可以部署 Cloud Run 服務,系統會自動為區域授予 3 個 nvidia-l4 GPU 配額 (可用區備援機制關閉)。 -
Artifact Registry 存放區管理員 (
roles/artifactregistry.repoAdmin) -
Cloud Build 編輯器 (
roles/cloudbuild.builds.editor) - Cloud Run 管理員 (
roles/run.admin) -
建立服務帳戶 (
roles/iam.serviceAccountCreator) -
服務帳戶使用者 (
roles/iam.serviceAccountUser) -
前往 Google Cloud 控制台的「IAM」頁面。
前往 IAM - 選取專案。
- 點按「 Grant access」(授予存取權)。
-
在「New principals」(新增主體) 欄位中,輸入您的使用者 ID。這通常是部署 Cloud Run 服務時使用的電子郵件地址。
- 在「Select a role」(選取角色) 清單中,選取角色。
- 如要授予其他角色,請按一下 「Add another role」(新增其他角色),然後新增角色。
- 按一下 [儲存]。
- 將 PROJECT_NUMBER 改成您的 Google Cloud 專案編號。
- 將 PROJECT_ID 改成您的 Google Cloud 專案 ID。
- PRINCIPAL,並使用您要新增繫結的帳戶。這通常是部署 Cloud Run 服務時使用的電子郵件地址。
- ROLE,並將角色新增至部署者帳戶。
將範例存放區複製到本機電腦中:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samples變更為包含 Cloud Run 範例程式碼的目錄:
cd cloud-run-samples/jobs-video-encoding建立值區,以便在處理影片前儲存影片:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION更改下列內容:
- PROJECT_ID:您的專案 ID。
- LOCATION:Cloud Storage 位置。
授予服務帳戶從這個 bucket 讀取的權限:
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 替換為專案 ID。
建立值區,用於儲存處理後的轉碼影片:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION更改下列內容:
- PROJECT_ID:您的專案 ID。
- LOCATION:Cloud Storage 位置。
授予服務帳戶讀取及寫入這個 bucket 的權限:
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 替換為專案 ID。
前往範例目錄:
cd cloud-run-samples/jobs-video-encoding如果預設 Cloud Run 登錄檔不存在,請建立 Artifact Registry:
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:您的專案 ID。
- LOCATION:登錄檔位置的名稱。
- IMAGE_NAME:容器映像檔的名稱,例如:
ffmpeg-image。
Cloud Run 會使用較大的機器類型,縮短建構時間。
部署工作:
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:您的專案 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:
在工作清單中找出要刪除的工作,然後按一下核取方塊來選取。
按一下「Delete」(刪除)。這會終止所有進行中的工作執行作業和所有執行中的容器執行個體。
- 探索其他 Cloud Run 示範、教學課程和範例。
必要的角色
如要取得完成本教學課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
授予角色
控制台
gcloud
如要在專案中授予帳戶必要的 IAM 角色,請按照下列步驟操作:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
取代:
準備申請
如要擷取要使用的程式碼範例:
建立 Cloud Storage 值區
如要儲存待處理的影片,以及儲存編碼結果,請建立下列兩個 Cloud Storage bucket:
部署 Cloud Run 工作
使用範例存放區中的 Dockerfile 建立 Cloud Run 作業,並掛接您建立的 bucket:
執行工作
如要執行這項工作,請按照下列步驟操作:
清除所用資源
為避免系統向您的 Google Cloud 帳戶收取額外費用,請刪除您透過本快速入門導覽課程部署的所有資源。
刪除存放區
Cloud Run 只會針對工作執行時間收費。不過,您可能仍須支付在 Artifact Registry 中儲存容器映像檔的費用。如要刪除 Artifact Registry 存放區,請按照 Artifact Registry 說明文件中的「刪除存放區」一節操作。
刪除工作
只有在執行工作時,Cloud Run 工作才會產生費用。 如要刪除 Cloud Run 工作,請按照下列步驟操作:
控制台
如要刪除工作:
gcloud
如要刪除 Job,請執行下列指令:
gcloud run jobs delete JOB_NAME
將 JOB_NAME 改為工作名稱。
刪除測試專案
刪除專案後,系統就會停止對該專案中的所有資源收取費用。 Google Cloud 如要釋出專案中的所有 Google Cloud 資源,請按照下列步驟操作:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID