このチュートリアルでは、Cloud Run ジョブを使用して低優先度のオフライン動画をトランスコードする方法について説明します。
目標
このチュートリアルでは、次のことを行います。
- 処理する動画とエンコード結果を保存する Cloud Storage バケットを作成します。
- GPU を使用して動画のコード変換を高速化する Cloud Run ジョブをデプロイします。
- ジョブを実行し、動画が正常にコード変換されたことを確認します。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
- 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.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して 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.
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して 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 に移動 - プロジェクトを選択します。
- [アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。これは通常、Cloud Run サービスのデプロイに使用されるメールアドレスです。
- [ロールを選択] リストでロールを選択します。
- 追加のロールを付与するには、[ 別のロールを追加] をクリックして各ロールを追加します。
- [保存] をクリックします。
- PROJECT_NUMBER: Google Cloud プロジェクト番号。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
- PRINCIPAL: バインディングを追加するアカウント。これは通常、Cloud Run サービスのデプロイに使用されるメールアドレスです。
- ROLE: デプロイするアカウントに付与するロール。
ローカルマシンにサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesCloud Run のサンプルコードが含まれているディレクトリに移動します。
cd cloud-run-samples/jobs-video-encoding処理前に動画を保存するバケットを作成します。
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATION次のように置き換えます。
- PROJECT_ID: プロジェクト 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 は、実際のプロジェクト ID に置き換えます。
処理後にトランスコードされた動画を保存するバケットを作成します。
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATION次のように置き換えます。
- PROJECT_ID: プロジェクト 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 は、実際のプロジェクト ID に置き換えます。
サンプル ディレクトリに移動します。
cd cloud-run-samples/jobs-video-encodingデフォルトの Cloud Run レジストリがまだ存在しない場合は、Artifact Registry を作成します。
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONLOCATION は、レジストリのロケーションの名前に置き換えます。
コンテナ イメージをビルドします。
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 に移動します。
削除するジョブをジョブリストで探し、そのチェックボックスをクリックして選択します。
[削除] をクリックします。これにより、進行中のすべてのジョブ実行と実行中のすべてのコンテナ インスタンスが終了します。
- 他の Cloud Run のデモ、チュートリアル、サンプルを確認する。
必要なロール
チュートリアルを完了するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
ロールを付与する
コンソール
gcloud
プロジェクトで自分のアカウントに必要な IAM ロールを付与するには:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
次のように置き換えます。
登録申請の準備
使用するコードサンプルを取得するには:
Cloud Storage バケットを作成する
処理する動画を保存し、エンコードの結果を保存するには、次の 2 つの Cloud Storage バケットを作成します。
Cloud Run ジョブをデプロイする
サンプル リポジトリの Dockerfile を使用して Cloud Run ジョブを作成し、作成したバケットをマウントします。
ジョブを実行する
ジョブを実行する手順は次のとおりです。
クリーンアップ
Google Cloud アカウントで追加料金が発生しないようにするには、このクイックスタートでデプロイしたすべてのリソースを削除します。
リポジトリを削除する
Cloud Run では、ジョブの実行時間に対してのみ料金が発生します。ただし、コンテナ イメージを Artifact Registry に保存した場合にも料金が発生する可能性があります。Artifact Registry リポジトリを削除するには、Artifact Registry ドキュメントのリポジトリを削除するの手順を行います。
ジョブを削除する
Cloud Run ジョブでは、ジョブタスクの実行時にのみ料金が発生します。Cloud Run ジョブを削除するには、次のいずれかの操作を行います。
コンソール
ジョブを削除するには:
gcloud
ジョブを削除するには、次のコマンドを実行します。
gcloud run jobs delete JOB_NAME
JOB_NAME は、ジョブ名に置き換えます。
テスト プロジェクトを削除する
Google Cloud プロジェクトを削除すると、そのプロジェクト内のすべてのリソースに対する課金が停止します。プロジェクト内のすべての Google Cloud リソースを解放する手順は次のとおりです。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID