foto[1]-Este é o Cloud Run: Configuração para Windows 7,8,10,11-Winpcsoft.com

Isto é parte 3 da série “This is Cloud Run”. Em Papel 1, cobrimos o que é Cloud Run e quando escolhê-lo. Em Papel 2, percorremos as opções de implantação e gerenciamento de revisão. Agora vamos ajustá-lo.

Os padrões do Cloud Run são bons. Nós cobrimos isso na parte 1. Mas cada carga de trabalho tem suas próprias necessidades, e o Cloud Run oferece os botões para ajustá-los. Este artigo aborda as configurações que você usará com mais frequência.

CPU e memória

Cada instância do Cloud Run recebe uma parcela de CPU e memória. Os padrões (1 vCPU, 512 MiB) são razoáveis ​​para uma API leve, mas você desejará ajustá-los conforme entender as necessidades de sua carga de trabalho.

CPU varia de 0.08 vCPU (menos de um décimo de um núcleo) para 8 vCPUs. Memória varia de 128 MiB para 32 GiB. Os dois estão ligados: alocações de CPU mais altas exigem limites mínimos de memória, e algumas configurações de memória requerem CPU mínima.

Mas a decisão mais importante é a Modo de alocação de CPU:

  • Somente solicitação (padrão). A CPU só é alocada enquanto sua instância está processando ativamente uma solicitação. Entre solicitações, CPU é reduzida a quase zero. Você paga apenas pelo tempo gasto no processamento de solicitações. Este é o modelo sem servidor, e é a escolha certa para a maioria das APIs HTTP.
  • Sempre ativo. CPU está sempre disponível, mesmo entre solicitações. Isso custa mais, mas é necessário para cargas de trabalho que funcionam fora do tratamento de solicitações: Conexões WebSocket que mantêm o estado, threads em segundo plano que processam filas, ou serviços que precisam manter os caches na memória aquecidos.
gcloud execute implantar meu serviço \
--imagem minha-imagem \
--CPU 2 \
--memória 1Gi \
--sem limitação de CPU \
--região us-central1

O –sinalizador no-cpu-throttling permite CPU sempre ligada. Sem isso (ou com –aceleração da CPU), você obtém o modo somente solicitação padrão.

A diferença de preço é significativa. Com alocação somente por solicitação, você paga apenas por vCPU-segundo e GiB-segundo ao lidar com solicitações. Com sempre ligado, você paga por todo o ciclo de vida da instância. Para um serviço que lida com tráfego HTTP em rajadas com períodos ociosos entre, somente solicitação pode ser dramaticamente mais barato. Para um serviço que executa tarefas em segundo plano ou mantém conexões WebSocket, sempre ligado é a única opção que funciona corretamente.

Verificações de saúde

O Cloud Run não enviará tráfego para uma instância até que ela esteja pronta. Por padrão, ele usa um Sonda de inicialização TCP: espera que seu contêiner escute na porta esperada, então considera pronto.

Para a maioria dos serviços, isso é o suficiente. Mas se o seu aplicativo precisar de tempo para carregar dados, caches quentes, ou estabeleça conexões com o banco de dados depois que a porta for aberta, você vai querer um personalizado Sonda de inicialização HTTP:

startupProbe:
httpObter:
caminho: /saúde
porta: 8080
InitialDelaySeconds: 0
períodoSegundos: 2
limite de falha: 15

Isso instrui o Cloud Run a GET /healthz a cada 2 segundos. Se falhar 15 vezes, a instância está marcada como não íntegra e reiniciada. Somente quando a investigação for bem-sucedida a instância começará a receber tráfego. Isto impede o 502 errors that happen when a load balancer sends requests to an instance that's technically listening but not yet ready to serve.

O Cloud Run também oferece suporte sondas de vivacidade que são executados continuamente após a inicialização. Se uma investigação de atividade falhar, O Cloud Run reinicia a instância. Útil para detectar processos travados, impasses, ou vazamentos de memória que não travam o contêiner, mas o fazem parar de responder.

Para gRPC serviços, O Cloud Run oferece suporte a sondagens de verificação de integridade do gRPC seguindo o Protocolo de verificação de integridade gRPC.

Solicitar tempo limite

Cada solicitação do Cloud Run tem um tempo esgotado. O padrão é 300 segundos (5 minutos). O máximo é 3600 segundos (60 minutos).

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--tempo esgotado 600 \
--região us-central1

Se o seu serviço processa uploads de arquivos grandes, gera relatórios, ou executa cálculos de longa duração, você vai querer aumentar isso. Mas tenha em mente: o tempo limite se aplica por solicitação. Se uma única solicitação demorar mais que o tempo limite, Cloud Run o encerra. As conexões WebSocket também estão sujeitas a esse tempo limite, é por isso que parte 1 mencionou o limite de conexão de aproximadamente 60 minutos.

Um padrão comum para trabalhos de longa duração: aceite o pedido, iniciar o processamento de forma assíncrona (através de Tarefas na nuvem ou Pub/Sub), e devolver um 202 imediatamente. O cliente pesquisa o status ou recebe um retorno de chamada quando o trabalho é concluído. Isso mantém o tempo limite da sua solicitação curto e o seu serviço responsivo.

Se você atinge regularmente o máximo de 60 minutos, isso é um sinal para o qual sua carga de trabalho pode ser mais adequada Jobs do Cloud Run (para processamento em lote) ou uma plataforma totalmente diferente.

Dimensionamento: Instâncias e simultaneidade

O escalonador automático do Cloud Run gerencia três configurações relacionadas:

Instâncias mínimas controla quantas instâncias permanecem quentes quando não há tráfego. O padrão é 0 (escala para zero). Configurando-o para 1 or higher eliminates cold starts but means you're paying for idle instances. It's the classic serverless trade-off: latência versus. custo. Para serviços de produção sensíveis à latência, 1 muitas vezes é o número certo. Para ambientes de desenvolvimento, 0 mantém sua conta em zero.

Máximo de instâncias limita até que ponto o Cloud Run pode ser ampliado. O padrão é 100. Isso protege você do dimensionamento descontrolado (e uma conta surpreendente) durante picos de tráfego inesperados. Mas defina isso com cuidado: se o seu serviço se comunicar com um banco de dados com um pool de 20 conexões, 100 instâncias, todas as tentativas de conexão irão sobrecarregá-lo. Match your max instances to your backend's capacity.

Simultaneidade controla quantas solicitações uma única instância trata simultaneamente. O padrão é 80. This is one of Cloud Run's key advantages over the old Cloud Functions 1st gen model, que processou uma solicitação por instância. Com simultaneidade em 80, uma única instância pode servir 80 solicitações simultâneas antes que o Cloud Run ative outra instância.

Reduza a simultaneidade para cargas de trabalho com uso intenso de CPU, onde cada solicitação precisa de poder de processamento dedicado. Levante-o (até 1000) para manipuladores leves de E/S que passam a maior parte do tempo aguardando chamadas de rede. Definir simultaneidade para 1 mimics the one-request-per-instance model if your code isn't thread-safe.

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--min-instâncias 1 \
--máximo de instâncias 10 \
--simultaneidade 80 \
--região us-central1

E lembre-se Aumento de CPU de inicialização da parte 1: O Cloud Run duplica temporariamente a CPU durante a inicialização das instâncias para deixá-las prontas mais rapidamente. Combinado com instâncias mínimas, isso faz com que as partidas a frio não sejam um problema para a maioria das cargas de trabalho.

Variáveis ​​e segredos de ambiente

O Cloud Run oferece suporte a dois mecanismos para transmitir a configuração aos seus contêineres, e é importante usar o caminho certo para o trabalho.

Variáveis ​​de ambiente são para configuração não sensível: sinalizadores de recursos, Pontos de extremidade da API, níveis de registro, nomes de host de banco de dados. Defina-os no momento da implantação com –set-env-vars:

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--set-env-vars "DB_HOST=10.0.0.1,LOG_LEVEL=info,ENV = produção" \
--região us-central1

Isto segue o 12-Aplicativo Fator metodologia: configuração vive no ambiente, não no código.

Segredos são para credenciais confidenciais: Chaves de API, senhas de banco de dados, Certificados TLS, Segredos do cliente OAuth. Estes deveriam nunca ser variáveis ​​de ambiente simples. Varis de ambiente simples são visíveis no console do Cloud Run, aparecer nos logs de depuração, e pode vazar em relatórios de erros. Em vez de, guarde-os em Gerenciador secreto e referenciá-los no momento da implantação:

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--set-secrets "API_KEY=my-api-key:mais recente" \
--set-secrets "/secrets/tls.key=tls-private-key:mais recente" \
--região us-central1

Os segredos podem ser montados como variáveis ​​de ambiente ou como arquivos. O primeiro exemplo acima monta o segredo como uma variável de ambiente chamada API_KEY. O segundo monta-o como um arquivo em /secrets/tls.key. Os segredos são versionados, com acesso controlado via IAM, e registrado em auditoria. Se um segredo for comprometido, você o alterna no Secret Manager e o reimplanta. Nenhuma alteração de código.

Montagens de volume

As instâncias do Cloud Run são temporárias, mas às vezes você precisa de armazenamento temporário ou acesso a arquivos compartilhados. O Cloud Run oferece suporte a três tipos de montagens de volume:

Volumes na memória are tmpfs-style mounts backed by your instance's RAM. They're fast but volatile (desaparece quando a instância termina) e conte com seu limite de memória. Útil para processamento de arquivos temporários, como baixar um arquivo, transformando-o, e enviando o resultado:

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--nome do volume adicionado=scratch,tipo = na memória,limite de tamanho = 256 Mi \
--adicionar volume-montar volume=scratch,caminho de montagem=/tmp/work \
--região us-central1

FUSÍVEL de armazenamento em nuvem monta um Armazenamento em nuvem bucket como um sistema de arquivos local. Seu código lê e grava arquivos normalmente, e FUSÍVEL GCS traduz essas operações em chamadas da API Cloud Storage:

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--nome do volume adicionado=modelos,type = armazenamento em nuvem,bucket=meus-ml-modelos \
--add-volume-mount volume=modelos,caminho de montagem=/mnt/models \
--região us-central1

A captura: eventualmente é consistente. Sem bloqueio de arquivo, última gravação vence. Bom para ler ativos compartilhados (Modelos de ML, arquivos de configuração) ou escrevendo artefatos (registros, exportações). Não é bom para gravações simultâneas no mesmo arquivo.

NFS via Filestore lhe dá uma visão completa POSIX-sistema de arquivos de rede compatível com bloqueio de arquivo adequado. Latência inferior ao GCS FUSE para leituras aleatórias. Requer Conectividade VPC desde Armazenamento de arquivos instâncias ativas em sua VPC. Melhor para cargas de trabalho que precisam de acesso compartilhado de leitura/gravação com consistência em nível de arquivo.

Para a maioria dos serviços Cloud Run, você não vai precisar de nada disso. Mas quando você faz (pipelines de processamento de imagem, Exibição de modelo de ML, configuração compartilhada entre instâncias), eles evitam que você crie soluções alternativas.

Configuração de rede

Os padrões de rede do Cloud Run são simples: seu serviço é público, e se conecta à Internet para tráfego de saída. Mas quando você precisa de mais controle, existem três áreas para configurar.

Entrada

Configurações de entrada controlar quem pode acessar seu serviço:

  • Todos (padrão). Aceita tráfego de qualquer lugar da internet. Ótimo para APIs públicas e aplicativos da web.
  • Interno. Aceita apenas tráfego de dentro do seu VPC ou de outros serviços do Google Cloud (como Pub/Sub, Agendador de nuvem, ou Tarefas na nuvem). O serviço é invisível para a internet pública. Use isto para serviços de back-end que nunca devem ser chamados diretamente por clientes externos.
  • Interno + Balanceamento de carga em nuvem. O mesmo que interno, mas também aceita tráfego através de um Balanceador de carga de aplicativo externo global. Este é o caminho para domínios personalizados, Cache CDN com CDN na nuvem, e proteção WAF com Armadura de Nuvem. Você verá esse padrão de balanceador de carga aparecer novamente nas seções Domínios personalizados e Cloud Armor abaixo.
gcloud execute implantar meu serviço \
--imagem minha-imagem \
--ingresso interno \
--região us-central1

Conectividade de saída e VPC

Por padrão, suas instâncias do Cloud Run se conectam diretamente à Internet. Mas se o seu serviço precisar alcançar recursos privados (um Nuvem SQL banco de dados, um Armazenamento de memória Instância Redis, uma API interna), precisa de acesso VPC.

Duas opções:

  • Conectores de acesso VPC sem servidor. A abordagem original. Você cria um recurso de conector que conecta o Cloud Run e sua VPC. Funciona, mas adiciona um salto de rede e tem limites de rendimento.
  • Saída direta de VPC. A abordagem mais recente. As instâncias do Cloud Run são colocadas diretamente na sua sub-rede VPC. Nenhum conector necessário, sem salto extra, nenhum gargalo de transferência. Este é o caminho recomendado para novas implantações.

Se você está começando do zero, vá com saída direta de VPC. Se você tiver serviços existentes usando conectores, eles continuarão trabalhando, mas considere migrar quando for conveniente.

Domínios Personalizados

Cada serviço Cloud Run recebe um URL *.run.app com HTTPS automático. Mas para produção, you'll want your own domain. Dois caminhos:

  • Mapeamento de domínio do Cloud Run. A opção mais simples. Mapeie um domínio diretamente para seu serviço Cloud Run. Os certificados SSL são provisionados e renovados automaticamente. Funciona para configurações simples onde você só precisa de api.example.com apontando para o seu serviço.
  • Balanceador de carga de aplicativo externo global. A opção mais capaz. Oferece cache CDN, Armadura de Nuvem WAF, roteamento multirregional, e roteamento baseado em URL para diferentes serviços. Mais configuração, mas desbloqueia recursos que o mapeamento de domínio por si só não pode fornecer.

Configuração de segurança

Os padrões de segurança do Cloud Run são fortes (coberto na Parte 1). Mas para serviços de produção, você vai querer personalizar algumas configurações.

Contas de serviço

Todo serviço do Cloud Run é executado como um conta de serviço, que determina quais recursos do Google Cloud ele pode acessar. Por padrão, O Cloud Run usa a conta de serviço de computação padrão do projeto, que normalmente tem permissões amplas.

Para produção, crie um conta de serviço dedicada por serviço com apenas as permissões necessárias. Se o serviço lê no Cloud Storage e grava no Pub/Sub, sua conta de serviço deve ter storage.objectViewer e pubsub.publisher. Nada mais. Este é o princípio do menor privilégio, e limita o raio de explosão se um serviço for comprometido.

gcloud execute implantar meu serviço \
--imagem minha-imagem \
--conta de serviço [email protected] \
--região us-central1

Autenticação IAM

Por padrão, Cloud Run requer autenticação. Cada solicitação deve incluir um token de identidade válido, e o chamador deve ter a função role/run.invoker no serviço. Este é o padrão correto para comunicação serviço a serviço.

Para serviços voltados ao público (APIs, webhooks, aplicativos da web), você desativa explicitamente concedendo a função role/run.invoker a allUsers:

gcloud run services add-iam-policy-binding meu-serviço \
--member="allUsers" \
--role="roles/run.invoker" \
--região us-central1

Mas mesmo com o acesso não autenticado ativado, você pode implementar sua própria camada de autenticação no código do seu aplicativo. Cloud Run cuida da segurança do transporte (HTTPS) e identidade em nível de plataforma (a verificação do invocador do IAM). Seu aplicativo lida com a identidade no nível do aplicativo: logins de usuários, Chaves de API, Validação JWT.

Autorização Binária

Autorização Binária impõe políticas de tempo de implantação: somente imagens de contêiner que foram assinadas pelo pipeline de CI/CD podem ser implantadas. Isso evita que alguém implante uma imagem não testada diretamente na produção, mesmo que eles tenham permissões do IAM para fazer isso.

É uma camada de governança que faz sentido para organizações com requisitos de conformidade ou processos rígidos de gestão de mudanças.

Armadura de Nuvem

Armadura de Nuvem é o WAF do Google Cloud (Firewall de aplicativos da Web). Ele fica na frente do seu serviço Cloud Run e pode impor:

  • Listas de permissões e listas de bloqueio de IP
  • Restrições geográficas
  • Limitação de taxa por cliente
  • Regras WAF pré-configuradas (Injeção SQL, XSS, etc.)

Cloud Armor requer um Balanceador de carga de aplicativo externo global na frente do seu serviço Cloud Run. Se você estiver usando o URL *.run.app padrão sem um balanceador de carga, Cloud Armor isn't available. Mas se o seu serviço for público e lidar com dados confidenciais, o balanceador de carga + A combinação Cloud Armor vale a configuração extra.

Conclusão

O Cloud Run oferece botões de configuração suficientes para ajustar cargas de trabalho reais. Mas você não precisa tocar em todos eles de uma vez.

O padrão que eu recomendo: comece com os padrões. Implante seu serviço, veja como ele se comporta sob tráfego real, então ajuste. Aumente a memória se você estiver atingindo limites. Reduza a simultaneidade se as solicitações exigirem muita CPU. Adicione uma verificação de integridade se sua inicialização estiver lenta. Configure uma conta de serviço dedicada antes de entrar em produção. Cada alteração entra em vigor na próxima implantação, com tempo de inatividade zero. Nada é permanente.

Se parte 1 estava prestes se O Cloud Run pertence à sua arquitetura, e Parte 2 estava prestes colocando seu código nele, este artigo é sobre fazendo com que funcione bem para suas necessidades específicas. Comece simples. Adicione complexidade quando sua carga de trabalho exigir, não antes.

Se você está apenas entrando na série, Papel 1 é o lugar para começar.

Recursos

blank


Este é o Cloud Run: A configuração foi publicada originalmente no Google Developer Experts on Medium, onde as pessoas continuam a conversa destacando e respondendo a esta história.