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 escalamento 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 dimensionamento 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 o ajuste de escala manual
A lista seguinte descreve como as instâncias são atribuídas quando divide o tráfego ao usar 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 dimensionamento manual com a faturação baseada em pedidos, as instâncias inativas dimensionadas 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 para lhe conceder 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.
Para mudar o modo de escalabilidade de manual para automático, envie um pedido PATCH
para o ponto final service
da API Cloud Run Admin e defina o campo scalingMode
como AUTOMATIC
.
Por exemplo, execute o seguinte comando curl
:
curl -H "Content-Type: application/json" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -X PATCH \ -d '{"launchStage":"BETA","scaling":{"scalingMode": "AUTOMATIC","manualInstanceCount":null}}' \ https://run.googleapis.com/v2/projects/PROJECT_ID/locations/REGION/services/SERVICE?update_mask=launchStage,scaling.scalingMode,scaling.manualInstanceCount
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 do Cloud Scheduler define o serviço para ser dimensionado manualmente para um número especificado de 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 reduzir a escala para um número especificado de instâncias durante as horas de folga.
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 através do seguinte comando:
gcloud run deploy SERVICE \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --region=REGION \ --project PROJECT_ID
Substitua o seguinte:
- SERVICE: o nome do serviço do Cloud Run.
- REGION: a região na qual o serviço do Cloud Run está implementado.
- PROJECT_ID: o Google Cloud ID do projeto.
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 seja dimensionado manualmente para um número especificado de instâncias de serviço 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":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua o seguinte:
- REGION: a região na qual o serviço do Cloud Run está implementado.
- PROJECT_ID: o Google Cloud ID do projeto.
- INSTANCE_COUNT: o número de instâncias para as quais quer dimensionar, por exemplo,
10
. - PROJECT_NUMBER: o Google Cloud número do projeto.
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 para o número que especificar. 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.Crie uma tarefa do Cloud Scheduler que reduza manualmente as instâncias do serviço durante as horas de folga:
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":INSTANCE_COUNT}}' \ --oauth-service-account-email=PROJECT_NUMBER-compute@developer.gserviceaccount.com
Substitua o seguinte:
- REGION: a região na qual o serviço do Cloud Run está implementado.
- PROJECT_ID: o Google Cloud ID do projeto.
- INSTANCE_COUNT: o número de instâncias para o qual quer dimensionar.
Para desativar o serviço, defina esta opção como
0
. - PROJECT_NUMBER: o Google Cloud número do projeto.
Este comando cria uma tarefa do Cloud Scheduler que faz uma chamada HTTP para a API Cloud Run Admin, definindo instâncias de escalamento manual para o número de instâncias que especificou. A definição das instâncias como zero desativa efetivamente o serviço, mas não os trabalhos do Cloud Scheduler. Essas tarefas continuam a ser executadas e repõem (e voltam a ativar) o serviço para um número aumentado de instâncias conforme agendado.