O Cloud Run permite-lhe especificar que revisões devem receber tráfego e especificar as percentagens de tráfego recebidas por uma revisão. Esta funcionalidade permite-lhe reverter para uma revisão anterior, implementar gradualmente uma revisão e dividir o tráfego entre várias revisões. Esta página descreve como usar esta funcionalidade para gerir o tráfego para as revisões do Cloud Run.
Tenha em atenção que os ajustes de encaminhamento de tráfego não são instantâneos. Quando altera o tráfego para revisões, todos os pedidos que estão a ser processados continuam até à conclusão. Os pedidos em curso não são ignorados e podem ser direcionados para uma nova revisão ou uma revisão anterior durante o período de transição.
Divisão de tráfego e afinidade de sessão
Se estiver a dividir o tráfego entre várias revisões com a afinidade de sessão ativada, consulte o artigo Afinidade de sessão e divisão de tráfego para ver detalhes sobre o efeito da afinidade de sessão na divisão de tráfego.
Ciclo de vida das divisões de tráfego
Se dividir o tráfego entre várias revisões ou atribuir tráfego a uma revisão anterior, todas as implementações subsequentes usam esse padrão de divisão de tráfego no futuro. Para voltar a usar apenas a revisão mais recente sem divisão de tráfego, envie todo o tráfego para a revisão mais recente.
Funções necessárias
Para receber as autorizações de que precisa para gerir serviços e revisões do Cloud Run, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
- Se estiver a gerir um serviço implementado a partir de uma imagem de contentor:
- Programador do Cloud Run
(
roles/run.developer
) no serviço do 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 das imagens de contentores do serviço (se aplicável)
- Programador do Cloud Run
(
- Se estiver a gerir um serviço implementado a partir do código-fonte:
- Cloud Run Source Developer
(
roles/run.sourceDeveloper
) no seu projeto - Consumidor de utilização do serviço
(
roles/serviceusage.serviceUsageConsumer
) no seu projeto - Utilizador da conta de serviço
(
roles/iam.serviceAccountUser
) na identidade do serviço - Além disso, conceda a função
Cloud Run Builder
(
roles/run.builder
) à conta de serviço do Cloud Build no projeto. A conta de serviço de compilação é responsável pela compilação do seu serviço e usa por predefinição a conta de serviço predefinida do Compute Engine.
- Cloud Run Source Developer
(
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.
Reverta para uma revisão anterior
Para reverter para uma revisão anterior:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Localize o serviço na lista de serviços e clique nele.
Clique no separador Revisões para mostrar a lista de revisões atuais desse serviço.
Na lista de revisões, clique no ícone de reticências à direita da revisão à qual está a reverter:
Clique em Gerir tráfego para apresentar o formulário de gestão de tráfego:
- Selecione a revisão anterior para a qual quer reverter no menu pendente.
- Defina a percentagem de tráfego dessa revisão anterior como 100.
- Defina a percentagem da revisão publicada atualmente como 0.
- Clique em Guardar.
gcloud
Use o seguinte comando:
gcloud run services update-traffic SERVICE --to-revisions REVISION=100
- Substitua SERVICE pelo nome do serviço.
- Substitua REVISION pelo nome da revisão para a qual está a reverter.
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
Abaixo do atributo
spec
, localize e atualize o atributotraffic
para o seguinte:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100
Substituir
- REVISION com o nome da revisão para a qual está a reverter.
Substitua o serviço pela respetiva nova configuração através do seguinte comando:
gcloud run services replace service.yaml
Aguarde a conclusão da atualização: deve ver uma mensagem a indicar que a revisão a partir da qual está a reverter foi implementada e está a publicar
0
por cento do tráfego.
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:Implementação gradual para revisões
Para implementar uma nova revisão gradualmente:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Selecione um serviço na lista de serviços.
Clique em Implementar nova revisão.
Preencha o formulário de implementação conforme necessário, mas certifique-se de que a caixa de verificação com a etiqueta Publicar esta revisão imediatamente NÃO está selecionada.
Clique em Implementar.
Clique em Gerir tráfego.
A nova revisão é apresentada, mas com uma percentagem de 0: atualmente, não está a publicar tráfego. No formulário:
- Defina-o para a percentagem pretendida, por exemplo, 5. Tenha em atenção que a percentagem da versão publicada atualmente é reduzida automaticamente nesse mesmo valor.
- Clique em Guardar.
- Repita estes passos de Gerir tráfego, mas com percentagens alteradas, aumentando a percentagem conforme necessário para a nova revisão. Não precisa de voltar a implementar para alterar as percentagens de tráfego.
gcloud
Para implementar um serviço a partir de uma imagem de contentor:
Implemente a revisão que quer implementar gradualmente, definindo-a inicialmente para não receber tráfego:
Para implementar um serviço a partir do código-fonte:
gcloud run deploy --image IMAGE --no-traffic
Substitua IMAGE pela imagem que está a implementar.
Para implementar um serviço a partir do código-fonte:
gcloud run deploy SERVICE --source . --no-traffic
Substitua SERVICE pelo nome do seu serviço.
Especifique a percentagem de tráfego que quer que a nova revisão processe, por exemplo, 5 por cento:
gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
- Substitua SERVICE pelo nome do serviço.
- Substitua REVISION pelo nome da revisão que está a implementar gradualmente. Para especificar a revisão mais recente, pode usar
LATEST
, por exemplo,LATEST=5
. - Substitua PERCENTAGE pela percentagem de tráfego que quer
enviar para a nova revisão, por exemplo,
5
para enviar 5% do tráfego.
Quando o desempenho da revisão for satisfatório, repita o passo
update-traffic
anterior, mas aumente o valor percentual conforme pretendido.
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
Faça as alterações de configuração desejadas ao serviço e especifique o nome da revisão que quer para a nova revisão:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: ... name: REVISION-NAME
Substituir
- REVISION-NAME com o nome que quer que a nova revisão tenha.
Abaixo do atributo
spec
, localize e atualize o atributotraffic
para que a nova revisão publique apenas uma pequena quantidade de tráfego:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-NEW percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
Tenha em atenção que as percentagens têm de totalizar 100. Substituir
- REVISION-NEW com o nome da revisão que está a implementar gradualmente.
- REVISION-FORMER com o nome da revisão publicada atualmente.
- PERCENT-NEW com a percentagem de tráfego que quer enviar para a nova revisão.
Por exemplo, use
10
para enviar 10% do tráfego para essa revisão. - PERCENT-FORMER com a percentagem de tráfego que quer enviar para a revisão antiga
Aguarde a conclusão da atualização: deve ver uma mensagem a indicar que a nova revisão que está a implementar gradualmente foi implementada e está a publicar o valor percentual de tráfego que usou.
Terraform
Adicione o seguinte ao ficheiro .tf
e atualize gradualmente a percentagem de tráfego da revisão anterior para a revisão mais recente.
Tenha em atenção que cada alteração de tráfego requer a execução de outro terraform apply
.
Aplique as alterações introduzindo terraform apply
.
Divida o tráfego entre várias revisões
Para dividir o tráfego entre duas ou mais revisões:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Localize o serviço na lista de serviços e clique no mesmo.
Clique em Gerir tráfego.
A nova revisão publicada atualmente é apresentada. No formulário:
- Defina a percentagem de revisão publicada atualmente para a divisão pretendida.
- Selecione uma das revisões anteriores através da lista pendente e defina-a para a divisão percentual pretendida.
- Para dividir o tráfego entre mais revisões, clique em Adicionar revisão, selecione a revisão pretendida e defina a percentagem para a divisão desejada.
- Clique em Guardar.
gcloud
Especifique as revisões e a percentagem de tráfego para cada revisão numa lista separada por vírgulas:
gcloud run services update-traffic SERVICE --to-revisions LIST
- Substitua SERVICE pelo nome do serviço.
- Substitua LIST por uma lista de revisões e percentagens separadas por vírgulas:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
por exemplo,hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50
.
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
Abaixo do atributo
spec
, localize e atualize o atributotraffic
para que a nova revisão publique apenas uma pequena quantidade de tráfego:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-A percent: PERCENT-A - revisionName: REVISION-B percent: PERCENT-B - revisionName: REVISION-C percent: PERCENT-C
Tenha em atenção que as percentagens têm de totalizar 100. Substituir
- REVISION-A, REVISION-B, REVISION-C com as revisões às quais está a atribuir tráfego.
- PERCENT-A, PERCENT-B, PERCENT-C com a percentagem da revisão correspondente.
Substitua o serviço pela respetiva nova configuração através do seguinte comando:
gcloud run services replace service.yaml
Aguarde pela conclusão da atualização: deve ver uma mensagem a indicar que a nova revisão que está a implementar gradualmente foi implementada e está a publicar anúncios para
5
por cento (ou qualquer valor gradual que usou) do tráfego.
Terraform
Adicione o seguinte ao ficheiro .tf
:
Aplique as alterações introduzindo terraform apply
.
Envie todo o tráfego para a revisão mais recente
Quando implementa uma nova revisão, pode fazer com que esta revisão e todas as futuras apresentem 100% do tráfego assim que possível, substituindo qualquer divisão de tráfego estabelecida:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Localize o serviço na lista de serviços e clique nele.
Clique em Implementar nova revisão.
Preencha o formulário de implementação conforme necessário, certificando-se de que seleciona a caixa de verificação com a etiqueta Publicar esta revisão imediatamente. Isto substitui qualquer divisão de tráfego existente, com a nova revisão a publicar 100% do tráfego.
Clique em Implementar.
gcloud
Para enviar todo o tráfego para a revisão implementada mais recentemente:
gcloud run services update-traffic SERVICE --to-latest
Substitua SERVICE pelo nome do serviço.
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
Abaixo do atributo
spec
, localize e atualize o atributotraffic
para o seguinteapiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100
Substitua o serviço pela respetiva nova configuração através do seguinte comando:
gcloud run services replace service.yaml
Aguarde até que a atualização seja concluída. Deve ver uma mensagem a indicar que a revisão (mais recente) está implementada e a publicar
100
por cento do tráfego.
Terraform
Adicione o seguinte ao ficheiro .tf
:
Aplique as alterações introduzindo terraform apply
.
Use etiquetas para testes, migração de tráfego e reversões
Para evitar incorrer em custos de faturação para revisões etiquetadas, use instâncias mínimas ao nível do serviço ou remova as etiquetas das revisões quando já não precisar delas.
Um exemplo de utilização comum desta funcionalidade é usá-la para testar e validar uma nova revisão do serviço antes de publicar tráfego, nesta sequência típica:
- Executar testes de integração num contentor durante o desenvolvimento.
- Implemente o contentor num Google Cloud projeto que usa apenas para preparação, sem publicar tráfego, e teste-o com uma revisão etiquetada.
- Implemente-o em produção, sem publicar tráfego, e teste-o com uma revisão etiquetada em produção.
- Migre o tráfego para a revisão etiquetada.
Implemente uma nova revisão etiquetada
Para implementar uma nova revisão de um serviço existente na produção:
gcloud
Para implementar uma nova revisão etiquetada a partir de uma imagem de contentor:
gcloud run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
Substituir:
- IMAGE_URL com o URL da sua imagem.
- TAG_NAME com o nome da etiqueta em minúsculas.
Para implementar um serviço a partir do código-fonte:
gcloud run deploy myservice --source . --no-traffic --tag TAG_NAME
Substitua TAG_NAME pelo nome da etiqueta em minúsculas.
A etiqueta permite-lhe testar diretamente a nova revisão num URL específico, sem publicar tráfego. O URL começa com o nome da etiqueta que indicou. Por exemplo, se usou o nome da etiqueta green
no serviço myservice
, testaria a revisão etiquetada no URL https://green---myservice-abcdef.a.run.app
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
Abaixo do atributo
traffic
, localize e atualize o atributotag
que corresponde à revisão à qual quer adicionar uma etiqueta:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100 - revisionName: REVISION-A tag: TAG-A - revisionName: REVISION-B tag: TAG-B - revisionName: REVISION-C tag: TAG-C
Substituir:
- TAG-A, TAG-B, TAG-C com a etiqueta associada a cada revisão.
- REVISION com o nome de uma revisão existente para a qual quer enviar todo o tráfego.
Crie ou atualize o serviço com o seguinte comando:
gcloud run services replace service.yaml
Terraform
Adicione o seguinte ao seu ficheiro .tf
e atualize gradualmente a percentagem de tráfego da revisão antiga para a revisão mais recente com a nova etiqueta.
Tenha em atenção que cada alteração de tráfego requer a execução de outro terraform apply
.
Aplique as alterações introduzindo terraform apply
.
Remova uma etiqueta
Para remover uma etiqueta de uma revisão:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Selecione um serviço na lista de serviços.
Navegue até à secção Revisões no serviço pretendido e selecione a revisão para a qual quer remover a etiqueta existente.
Passe o cursor do rato sobre a coluna URLs de revisão (etiquetas) e clique no ícone de lápis:
No menu de diálogo URLs de revisão, clique no ícone Lixo para remover a etiqueta atual usada na sua revisão.
Clique em Guardar.
gcloud
Para remover uma etiqueta de revisão:
gcloud run services update-traffic SERVICE --remove-tags TAG_NAME
Substituir
- TAG_NAME com o nome da etiqueta para a qual está a migrar o tráfego
- SERVICE com o nome do serviço do qual está a remover a etiqueta
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
Faça as alterações de configuração desejadas ao serviço.
Abaixo do atributo
spec
, localize e remova o atributotag
para a revisão etiquetada:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW
Substitua o serviço pela respetiva nova configuração através do seguinte comando:
gcloud run services replace service.yaml
Terraform
Adicione o seguinte ao ficheiro .tf
:
Aplique as alterações introduzindo terraform apply
.
Migrar tráfego para uma revisão etiquetada
Depois de confirmar que a nova revisão funciona corretamente, pode começar a migrar tráfego para a mesma através da Google Cloud consola, da linha de comandos gcloud, do Terraform ou de um ficheiro YAML:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Localize o serviço na lista de serviços e clique no mesmo:
Selecione a revisão etiquetada para a qual quer enviar tráfego:
Clique em Gerir tráfego.
Localize o nome da revisão etiquetada: é apresentado, mas com uma percentagem de 0: atualmente, não está a publicar tráfego. No formulário Gerir tráfego*:
- Defina-o para a percentagem pretendida, por exemplo, 5. Tenha em atenção que a percentagem da versão publicada atualmente é reduzida automaticamente nesse mesmo valor.
- Clique em Guardar.
- Ao longo de um período de horas ou dias, conforme necessário, repita estes passos de Gestão de tráfego, mas com percentagens alteradas, aumentando a percentagem conforme necessário para a revisão etiquetada. Não precisa de voltar a implementar para alterar as percentagens de tráfego.
gcloud
Para migrar tráfego para uma etiqueta de revisão específica:
gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT
Substituir
- TAG_NAME com o nome da etiqueta para a qual está a migrar o tráfego
- TRAFFIC_PERCENT com a percentagem de tráfego que quer que a revisão etiquetada publique, por exemplo,
1
.
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
Faça as alterações de configuração escolhidas ao serviço.
Abaixo do atributo
spec
, localize e atualize o atributotraffic
para a revisão etiquetada, de modo que a revisão etiquetada apresente apenas uma pequena quantidade de tráfego:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMER
Tenha em atenção que as percentagens têm de totalizar 100. Substituir
- REVISION com o nome da revisão etiquetada.
- TAG_NAME com o nome da etiqueta que está a implementar gradualmente.
- PERCENT-NEW com a percentagem de tráfego que quer enviar para a revisão etiquetada. Por exemplo, use
10
para enviar 10% do tráfego para essa revisão. - REVISION-FORMER com o nome da revisão publicada atualmente.
- PERCENT-FORMER com a percentagem de tráfego que quer enviar para a revisão antiga
Substitua o serviço pela respetiva nova configuração através do seguinte comando:
gcloud run services replace service.yaml
Aguarde a conclusão da atualização: deve ver uma mensagem a indicar que a nova revisão que está a implementar gradualmente foi implementada e está a publicar o valor percentual de tráfego que usou.
Terraform
Adicione o seguinte ao ficheiro .tf
:
Ao longo de horas ou dias, conforme necessário, atualize gradualmente de uma etiqueta para a outra, aumentando a percentagem conforme necessário para a revisão etiquetada.
Aplique as alterações introduzindo terraform apply
após cada alteração.
O que se segue?
- Saiba como usar o Cloud Deploy para configurar um pipeline de fornecimento contínuo para implementação no Cloud Run.