Neste tutorial, descrevemos como transcodificar vídeos off-line de baixa prioridade usando jobs do Cloud Run.
Objetivos
Neste tutorial, você vai:
- Crie buckets do Cloud Storage para armazenar os vídeos a serem processados e os resultados da codificação.
- Implante um job do Cloud Run usando GPUs para acelerar a transcodificação de vídeo.
- Execute o job e verifique se o vídeo foi transcodificado corretamente.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na sua projeção de uso, utilize 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.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na gcloud CLI com sua identidade federada.
-
Para inicializar a gcloud CLI, 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 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
- Solicite
Total Nvidia L4 GPU allocation without zonal redundancy, per project per regionna API Cloud Run Admin na página Cotas e limites do sistema para concluir este tutorial. Como alternativa, é possível implantar um serviço do Cloud Run para receber automaticamente uma concessão de cota de três GPUs 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) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser) -
No console do Google Cloud , acesse a página IAM.
Acessar o IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos principais, digite seu identificador de usuário. Normalmente, esse é o endereço de e-mail usado para implantar o serviço do Cloud Run.
- Na lista Selecionar papel, escolha um.
- Para conceder outros papéis, clique em Adicionar outro papel e adicione cada papel adicional.
- Clique em Salvar.
- PROJECT_NUMBER pelo número do projeto do Google Cloud .
- PROJECT_ID com seu Google Cloud ID do projeto.
- PRINCIPAL com a conta a que você está adicionando a vinculação. Normalmente, esse é o endereço de e-mail usado para implantar o serviço do Cloud Run.
- ROLE com o papel que você está adicionando à conta do implantador.
Clone o repositório de amostra na sua máquina local:
git clone https://github.com/GoogleCloudPlatform/cloud-run-samplesMude para o diretório que contém o código de amostra do Cloud Run:
cd cloud-run-samples/jobs-video-encodingCrie um bucket para armazenar vídeos antes do processamento:
gcloud storage buckets create gs://preprocessing-PROJECT_ID \ --location LOCATIONSubstitua:
- PROJECT_ID: o ID do projeto.
- LOCATION: o local do Cloud Storage.
Conceda à conta de serviço acesso de leitura a esse 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"Substitua PROJECT_ID pela ID do seu projeto.
Crie um bucket para armazenar os vídeos transcodificados após o processamento:
gcloud storage buckets create gs://transcoded-PROJECT_ID \ --location LOCATIONSubstitua:
- PROJECT_ID: o ID do projeto.
- LOCATION: o local do Cloud Storage.
Conceda à conta de serviço acesso de leitura e gravação a esse 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"Substitua PROJECT_ID pela ID do seu projeto.
Navegue até o diretório de amostra:
cd cloud-run-samples/jobs-video-encodingCrie um Artifact Registry se o registro padrão do Cloud Run ainda não existir:
gcloud artifacts repositories create cloud-run-source-deploy \ --repository-format=docker \ --location LOCATIONSubstitua LOCATION pelo nome do local do registro.
Crie a imagem do contêiner:
gcloud builds submit \ --tag LOCATION-docker.pkg.dev/PROJECT_ID/cloud-run-source-deploy/IMAGE_NAME \ --machine-type E2-HIGHCPU-32Substitua:
- PROJECT_ID: o ID do projeto.
- LOCATION:nome do local do registro.
- IMAGE_NAME: nome da imagem do contêiner. Por exemplo,
ffmpeg-image.
O Cloud Run usa um tipo de máquina maior para reduzir o tempo de build.
Implante o job:
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:
- PROJECT_ID: o ID do projeto.
- REGION: o nome da região. Observação: essa precisa ser a mesma região em que você tem cota de GPU.
- IMAGE_NAME: nome da imagem do contêiner, por exemplo,
ffmpeg-image.
Se esta for a primeira vez que você implanta de uma origem neste projeto, o Cloud Run vai pedir para você criar um repositório padrão do Artifact Registry.
Faça upload de um vídeo de exemplo para codificar:
gcloud storage cp gs://cloud-samples-data/video/cat.mp4 gs://preprocessing-PROJECT_IDExecute o job:
gcloud run jobs execute video-encoding-job \ --region REGION \ --wait \ --args="cat.mp4,encoded_cat.mp4,-vcodec,h264_nvenc,-cq,21,-movflags,+faststart"O arquivo
entrypoint.shexige um arquivo de entrada, um arquivo de saída e argumentos para enviar ao FFmpeg.Analise os registros do Cloud Run para garantir que o vídeo foi transcodificado:
gcloud run jobs logs read video-encoding-job --region REGIONBaixe o vídeo transcodificado:
gcloud storage cp gs://transcoded-PROJECT_ID/encoded_cat.mp4 .No Google Cloud console, acesse o Cloud Run:
Localize o job que você quer excluir na lista de jobs e clique na caixa de seleção para marcá-lo.
Clique em Excluir. Isso encerra todas as execuções de jobs em andamento e todas as instâncias de contêiner em execução.
- Confira outras demonstrações, tutoriais e amostras do Cloud Run.
Funções exigidas
Para conseguir as permissões necessárias a fim de concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Conceder os papéis
Console
gcloud
Para conceder os papéis do IAM necessários à sua conta no projeto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=PRINCIPAL \ --role=ROLE
Substitua:
Prepare sua inscrição
Para recuperar o exemplo de código para uso, siga estas etapas:
Criar buckets do Cloud Storage
Para armazenar os vídeos para processamento e salvar os resultados da codificação, crie os dois buckets do Cloud Storage a seguir:
Implantar um job do Cloud Run
Crie um job do Cloud Run usando o Dockerfile no repositório de exemplo e montando os buckets que você criou:
Execute o job
Para executar o job, siga estas etapas:
Limpar
Para evitar cobranças extras na sua conta do Google Cloud , exclua todos os recursos implantados com este guia de início rápido.
Excluir o repositório
O Cloud Run cobra apenas pelo tempo de execução do job. No entanto, ainda é possível receber cobranças pelo armazenamento da imagem do contêiner no Artifact Registry. Para excluir repositórios do Artifact Registry, siga as etapas em Excluir repositórios na documentação do Artifact Registry.
Excluir seu job
Os jobs do Cloud Run só geram custos quando uma tarefa de job está em execução. Para excluir o job do Cloud Run, siga uma destas etapas:
Console
Para excluir um job, siga estas etapas:
gcloud
Para excluir um job, execute o seguinte comando:
gcloud run jobs delete JOB_NAME
Substitua JOB_NAME pelo nome do job.
Excluir o projeto de teste
A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos dele. Para liberar todos os recursos Google Cloud no seu projeto, siga estas etapas:
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID