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:
-
Programador do Cloud Run (
roles/run.developer
) no serviço Cloud Run -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na identidade do serviço -
Leitor do Artifact Registry (
roles/artifactregistry.reader
) no repositório do Artifact Registry da imagem de contentor implementada (se aplicável)
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
Na Google Cloud consola, aceda ao Cloud Run:
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.
Localize o formulário Dimensionamento do serviço (para um novo serviço) ou o formulário Editar dimensionamento para um serviço existente.
No campo com a etiqueta Número de instâncias, especifique o número de instâncias do contentor para o serviço.
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 deauto
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 formatoLOCATION-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
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
Atualize os atributos
scalingMode
emanualInstanceCount
: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 ouautomatic
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.
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 degcloud 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 recursogoogle_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 formatoLOCATION-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
Na Google Cloud consola, aceda ao Cloud Run:
Clique no serviço que lhe interessa para abrir o painel Detalhes do serviço.
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
Na Google Cloud consola, aceda ao Cloud Run:
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.
Localize o formulário Editar dimensionamento e selecione Dimensionamento manual.
No campo com a etiqueta Número de instâncias, introduza o valor
0
(zero).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
Transfira a configuração YAML do seu serviço:
gcloud run services describe SERVICE --format export > service.yaml
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.
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 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":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 degcloud 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 formatoLOCATION-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:
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.
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
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 EnginePROJECT_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.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.