O que é o Cloud Run

O Cloud Run é uma plataforma de computação gerenciada para a execução de contêineres diretamente na infraestrutura escalonável do Google.

Você pode implantar um código escrito em qualquer linguagem de programação no Cloud Run se puder criar uma imagem de contêiner com base nele. Na verdade, a criação de imagens de contêiner é opcional. Se você usa Go, Node.js, Python, Java, .NET Core ou Ruby, pode usar a opção de implantação baseada em origem, que cria o contêiner para você seguindo as práticas recomendadas para a linguagem que você está usando.

O Google criou o Cloud Run para funcionar bem com outros serviços do Google Cloud. Assim, você pode criar aplicativos completos.

Em resumo, o Cloud Run permite que os desenvolvedores passem mais tempo escrevendo o código e quase sem tempo operando, configurando e escalonando o serviço do Cloud Run. Você não precisa criar um cluster ou gerenciar a infraestrutura para ser produtivo com o Cloud Run.

Serviços e jobs: duas maneiras de executar o código

No Cloud Run, o código pode ser executado continuamente como um serviço ou um job. Serviços e jobs são executados no mesmo ambiente e podem usar as mesmas integrações com outros serviços do Google Cloud.

  • Serviços do Cloud Run Usado para executar o código que responde a solicitações da Web ou eventos.
  • Jobs do Cloud Run. Usado para executar o código que realiza o trabalho (um job) e é encerrado quando o trabalho é concluído.

Serviços do Cloud Run

Um serviço do Cloud Run executa contêineres para atender a solicitações e eventos da Web

Um serviço do Cloud Run oferece a infraestrutura necessária para executar um endpoint HTTPS confiável. Sua responsabilidade é garantir que o código detecte uma porta TCP e processe solicitações HTTP.

Os recursos de serviço padrão incluem:

Endpoint HTTPS exclusivo para cada serviço
Todos os serviços do Cloud Run são fornecidos com um endpoint HTTPS em um subdomínio exclusivo do domínio *.run.app. Também é possível configurar domínios personalizados. O Cloud Run gerencia TLS para você e inclui suporte para WebSockets, HTTP/2 (de ponta a ponta) e gRPC (de ponta a ponta).
Escalonamento automático rápido com base em solicitações
O Cloud Run foi criado para escalonar horizontalmente para lidar com todas as solicitações recebidas ou lidar com o aumento da utilização da CPU fora das solicitações se a Alocação de CPU estiver definida como always on. Um serviço pode ser escalonado horizontalmente de forma rápida para até mil instâncias ou até mais, se você solicitar um aumento de cota. Se a demanda diminuir, o Cloud Run removerá os contêineres inativos. Se você estiver preocupado com custos ou sobrecarregando os sistemas downstream, poderá limitar o número máximo de instâncias.
Gerenciamento de tráfego integrado
Cada implantação cria uma nova revisão imutável. É possível encaminhar o tráfego de entrada para a revisão mais recente, reverter para uma revisão anterior ou dividir o tráfego para várias revisões ao mesmo tempo para realizar um lançamento gradual. Isso é útil se você quer reduzir o risco de implantar uma nova revisão. Você pode começar enviando 1% das solicitações para uma nova revisão e aumentar essa porcentagem enquanto monitora a telemetria.
Serviços públicos e privados
É possível acessar um serviço do Cloud Run pela Internet, ou há duas formas de restringir o acesso:

Você pode usar a rede de fornecimento de conteúdo (CDN) para disponibilizar recursos armazenáveis em cache a partir de um local do perímetro próximo aos clientes. O Firebase Hosting e o Cloud CDN oferecem esse recurso.

Escalonar para zero e instâncias mínimas

O Cloud Run adiciona e remove instâncias automaticamente para lidar com todas as solicitações recebidas ou lidar com o aumento da utilização da CPU fora das solicitações se a alocação de CPU estiver definida como always on. Se não houver solicitações de entrada para seu serviço, até mesmo a última instância restante será removida. Esse comportamento é normalmente chamado de escala para zero.

Se não houver instâncias ativas, uma nova será criada sob demanda assim que uma solicitação for recebida. Isso afeta negativamente o tempo de resposta para essas primeiras solicitações, dependendo da velocidade com que seu contêiner fica pronto para lidar com as solicitações.

Para garantir que o serviço não escalone instâncias de redução da escala a zero, configure o Cloud Run para manter uma quantidade mínima de instâncias ativa.

Preços de pagamento por uso para serviços

A redução da escala para zero é atraente por motivos econômicos, porque você é cobrado pela CPU e memória alocadas para uma instância com uma granularidade de 100 ms. Se você não configurar instâncias mínimas, não haverá cobrança se o serviço não for usado.

É possível ativar dois modelos de preços:

Baseada em solicitações
Se uma instância não estiver processando solicitações, a CPU não será alocada e você não será cobrado. Além disso, você paga uma taxa por solicitação.
Com base em instância
Você é cobrado por toda a vida útil de uma instância, e a CPU é sempre alocada. Não há taxa por solicitação.

Há um generoso nível gratuito. Consulte preços para mais informações e consulte alocação da CPU para saber como ativar os preços do serviço para solicitações ou instâncias.

Um sistema de arquivos de contêiner descartável

As instâncias no Cloud Run são descartáveis. Cada contêiner tem uma sobreposição de sistema de arquivos gravável na memória, que não é mantida se o contêiner é desligado. O Cloud Run decide de maneira independente quando parar de enviar solicitações a uma instância e desativá-la, por exemplo, ao reduzir o escalonamento vertical.

Para receber um aviso quando o Cloud Run estiver prestes a encerrar uma instância, o aplicativo pode tratar o sinal SIGTERM. Isso permite que o código limpe buffers locais e mantenha os dados locais em um armazenamento de dados externo.

Para manter os arquivos de forma permanente, é possível integrar ao Cloud Storage ou ativar um sistema de arquivos de rede (NFS).

Quando usar os serviços do Cloud Run

Os serviços do Cloud Run são ótimos para códigos que processam solicitações ou eventos. Como exemplos de casos de uso, temos:

Sites e aplicativos da Web
Crie seu app da Web usando sua pilha favorita, acesse seu banco de dados SQL e renderize páginas HTML dinâmicas.
APIs e microsserviços
É possível criar uma API REST, uma API GraphQL ou microsserviços particulares que se comunicam por HTTP ou gRPC.
Processamento de dados de streaming
Os serviços do Cloud Run podem receber mensagens de Assinaturas de push do Pub/Sub e eventos do Eventarc.

Jobs do Cloud Run

Se o código executar o trabalho e depois parar (um script é um bom exemplo), você poderá usar um job do Cloud Run para executá-lo. É possível executar um job na linha de comando usando a CLI gcloud, programar um job recorrente ou executá-lo como parte de um fluxo de trabalho.

Jobs de matriz são uma maneira mais rápida de executar jobs

Um job pode iniciar uma instância de contêiner para executar o código. Essa é uma maneira comum de executar um script ou uma ferramenta. No entanto, também é possível iniciar várias instâncias de contêiner idênticas em paralelo, ou seja, um job de matriz.

Os jobs de matriz são uma maneira mais rápida de processar jobs que podem ser divididos em várias tarefas independentes, como mostrado aqui:

Jobs de matriz são uma maneira mais rápida de executar jobs paralelos

Por exemplo, se você estiver redimensionando e cortando mil imagens do Cloud Storage, processá-las consecutivamente será mais lento do que processá-las em paralelo com muitas instâncias, que o Cloud Run gerencia com o escalonamento automático.

Quando usar jobs do Cloud Run

Os jobs do Cloud Run são adequados para executar códigos que executam tarefas (um job) e são encerrados quando o trabalho é concluído. Por exemplo:

Script ou ferramenta
Executar um script para realizar migrações de banco de dados ou outras tarefas operacionais.
Job de matriz
Executar o processamento altamente paralelo de todos os arquivos em um bucket do Cloud Storage.
Job agendado
Crie e envie faturas em intervalos regulares ou salve os resultados de uma consulta no banco de dados como XML e faça upload do arquivo em intervalos de algumas horas.

Integrações do Cloud Run

O Cloud Run se integra ao ecossistema mais amplo do Google Cloud, o que permite criar aplicativos completos.

As integrações essenciais incluem:

Armazenamento de dados
O Cloud Run se integra ao Cloud SQL (MySQL gerenciado, PostgreSQL e SQL Server), Memorystore (gerenciado Redis e Memcached), Firestore, Cloud Spanner, Cloud Storage e muito mais. Consulte Armazenamento de dados para ver uma lista completa.
Geração de registros e relatórios de erros
Os registros de contêiner são ingeridos automaticamente pelo Cloud Logging. Se houver exceções nos registros, o Error Reporting os agrega e notifica você. As seguintes linguagens são compatíveis: Go, Java, Node.js, PHP, Python, Ruby e .NET.
Identidade do serviço
Cada revisão do Cloud Run está vinculada a uma conta de serviço, e as bibliotecas de cliente do Google Cloud usam essa conta de serviço de maneira transparente para autenticar com as APIs do Google Cloud.
Entrega contínua
Se você armazenar seu código-fonte no GitHub, no Bitbucket ou no Cloud Source Repositories, poderá configurar o Cloud Run para implantar automaticamente novas confirmações.
Rede privada
As instâncias de contêiner do Cloud Run podem acessar recursos na rede de nuvem privada virtual (VPC) por meio do conector de acesso à VPC sem servidor. É assim que seu serviço se conecta com as máquinas virtuais ou os produtos do Compute Engine baseados no Compute Engine, como o Google Kubernetes Engine ou o Memorystore.
APIs Google Cloud
O código do serviço é autenticado de maneira transparente com as APIs do Google Cloud. Exemplos: APIs de IA e machine learning, como a API Cloud Vision, API Speech-to-Text, API AutoML Natural Language, API Cloud Translation e muito mais.
Tarefas em segundo plano
Se você quiser programar um código para ser executado posteriormente ou imediatamente após retornar uma solicitação da Web, o Cloud Run funciona bem com o Cloud Tasks para oferecer uma execução assíncrona e confiável.

Consulte Como se conectar a serviços do Google Cloud para ver uma lista de todos os serviços que funcionam bem com o Cloud Run.

Os serviços ou jobs precisam ser empacotados em uma imagem de contêiner.

Para que o serviço ou o job seja implantável no Cloud Run, é preciso empacotá-lo em uma imagem de contêiner. Se você não estiver familiarizado com os contêineres, veja uma breve introdução conceitual.

Como criar imagens de contêiner

Uma imagem de contêiner é um pacote com tudo o que seu serviço precisa para ser executado. Isso inclui artefatos de build, recursos, pacotes do sistema e, opcionalmente, um ambiente de execução. Isso facilita a portabilidade de um aplicativo em contêiner. Ele funciona em qualquer lugar onde um contêiner possa ser executado. Exemplos de artefatos de build incluem binários compilados ou arquivos de script, e os exemplos de ambientes de execução são o ambiente de execução JavaScript em Node.js ou uma máquina virtual Java (JVM).

Profissionais avançados valorizam o fato de que o Cloud Run não impõe outros encargos à execução do código: é possível executar qualquer binário no Cloud Run. Para usuários, incluindo especialistas, que estejam procurando mais conveniência ou queiram delegar o contêiner de aplicativos ao Google, o Cloud Run se integra ao Google Cloud Buildpacks de código aberto para oferecer uma implantação baseada na origem.

A seguir