Este tutorial descreve como transcodificar vídeos offline de baixa prioridade usando tarefas do Cloud Run.
Objetivos
Neste tutorial, vai fazer o seguinte:
- Crie contentores do Cloud Storage para armazenar os vídeos para processamento e os resultados da codificação.
- Implemente uma tarefa do Cloud Run com GPUs para acelerar a transcodificação de vídeo.
- Execute a tarefa e certifique-se de que o vídeo foi transcodificado com êxito.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização prevista,
use a calculadora de preços.
Antes de começar
- 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte 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 - Defina a sua região como uma variável de ambiente:
export REGION=REGION
- Crie uma conta de serviço:
gcloud iam service-accounts create video-encoding
- Peça
Total Nvidia L4 GPU allocation without zonal redundancy, per project per region, em API Cloud Run Admin na página Quotas e limites do sistema para concluir este tutorial. Em alternativa, pode implementar um serviço do Cloud Run para receber automaticamente uma concessão de 3 quotas de GPU nvidia-l4 (redundância zonal desativada) para uma região. -
Administrador do repositório do Artifact Registry (
roles/artifactregistry.repoAdmin) -
Editor do Cloud Build (
roles/cloudbuild.builds.editor) -
Administrador do Cloud Run (
roles/run.admin) -
Criar contas de serviço (
roles/iam.serviceAccountCreator) -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser) -
Na Google Cloud consola, aceda à página IAM.
Aceda ao IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos responsáveis, introduza o identificador do utilizador. Normalmente, este é o endereço de email usado para implementar o serviço do Cloud Run.
- Na lista Selecionar uma função, selecione uma função.
- Para conceder funções adicionais, clique em Adicionar outra função e adicione cada função adicional.
- Clique em Guardar.
- PROJECT_NUMBER com o número do seu Google Cloud projeto.
- PROJECT_ID com o ID do seu Google Cloud projeto.
- PRINCIPAL com a conta à qual está a adicionar a associação. Normalmente, este é o endereço de email que é usado para implementar o serviço do Cloud Run.
- ROLE com a função que está a adicionar à conta do implementador.
Clone o repositório de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesAltere para o diretório que contém o código de exemplo do Cloud Run:
cd cloud-run-samples/jobs-video-encodingCrie um contentor para armazenar vídeos antes do processamento:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONSubstitua o seguinte:
- PROJECT_ID: o ID do projeto.
- LOCATION: a localização do Cloud Storage.
Conceda à conta de serviço acesso de leitura a este contentor:
gcloud storage buckets add-iam-policy-binding gs://preprocessing-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"Substitua PROJECT_ID pelo ID do seu projeto.
Crie um contentor para armazenar vídeos transcodificados após o processamento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONSubstitua o seguinte:
- PROJECT_ID: o ID do projeto.
- LOCATION: a localização do Cloud Storage.
Conceda à conta de serviço acesso de leitura e escrita a este contentor:
gcloud storage buckets add-iam-policy-binding gs://transcoded-PROJECT_ID \ --member="serviceAccount:video-encoding@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"Substitua PROJECT_ID pelo ID do seu projeto.
Navegue para o diretório de exemplo:
cd cloud-run-samples/jobs-video-encodingCrie um Artifact Registry se o registo do Cloud Run predefinido ainda não existir:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONSubstitua LOCATION pelo nome da localização do registo.
Crie a imagem de contentor:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Substitua o seguinte:
- PROJECT_ID: o ID do projeto.
- LOCATION:nome da localização do registo.
- IMAGE_NAME: nome da imagem do contentor, por exemplo:
ffmpeg-image.
O Cloud Run usa um tipo de máquina maior para reduzir o tempo de compilação.
Implemente o trabalho:
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=/outputsSubstitua o seguinte:
- PROJECT_ID: o ID do projeto.
- REGION: o nome da região. Nota: tem de ser a mesma região para a qual tem quota de GPU.
- IMAGE_NAME: nome da imagem do contentor, por exemplo,
ffmpeg-image.
Se esta for a primeira vez que implementa a partir da origem neste projeto, o Cloud Run pede-lhe que crie um repositório do Artifact Registry predefinido.
Carregue um vídeo de exemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDExecute a tarefa:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"O ficheiro
entrypoint.shrequer um ficheiro de entrada, um ficheiro de saída e quaisquer argumentos a enviar para o FFmpeg.Reveja os registos do Cloud Run para se certificar de que o vídeo foi transcodificado:
gcloud run jobs logs read video-encoding-job --region REGIONTransfira o vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .Na Google Cloud consola, aceda ao Cloud Run:
Localize a tarefa que quer eliminar na lista de tarefas e clique na caixa de verificação para a selecionar.
Clique em Eliminar. Esta ação termina todas as execuções de tarefas em curso e todas as instâncias de contentores em execução.
- Explore outras demonstrações, tutoriais e exemplos do Cloud Run.
Funções necessárias
Para receber as autorizações de que precisa para concluir o tutorial, peça ao seu administrador para lhe conceder as seguintes funções da IAM no seu projeto:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Conceda as funções
Consola
gcloud
Para conceder as funções de IAM necessárias à sua conta no seu projeto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Substituir:
Prepare a sua candidatura
Para obter o exemplo de código para utilização:
Crie contentores do Cloud Storage
Para armazenar os vídeos para processamento e guardar os resultados da codificação, crie os seguintes dois contentores do Cloud Storage:
Implemente uma tarefa do Cloud Run
Crie uma tarefa do Cloud Run usando o Dockerfile no repositório de exemplo e montando os contentores que criou:
Execute a tarefa
Para executar a tarefa, siga estes passos:
Limpar
Para evitar custos adicionais na sua conta Google Cloud , elimine todos os recursos implementados com este início rápido.
Elimine o seu repositório
O Cloud Run só cobra pelo tempo de execução da sua tarefa. No entanto, ainda pode ser cobrado pelo armazenamento da imagem do contentor no Artifact Registry. Para eliminar repositórios do Artifact Registry, siga os passos em Eliminar repositórios na documentação do Artifact Registry.
Elimine a sua tarefa
As tarefas do Cloud Run só incorrem em custos quando uma tarefa está a ser executada. Para eliminar a tarefa do Cloud Run, siga um destes passos:
Consola
Para eliminar uma tarefa:
gcloud
Para eliminar uma tarefa, execute o seguinte comando:
gcloud run jobs delete JOB_NAME
Substitua JOB_NAME pelo nome da tarefa.
Elimine o projeto de teste
A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos nesse projeto. Para libertar todos os Google Cloud recursos no seu projeto, siga estes passos:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID