En este instructivo, se describe cómo transcodificar videos sin conexión de baja prioridad con trabajos de Cloud Run.
Objetivos
En este instructivo, harás lo siguiente:
- Crea buckets de Cloud Storage para almacenar los videos que se procesarán y los resultados de la codificación.
- Implementa un trabajo de Cloud Run con GPUs para acelerar la transcodificación de video.
- Ejecuta el trabajo y asegúrate de que el video se haya transcodificado correctamente.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para obtener una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Antes de comenzar
- 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.
-
Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
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.
-
Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
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 - Configura tu región como una variable de entorno:
export REGION=REGION
- Crea una cuenta de servicio:
gcloud iam service-accounts create video-encoding
- Solicita
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionen la API de Cloud Run Admin en la página Cuotas y límites del sistema para completar este instructivo. Como alternativa, puedes implementar un servicio de Cloud Run para recibir automáticamente una concesión de 3 cuotas de GPU nvidia-l4 (redundancia zonal desactivada) para una región. -
Administrador del repositorio de Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor de Cloud Build (
roles/cloudbuild.builds.editor) -
Administrador de Cloud Run (
roles/run.admin) -
Crea cuentas de servicio (
roles/iam.serviceAccountCreator) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser) -
En la consola de Google Cloud , dirígete a la página IAM.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Otorgar acceso.
-
En el campo Principales nuevas, ingresa tu identificador de usuario. Por lo general, es la dirección de correo electrónico que se usa para implementar el servicio de Cloud Run.
- En la lista Seleccionar un rol, elige uno.
- Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.
- Haz clic en Guardar.
- PROJECT_NUMBER por el número de tu proyecto Google Cloud .
- PROJECT_ID por el ID de tu proyecto Google Cloud .
- PRINCIPAL por la cuenta a la que agregarás la vinculación. Por lo general, es la dirección de correo electrónico que se usa para implementar el servicio de Cloud Run.
- ROLE con el rol que agregas a la cuenta del implementador.
Clona el repositorio de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesVe al directorio que contiene el código de muestra de Cloud Run:
cd cloud-run-samples/jobs-video-encodingCrea un bucket para almacenar videos antes de procesarlos:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONReemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION: Es la ubicación de Cloud Storage.
Otorga a la cuenta de servicio acceso de lectura a este 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"Reemplaza PROJECT_ID con el ID del proyecto.
Crea un bucket para almacenar los videos transcodificados después del procesamiento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONReemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION: Es la ubicación de Cloud Storage.
Otorga a la cuenta de servicio acceso para leer y escribir en este 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"Reemplaza PROJECT_ID con el ID del proyecto.
Navega al directorio de muestra:
cd cloud-run-samples/jobs-video-encodingCrea un Artifact Registry si el registro predeterminado de Cloud Run aún no existe:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONReemplaza LOCATION por el nombre de la ubicación del registro.
Compila la imagen del contenedor:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Reemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- LOCATION:Es el nombre de la ubicación del registro.
- IMAGE_NAME: Es el nombre de la imagen del contenedor, por ejemplo,
ffmpeg-image.
Cloud Run usa un tipo de máquina más grande para reducir el tiempo de compilación.
Implementa el trabajo:
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=/outputsReemplaza lo siguiente:
- PROJECT_ID: el ID de tu proyecto
- REGION: es el nombre de la región. Nota: Debe ser la misma región para la que tienes cuota de GPU.
- IMAGE_NAME: Es el nombre de la imagen del contenedor, por ejemplo,
ffmpeg-image.
Si es la primera vez que implementas desde la fuente en este proyecto, Cloud Run te solicitará que crees un repositorio predeterminado de Artifact Registry.
Sube un video de ejemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDEjecute el trabajo:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"El archivo
entrypoint.shrequiere un archivo de entrada, un archivo de salida y cualquier argumento que se envíe a FFmpeg.Revisa los registros de Cloud Run para asegurarte de que el video se transcodificó:
gcloud run jobs logs read video-encoding-job --region REGIONDescarga el video transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .En la consola Google Cloud , ve a Cloud Run:
Ubica el trabajo que deseas borrar en la lista de trabajos y haz clic en su casilla de verificación para seleccionarlo.
Haz clic en Borrar. Esto finaliza todas las ejecuciones de trabajos en curso y todas las instancias de contenedor en ejecución.
- Explora otras demostraciones, instructivos y muestras de Cloud Run.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar el instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Otorga los roles
Console
gcloud
Para otorgar los roles de IAM necesarios a tu cuenta en tu proyecto, sigue estos pasos:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Reemplaza lo siguiente:
Prepara tu solicitud
A fin de recuperar la muestra de código para su uso, haz lo siguiente:
Crea buckets de Cloud Storage
Para almacenar los videos que se procesarán y guardar los resultados de la codificación, crea los siguientes dos buckets de Cloud Storage:
Implementa un trabajo de Cloud Run
Crea un trabajo de Cloud Run con el Dockerfile del repositorio de muestra y monta los buckets que creaste:
Ejecuta el trabajo
Para ejecutar el trabajo, sigue estos pasos:
Realiza una limpieza
Para evitar cargos adicionales en tu cuenta de Google Cloud , borra todos los recursos que implementaste con esta guía de inicio rápido.
Borra tu repositorio
Cloud Run solo cobra por el tiempo que se ejecuta tu trabajo. Sin embargo, es posible que se te cobre por almacenar la imagen del contenedor en Artifact Registry. Para borrar repositorios de Artifact Registry, sigue los pasos que se indican en Borra repositorios en la documentación de Artifact Registry.
Borra tu trabajo
Los trabajos de Cloud Run solo generan costos cuando se ejecuta una tarea del trabajo. Para borrar tu trabajo de Cloud Run, sigue uno de estos pasos:
Console
Para borrar un trabajo, sigue estos pasos:
gcloud
Para borrar un trabajo, ejecuta el siguiente comando:
gcloud run jobs delete JOB_NAME
Reemplaza JOB_NAME por el nombre del trabajo.
Borra tu proyecto de prueba
Si borras tu proyecto de Google Cloud , se detendrá la facturación de todos los recursos que contenga. Para liberar todos los recursos Google Cloud de tu proyecto, sigue estos pasos:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID