Neste tutorial, descrevemos como transcodificar vídeos off-line de baixa prioridade usando jobs do Cloud Run.
Objetivos
Neste tutorial, você vai fazer o seguinte:
- 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 projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
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 -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
-
Instale a CLI do Google Cloud.
-
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 -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative as APIs Cloud Run, Artifact Registry e Cloud Build:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter o papel do IAM de administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin), que contém a permissãoserviceusage.services.enable. Saiba como conceder papéis.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.
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
-
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)
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
-
No console do Google Cloud , acesse a página IAM.
Acessar 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.
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:
- PROJECT_NUMBER pelo número do projeto do Google Cloud .
- PROJECT_ID com o ID do seu projeto Google Cloud .
- 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.
Prepare sua inscrição
Para recuperar o exemplo de código para uso, siga estas etapas:
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-encoding
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:
Crie 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.
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:
Navegue até o diretório de amostra:
cd cloud-run-samples/jobs-video-encoding
Crie 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.
Execute o job
Para executar o job, siga estas etapas:
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 .
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á sendo executada. Para excluir o job do Cloud Run, siga uma destas etapas:
Console
Para excluir um job, siga estas etapas:
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.
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 nele. Para liberar todos os recursos Google Cloud no seu projeto, siga estas etapas:
Excluir um projeto do Google Cloud :
gcloud projects delete PROJECT_ID
A seguir
- Confira outras demonstrações, tutoriais e amostras do Cloud Run.