Escala manual

Esta página descreve como dimensionar manualmente o seu serviço. Também fornece instruções para um exemplo de utilização comum, alterando a quantidade de instâncias com base num agendamento através de tarefas do Cloud Scheduler e da API Cloud Run Admin.

Vista geral

Por predefinição, o Cloud Run dimensiona automaticamente até um número máximo especificado ou predefinido de instâncias, consoante o tráfego e a utilização da CPU. No entanto, para alguns exemplos de utilização, pode querer ter a capacidade de definir um número específico de instâncias através do escalamento manual.

O dimensionamento manual permite-lhe definir uma quantidade específica de instâncias, independentemente do tráfego ou da utilização, e sem exigir uma nova implementação. Tudo isto dá-lhe a opção de escrever a sua própria lógica de escalabilidade através de um sistema externo. Consulte o artigo Ajuste de escala com base na programação para ver um exemplo.

Definições mínimas e máximas ao nível da revisão e ajuste de escala manual

Se definir o serviço para o escalonamento manual, as definições de instâncias mínimas ao nível da revisão e máximas são ignoradas.

Divisões de tráfego para escalabilidade manual

A lista seguinte descreve como as instâncias são atribuídas quando divide o tráfego sob o escalamento manual. Isto inclui o comportamento das revisões apenas com etiquetas de tráfego.

  • Durante uma divisão de tráfego, são atribuídas instâncias a cada revisão proporcionalmente, com base na divisão de tráfego, de forma semelhante à divisão de tráfego com instâncias mínimas ao nível do serviço.

  • Se o número de revisões que recebem tráfego exceder a contagem de instâncias manual, algumas das revisões não terão instâncias. O tráfego enviado para essas revisões recebe o mesmo erro que se as revisões estivessem desativadas.

  • Para todas as revisões que recebem tráfego numa divisão de tráfego, as instâncias mínimas e máximas ao nível da revisão são desativadas.

  • Se uma revisão estiver ativa apenas devido a etiquetas de tráfego:

    • Se o número mínimo de instâncias ao nível da revisão estiver definido, o número especificado de instâncias é iniciado, mas não é contabilizado para o número total de instâncias manuais do serviço. A revisão não é dimensionada automaticamente.
    • Se o número mínimo de instâncias ao nível da revisão não estiver definido, a revisão é expandida para, no máximo, uma instância, em resposta ao tráfego enviado para o URL da etiqueta.

Comportamento de faturação com o ajuste de escala manual

Quando usa o dimensionamento manual, o comportamento de faturação é semelhante ao comportamento quando usa a funcionalidade de instâncias mínimas.

Ou seja, com o dimensionamento manual e a faturação baseada em instâncias, as instâncias inativas dimensionadas manualmente são faturadas como instâncias ativas.

Se usar o escalamento manual com a faturação baseada em pedidos, as instâncias inativas escaladas manualmente são faturadas como instâncias mínimas inativas. Para ver detalhes de faturação completos, consulte a página de preços.

Funções necessárias

Para receber as autorizações de que precisa para implementar serviços do Cloud Run, peça ao seu administrador que lhe conceda as seguintes funções da IAM:

Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se o seu serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a atribuição de funções, consulte as autorizações de implementação e faça a gestão do acesso.

Configure o dimensionamento

Pode configurar o modo de escalabilidade através da Google Cloud consola, da CLI Google Cloud, do ficheiro YAML ou da API quando cria ou atualiza um serviço:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Se estiver a configurar um novo serviço, selecione Serviços no menu e clique em Implementar contentor para apresentar o formulário Criar serviço. Se estiver a configurar um serviço existente, clique no serviço para apresentar o respetivo painel de detalhes e, de seguida, clique no ícone de lápis junto a Ajuste de escala na parte superior direita do painel de detalhes.

  3. Localize o formulário Dimensionamento do serviço (para um novo serviço) ou o formulário Editar dimensionamento para um serviço existente.

    imagem

    No campo com a etiqueta Número de instâncias, especifique o número de instâncias do contentor para o serviço.

  4. Clique em Criar para um novo serviço ou em Guardar para um serviço existente.

gcloud

Para especificar o dimensionamento de um novo serviço, use o comando deploy:

gcloud run deploy SERVICE \
    --scaling=INSTANCE_COUNT \
    --image IMAGE_URL

Substitua o seguinte:

  • SERVICE: o nome do seu serviço.
  • INSTANCE_COUNT: o número de instâncias do serviço. Isto define o serviço para o escalonamento manual. Especifique um valor de 0 para desativar o serviço. Especifique um valor de auto para usar o comportamento de escalamento automático do Cloud Run predefinido.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .

Especifique o dimensionamento de um serviço existente através do seguinte comando update:

gcloud run services update SERVICE \
   --scaling=INSTANCE_COUNT

YAML

  1. Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Atualize os atributos scalingMode e manualInstanceCount:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: MODE
      run.googleapis.com/manualInstanceCount: INSTANCE_COUNT

    Substitua o seguinte:

    • SERVICE: o nome do seu serviço do Cloud Run
    • MODE: manual para o dimensionamento manual ou automatic para o comportamento de dimensionamento automático do Cloud Run predefinido.
    • INSTANCE_COUNT: o número de instâncias que está a dimensionar manualmente para o serviço. Especifique um valor de 0 para desativar o serviço.
  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

API REST

Para atualizar as instâncias mínimas ao nível do serviço para um determinado serviço, envie um PATCH pedido HTTP para o ponto final da API Cloud Run Admin service.

Por exemplo, usar curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":MANUAL_INSTANCE_COUNT }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Substitua o seguinte:

  • ACCESS_TOKEN: um token de acesso válido para uma conta que tenha as autorizações de IAM para atualizar um serviço. Por exemplo, se tiver sessão iniciada em gcloud, pode obter um token de acesso através de gcloud auth print-access-token. A partir de uma instância de contentor do Cloud Run, pode obter um token de acesso através do servidor de metadados da instância de contentor.
  • MANUAL_INSTANCE_COUNT: o número de instâncias do serviço. Isto define o serviço para o escalonamento manual. Especifique um valor de 0 para desativar o serviço.
  • SERVICE: o nome do serviço.
  • REGION: a Google Cloud região na qual o serviço é implementado.
  • PROJECT_ID: o Google Cloud ID do projeto.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_service na sua configuração do Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "INSTANCE_COUNT"
  }
}

Substitua o seguinte:

  • SERVICE_NAME: o nome do seu serviço do Cloud Run.
  • REGION: a Google Cloud região. Por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG .
  • INSTANCE_COUNT: o número de instâncias que está a dimensionar manualmente para o serviço. Este número de instâncias é dividido entre todas as revisões com tráfego especificado com base na percentagem de tráfego que estão a receber.

Veja a configuração de escalabilidade do seu serviço

Para ver as instâncias de configuração de escalabilidade do seu serviço do Cloud Run:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que lhe interessa para abrir o painel Detalhes do serviço.

  3. A definição de escalonamento atual é apresentada na parte superior direita do painel de detalhes do serviço, após a etiqueta Escalonamento, junto ao ícone de caneta.

gcloud

Use o seguinte comando para ver a configuração de escalabilidade atual do serviço:

gcloud run services describe SERVICE

Substitua SERVICE pelo nome do seu serviço.

Procure o campo Scaling: Manual (Instances: ) perto da parte superior do texto devolvido pelo describe.

YAML

Use o seguinte comando para transferir a configuração YAML do serviço:

gcloud run services describe SERVICE --format export > service.yaml

A configuração de escalabilidade está contida nos atributos scalingMode e manualInstanceCount.

Desative um serviço

Quando desativa um serviço, todos os pedidos que estão a ser processados são concluídos. No entanto, quaisquer pedidos adicionais ao URL do serviço vão falhar com um erro Service unavailable ou Service disabled.

Os pedidos de revisões de serviços que só estão ativos devido a etiquetas de tráfego não são afetados porque essas revisões não estão desativadas.

Para desativar um serviço, define o dimensionamento como zero. Pode desativar um serviço através da Google Cloud consola, da CLI Google Cloud, do ficheiro YAML ou da API:

Consola

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. Clique no serviço que quer desativar para apresentar o respetivo painel de detalhes e, de seguida, clique no ícone de caneta junto a Ajuste de escala na parte superior direita do painel de detalhes.

  3. Localize o formulário Editar dimensionamento e selecione Dimensionamento manual.

    imagem

    No campo com a etiqueta Número de instâncias, introduza o valor 0 (zero).

  4. Clique em Guardar.

gcloud

Para desativar um serviço, use o seguinte comando para definir o dimensionamento como zero:

gcloud run services update SERVICE --scaling=0

Substitua SERVICE pelo nome do seu serviço.

YAML

  1. Transfira a configuração YAML do seu serviço:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Defina o atributo manualInstanceCount como zero (0):

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
      annotations:
      run.googleapis.com/scalingMode: manual
      run.googleapis.com/manualInstanceCount: `0`

    Substitua SERVICE pelo nome do seu serviço do Cloud Run.

  3. Crie ou atualize o serviço com o seguinte comando:

    gcloud run services replace service.yaml

API REST

Para desativar um serviço, envie um PATCHpedido HTTP para o ponto final da API Cloud Run Admin service.

Por exemplo, usar curl:

    curl -H "Content-Type: application/json" \
    -H "Authorization: Bearer ACCESS_TOKEN" \
    -X PATCH \
    -d '{"scaling":{"manualInstanceCount":0 }}' \
    https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=scaling.manualInstanceCount

Substitua o seguinte:

  • ACCESS_TOKEN: um token de acesso válido para uma conta que tenha as autorizações de IAM para atualizar um serviço. Por exemplo, se tiver sessão iniciada em gcloud, pode obter um token de acesso através de gcloud auth print-access-token. A partir de uma instância de contentor do Cloud Run, pode obter um token de acesso através do servidor de metadados da instância de contentor.
  • SERVICE: o nome do serviço.
  • REGION: a Google Cloud região na qual o serviço é implementado.
  • PROJECT_ID: o Google Cloud ID do projeto.

Terraform

Para desativar um serviço, defina o atributo manual_instance_count como zero (0):

resource "google_cloud_run_v2_service" "default" {
  name     = "SERVICE_NAME"
  location = "REGION"

  template {
    containers {
      image = "IMAGE_URL"
    }
  }
  scaling {
    scaling_mode = "MANUAL"
    manual_instance_count = "0"
  }
}

Substitua o seguinte:

  • SERVICE_NAME: o nome do seu serviço do Cloud Run.
  • REGION: a Google Cloud região. Por exemplo, europe-west1.
  • IMAGE_URL: uma referência à imagem do contentor, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formato LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

Exemplo de escalabilidade baseada em horários

Um exemplo de utilização comum do dimensionamento manual é alterar a contagem de instâncias com base num horário predefinido. Neste exemplo, usamos o Cloud Scheduler para agendar duas tarefas, cada uma das quais invoca a API Cloud Run Admin para dimensionar o número de instâncias. A primeira tarefa define o serviço para ser dimensionado manualmente para 10 instâncias durante o horário de funcionamento (das 09:00 às 17:00, de segunda a sexta-feira). A segunda tarefa define o serviço para ser dimensionado para zero instâncias durante o horário de folga.

Tenha em atenção que definir as instâncias como zero, conforme mostrado no exemplo, desativa o serviço, mas não as tarefas do Cloud Scheduler. Essas tarefas continuam a ser executadas e repõem (e reativam) o serviço para 10 instâncias conforme agendado.

Neste exemplo, usamos o início rápido do Cloud Run por simplicidade, mas pode usar um serviço à sua escolha.

Para configurar o ajuste de escala manual baseado em horários:

  1. Implemente o seu serviço com o seguinte comando:

    gcloud run deploy SERVICE \
       --image=us-docker.pkg.dev/cloudrun/container/hello \
       --region=REGION \
       --project PROJECT_ID

    Substitua o seguinte:

    • REGION: a região na qual o serviço do Cloud Run está implementado.
    • SERVICE: o nome do serviço do Cloud Run.
  2. Configure o seu serviço para o escalamento manual para 10 instâncias através do seguinte comando:

    gcloud run services update SERVICE \
       --region=REGION \
       --scaling=10
  3. Crie um trabalho do Cloud Scheduler que aumente manualmente as instâncias do serviço para 10 instâncias durante o horário de funcionamento:

    gcloud scheduler jobs create http hello-start-instances \
      --location=REGION \
      --schedule="0 9 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":10}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Este comando cria uma tarefa do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo o número de instâncias como 10. O exemplo usa a conta de serviço predefinida do Compute Engine PROJECT_NUMBER-compute@developer.gserviceaccount.com para as tarefas do Cloud Scheduler. Pode usar qualquer conta de serviço que tenha autorizações para atualizar os serviços do Cloud Run.

  4. Crie um trabalho do Cloud Scheduler que reduza manualmente as instâncias do serviço para zero durante o horário de folga, desativando o serviço:

    gcloud scheduler jobs create http hello-stop-instances \
      --location=REGION \
      --schedule="0 17 * * MON-FRI" \
      --time-zone=America/Los_Angeles \
      --uri=https://run.googleapis.com/v2/projects/PROJECT_ID/
      locations/REGION/services/hello?update_mask=launchStage,scaling.manualInstanceCount \
      --headers=Content-Type=application/json,X-HTTP-Method-Override=PATCH \
      --http-method=PUT \
      --message-body='{"scaling":{"manualInstanceCount":0}}' \
      --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Este comando cria uma tarefa do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo as instâncias de escalamento manual como zero. Isto desativa efetivamente o serviço, mas não as tarefas do Cloud Scheduler, que vão continuar a ser executadas e a repor (e reativar) o serviço para 10 instâncias conforme agendado.