Com o Cloud Run, basta trazer seu código! O Google lida com as coisas complexas de servidor e escala, para que você não precise. Normalmente, você pode executar apenas serviços da Web com um URL no Google Cloud Run como serviços. Por algum tempo, você também pode executar trabalhos em nuvem para executar uma tarefa até a conclusão, o que pode levar mais de minutos ou até horas. Nesta postagem para iniciantes, você aprenderá como executar empregos em nuvem de execução em um cronograma. Vamos ir!
Índice #
Trabalhos de corrida em nuvem #
Diferentemente dos serviços do Google Cloud Run, que são executados quando um servidor da Web recebe uma solicitação da Web (como um GET ou POST), Trabalhos de corrida em nuvem são projetados especificamente para tarefas que precisam ser executadas, executam algum trabalho e terminam depois que esse trabalho estiver concluído. Eles não ouvem solicitações de entrada como os serviços.
Os trabalhos de corrida em nuvem são orientados a tarefas, executando um trabalho específico, como raspar um site, converter uma fatura em PDF em registros de banco de dados, tirar uma captura de tela, ajustar um LLM ou redimensionar imagens. Eles não precisam de um servidor da web e podem ser acionados de maneira única, em um horário específico (como 2 da manhã todas as manhãs) ou como um papel de um Fluxo de trabalho do GCP. Esses trabalhos são concluídos e podem executar até 10.000 tarefas em paralelo. As tarefas têm um número de índice e uma contagem de execuções; As tarefas também podem ser configuradas para tentar novamente.
Em essência, se você possui uma tarefa de contêiner que precisa ser executada periodicamente, sob demanda ou parte de um fluxo de trabalho e conclua seu trabalho sem servir solicitações e, em seguida, desligar, os trabalhos de execução em nuvem são uma opção sem servidor adequada no Google Cloud.
Como a nuvem Run Jobs lida com tarefas paralelas #
Um dos recursos poderosos dos trabalhos em nuvem é sua capacidade de lidar com a execução de tarefas paralelas. Isso é particularmente útil para cargas de trabalho de processamento de lote, onde você pode dividir o trabalho em pedaços independentes que podem ser processados simultaneamente. Você pode executar até 1.000 empregos por projeto por região, conforme descrito na corrida da nuvem cotas.
Quando você define um trabalho de corrida em nuvem, você pode especificar o parallelism
contexto. Essa configuração determina o número máximo de instâncias de tarefas que podem ser executadas simultaneamente dentro de uma única execução de emprego.
Imagine que você tem um trabalho que requer processamento de 100 itens e seu contêiner foi projetado para processar um item por vez. Se você definir parallelism
Para 10, quando você executa o trabalho, os trabalhos da Cloud Run tentarão executar até 10 instâncias de tarefas simultaneamente. Cada instância da tarefa receberá informações sobre quais itens específicos devem processar.
Como uma instância de tarefa sabe qual parte do trabalho fazer? O Cloud Run Jobs fornece variáveis de ambiente para cada instância de tarefa:
CLOUD_RUN_TASK_INDEX
: Esta variável fornece um índice exclusivo para cada instância de tarefa em uma execução de emprego, começando de 0 aparallelism - 1
.CLOUD_RUN_TASK_COUNT
: Esta variável fornece o número total de instâncias de tarefas esperadas para esta execução de emprego, que é igual aoparallelism
contexto.
O código do seu contêiner pode ler essas variáveis de ambiente para determinar sua fatia específica do trabalho. Por exemplo, se você tiver 100 itens para processar e parallelism
está definido como 10, a instância da tarefa 0 pode processar os itens 1-10, a instância da tarefa 1 processa os itens 11-20 e assim por diante, até a instância da tarefa 9 Processando itens 90-100. Seu código usaria CLOUD_RUN_TASK_INDEX
e CLOUD_RUN_TASK_COUNT
Para calcular o intervalo de itens pelos quais é responsável.
Os trabalhos da Cloud Run gerenciam o ciclo de vida dessas instâncias de tarefas. Se uma instância de tarefa falhar (por exemplo, devido a um erro no seu código ou a um problema temporário de infraestrutura), os trabalhos de execução em nuvem poderão ser configurados para tentar novamente essa instância de tarefa específica até um número especificado de vezes. Isso garante que, mesmo que algumas partes do seu lote falhem, a execução geral do trabalho ainda poderá ser concluída com sucesso, novamente novamente, repetindo as tarefas com falha.
A capacidade de executar tarefas em paralelo acelera significativamente a execução de cargas de trabalho em lote. Em vez de processar 100 itens sequencialmente em um contêiner, você pode processá -los simultaneamente em vários contêineres, o que reduz drasticamente o tempo total necessário para a execução do trabalho. Isso é semelhante a ter vários trabalhadores que enfrentam diferentes partes de um grande projeto simultaneamente, em vez de ter um trabalhador completando tudo passo a passo.
Por padrão, cada tarefa é executada por um máximo de 10 minutos. Você pode modificar o valor padrão alterando a configuração do tempo limite da tarefa, até um máximo de 168 horas (7 dias). O suporte a tempos limite superior a 24 horas está disponível na visualização.
Exemplo simples de trabalho em nuvem #
Este tutorial se concentra em aprender a criar e executar trabalhos do Google Cloud Run na Google Cloud Platform (GCP). O exemplo de código que você usará é o Node.JS QuickStart Official para trabalhos em nuvem.
Você vai usar o gcloud
Comando da CLI sobre o Google Cloud Shell para fazer a maior parte do trabalho, e você não precisará instalar nada na sua máquina local. Vamos começar!
O principal index.js
O arquivo tem o seguinte conteúdo:
const {CLOUD_RUN_TASK_INDEX = 0, CLOUD_RUN_TASK_ATTEMPT = 0} = process.env;
const {SLEEP_MS, FAIL_RATE} = process.env;
const main = async () => {
console.log(
`Starting Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT}...`
);
if (SLEEP_MS) {
await sleep(SLEEP_MS);
}
if (FAIL_RATE) {
try {
randomFailure(FAIL_RATE);
} catch (err) {
err.message = `Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT} failed.\n\n${err.message}`;
throw err;
}
}
console.log(`Completed Task #${CLOUD_RUN_TASK_INDEX}.`);
};
const sleep = ms => {
return new Promise(resolve => setTimeout(resolve, ms));
};
const randomFailure = rate => {
rate = parseFloat(rate);
if (!rate || rate < 0 || rate > 1) {
console.warn(
`Invalid FAIL_RATE env var value: ${rate}. Must be a float between 0 and 1 inclusive.`
);
return;
}
const randomFailure = Math.random();
if (randomFailure < rate) {
throw new Error('Task failed.');
}
};
main().catch(err => {
console.error(err);
process.exit(1);
});
As principais coisas que você precisa entender aqui são:
- O script é executado com o
main
Ligue para a linha não. 49, que tem uma captura presa a ele. Teria sido mais fácil com um JavaScript Tente capturar Block, mas este é o exemplo oficial. Então, vamos apenas rolar com isso. - Antes do
main
função na linha 7, quatro variáveis ambientais são retiradas doprocess.env
com destruição de objetos. Esses sãoCLOUD_RUN_TASK_INDEX
eCLOUD_RUN_TASK_ATTEMPT
que são usados para determinar a posição da tarefa dentro do trabalho e a tentativa de repetição (se o trabalho falhar). - Os outros dois são
SLEEP_MS
eFAIL_RATE
que são usados para dormir para um determinado número de milissegundos e especificar a taxa de falha como uma porcentagem, respectivamente. Por exemplo,0.1
representa 10% e1.0
representa 100%, o que nunca funcionará. - A principal tarefa (no trabalho é o
main
função), que registra o número da tarefa e as tentativas primeiro. - Em seguida, aguarda os milissegundos especificados e, em seguida, randomiza a falha de acordo com a taxa de falha.
- Por fim, ele registra o índice das tarefas computadas.
- Abaixo disso, há um
sleep
Funcionar apenas bloquear o processo e aguardar o número especificado de milissegundos.
Em seguida, você verá como adicioná -lo como um trabalho em nuvem usando o shell do Google Cloud.
Crie um trabalho em nuvem usando o Google Cloud Shell #
Para começar, você precisará de algum conhecimento do GIT, GitHub e Google Cloud Shell.
Dado que você está conectado à sua conta do Google. Primeiro, você criará um novo projeto do Google Cloud sobre este página. Você pode nomear cloud-run-jobs
Como visto abaixo:
Certifique -se de copiar o Project ID
como você precisará mais tarde e depois clicar no Create
botão no final do formulário. Levará alguns minutos e você será levado para o painel do novo projeto da seguinte maneira:
Verifique se o projeto criado recentemente está selecionado; Como alternativa, você pode clicar Select Project
da mensagem de notificação.
Depois disso, clique no Cloud Shell
O ícone além do ícone da campainha no canto superior direito (ou pressione G e S, no teclado). O Shell Cloud aparecerá na parte inferior da tela e pedirá permissão. Clique Authorize
:
No shell, digite (ou copie e cole) o seguinte comando:
mkdir projects && cd projects && git clone https://github.com/geshan/cloud-run-jobs.git && cd cloud-run-jobs
O comando criará um diretório chamado Projetos, entrará nessa pasta e clonará o repositório de demonstração com o código acima e entrará no cloud-run-jobs
Pasta do repositório da seguinte forma:
Depois disso, defina a variável de identificação do projeto para a variável que você copiou ao criar o projeto (ou copiá -lo do seu Google Cloud CLI), deve parecer cloud-run-jobs-
que no meu caso foi cloud-run-jobs-458310
. O comando está abaixo:
export PROJECT_ID=cloud-run-jobs-<some-numbers-here-replace-this> && echo $PROJECT_ID
Agora, para criar o trabalho de corrida em nuvem depois de construir a partir da fonte com um pacote de construção (não usando um contêiner do docker), execute o seguinte comando no seu shell do Google Cloud:
gcloud run jobs deploy job-quickstart \
--source . \
--tasks 5 \
--set-env-vars SLEEP_MS=5000 \
--set-env-vars FAIL_RATE=0.1 \
--max-retries 3 \
--region us-central1 \
--project=$PROJECT_ID
Aqui você está pedindo ao comando do Google Cloud para criar um trabalho em nuvem chamado job-quickstart
onde o código é retirado do diretório local .
. Você está especificando que o trabalho possui cinco tarefas e dormirá por 5 segundos (5000 milissegundos) com uma taxa de falha de 10% (0,1) e pode ser tentado até 3 vezes na falha.
Para a região que você está usando us-central1
e o ID do projeto é o mesmo que você define no comando anterior. Parece o abaixo quando ele executa:
Ele pedirá que você ative APIs, acerte Y
Para ativar todas as APIs relacionadas, como visto abaixo:
Se você encontrar um erro, pode ser porque as APIs exigem algum tempo para se tornar ativado. Então, tente novamente depois de alguns minutos. Quando funcionar, será algo como o seguinte:
Levará alguns minutos para que o código seja copiado para um balde e depois criado com pacotes de construção no Google Cloud Build. Se você deseja seguir o processo de compilação, pode abrir o URL visível em uma nova guia do navegador, o TI ficará assim:
Quando for bem -sucedido, mostrará algo como o seguinte:
Neste ponto, procure por Cloud Run
e clique no primeiro resultado:
Depois disso, clique no Jobs
Tab, e você verá o seu trabalho de corrida em nuvem foi criado:
Mas esse trabalho nunca foi executado, para executar o trabalho sob demanda, execute gcloud run jobs execute job-quickstart --region=us-central1
No Google Cloud Console, como visto abaixo:
Você verá o trabalho executado. Se você clicar Running
E espere que a tarefa seja executada, você verá que todas as cinco tarefas no trabalho foram executadas com sucesso:
Você também pode visualizar os logs de cada tarefa, se quiser:
Crie um cronograma de trabalho com o Google Cloud Scheduler #
Para executar empregos em um cronograma, siga o guiaque descreve o processo de agendar trabalhos usando o Google Cloud Scheduler.
Isso pode ser feito executando o seguinte comando no Google Cloud Shell para executar o trabalho a cada 15 minutos:
gcloud scheduler jobs create http quickstart-schedule \
--location us-central1 \
--schedule="*/15 * * * *" \
--uri="https://us-central1-run.googleapis.com/apis/run.googleapis.com/v1/namespaces/cloud-run-jobs-458310/jobs/job-quickstart:run" \
--http-method POST \
--oauth-service-account-email 944865726665[email protected]
Você pode encontrar o número do projeto na página do painel do projeto, você precisará modificar o comando no seu ID e número do projeto. Parece o abaixo quando executado:
Se você for para o seu Agendador de nuvem Página do projeto, você encontrará o cronograma que acabou de criar:
Você pode fazer um Force Run
selecionando a opção do ...
no lado direito da programação. Eu tentei e funcionou para mim. Esperei alguns minutos para que fosse acionado novamente a tempo.
É isso; É melhor excluir o cronograma e o trabalho se você estiver testando.
Conclusão #
Nesta postagem, você aprendeu sobre os empregos do Google Cloud Run e o uso deles. Você também aprendeu a criar e executar trabalhos em nuvem em um cronograma com a programação do Google Cloud com um exemplo simples de node.js. Espero que você possa utilizar trabalhos de execução em nuvem para executar tarefas com eficiência. Continue aprendendo!