Devolve respostas mais rápidas aos seus utilizadores em todo o mundo implementando serviços em várias regiões e encaminhando os seus utilizadores para a região mais próxima. A implementação em várias regiões oferece baixa latência e maior disponibilidade em caso de interrupções regionais.
Uma vez que os serviços do Cloud Run são implementados em regiões individuais, tem de implementar o seu serviço em várias regiões e, em seguida, configurar o balanceamento de carga global para o serviço.
Implemente o serviço em várias regiões
Pode implementar o mesmo serviço em várias regiões através de um dos seguintes métodos:
- Repita os passos para implementar numa única região.
- Implemente um serviço multirregional.
Implemente um serviço multirregião
Esta secção mostra como implementar e configurar um serviço de várias regiões a partir de um único comando da CLI gcloud ou de um ficheiro YAML.
gcloud
Para criar e implementar um serviço de várias regiões, execute o comando
gcloud beta run deploy
com a flag--regions
:gcloud beta run deploy
SERVICE_NAME
\ --image=IMAGE_URL
\ --regions=REGIONS
Substitua o seguinte:
SERVICE_NAME
: o nome do serviço multirregional que quer implementar.IMAGE_URL
: uma referência à imagem do contentor, por exemplo,us-docker.pkg.dev/cloudrun/container/hello:latest
.REGIONS
: a lista de várias regiões para as quais quer fazer a implementação. Por exemplo,europe-west1,asia-east1
.
YAML
Crie o ficheiro YAML para o seu serviço, usando o atributo
run.googleapis.com/regions
para definir as várias regiões nas quais quer implementar o seu serviço:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
spec: template: spec: containers: - image:IMAGE_URL
Substitua o seguinte:
SERVICE_NAME
: O nome do serviço multirregião para o qual quer implementar.REGIONS
: a lista de várias regiões que quer atualizar. Por exemplo,europe-west1,asia-east1
.IMAGE_URL
: uma referência à imagem do contentor, por exemplo,us-docker.pkg.dev/cloudrun/container/hello:latest
.
Crie o serviço com o seguinte comando:
gcloud beta run multi-region-services replace service.yaml
Atualize um serviço multirregião
Esta secção mostra como adicionar ou remover regiões de um serviço com várias regiões a partir de um único comando da CLI gcloud ou de um ficheiro YAML.
gcloud
Para adicionar ou remover regiões de um serviço multirregião, execute o comando
gcloud beta run multi-region-services update
.
Para adicionar o serviço multirregional a uma ou mais regiões adicionais, use a flag
--add-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --add-regions=REGIONS
Para remover o serviço multirregional de uma ou mais regiões, use a flag
--remove-regions
:gcloud beta run multi-region-services update
SERVICE_NAME
\ --remove-regions=REGIONS
Substitua o seguinte:
SERVICE_NAME
: o nome do serviço multirregional que quer atualizar.REGIONS
: a região ou as regiões às quais quer adicionar o seu serviço ou das quais quer remover o seu serviço. Por exemplo,europe-west1,asia-east1
.
YAML
Para atualizar um serviço multirregião existente, transfira a respetiva configuração YAML:
gcloud beta run multi-region-services describe SERVICE_NAME --format export > service.yaml
Atualize o atributo
run.googleapis.com/regions
para adicionar ou remover a lista de regiões para as quais quer implementar o serviço:apiVersion: serving.knative.dev/v1 kind: Service metadata: name:
SERVICE_NAME
annotations: run.googleapis.com/launch-stage: BETA run.googleapis.com/regions:REGIONS
Substitua o seguinte:
SERVICE_NAME
: O nome do serviço multirregião para o qual quer implementar.REGIONS
: a nova lista de várias regiões para as quais quer implementar a revisão do serviço.
Atualize o serviço com o seguinte comando:
gcloud beta run multi-region-services replace service.yaml
Elimine um serviço multirregião
Para eliminar um serviço de várias regiões, execute o comando
gcloud beta run multi-region-services delete
:gcloud beta run multi-region-services delete
SERVICE_NAME
Substitua
SERVICE_NAME
pelo nome do serviço de várias regiões que quer eliminar.
Configure o balanceamento de carga global
Esta secção mostra como configurar um Application Load Balancer externo com um domínio protegido com um certificado TLS gerido que aponta para um endereço IP anycast global, que encaminha os utilizadores para o centro de dados da Google mais próximo que implementa o seu serviço.
A arquitetura descrita nas secções seguintes não encaminha automaticamente os pedidos para uma região diferente quando um serviço do Cloud Run regional deixa de responder ou devolve erros. Para aumentar a disponibilidade do seu serviço multirregional, pode configurar a deteção de valores atípicos para identificar serviços do Cloud Run não íntegros com base na respetiva taxa de erros HTTP e desviar alguns pedidos para outra região.
Crie um balanceador de carga
A criação de um Application Load Balancer externo envolve a criação de vários recursos de rede e a respetiva ligação:
CLI gcloud
- Reserve um endereço IP estático para não ter de atualizar os registos de DNS
quando recriar o balanceador de carga.
No comando acima, substitua SERVICE_IP por um nome para o recurso de endereço IP (por exemplo,gcloud compute addresses create --global SERVICE_IP
myservice-ip
).Este endereço IP é um endereço IPv4 anycast global que encaminha para o centro de dados ou o ponto de presença da Google mais próximo dos seus visitantes.
-
Crie um serviço de back-end.
gcloud compute backend-services create --global BACKEND_NAME
No comando acima, substitua BACKEND_NAME por um nome que quer atribuir ao serviço de back-end (por exemplo,
myservice-backend
). - Crie um mapa de URLs.
gcloud compute url-maps create URLMAP_NAME --default-service=BACKEND_NAME
Substitua URLMAP_NAME por um nome que quer dar ao mapa de URLs (por exemplo,
myservice-urlmap
). - Crie um certificado TLS gerido para o seu domínio para apresentar tráfego HTTPS. (Substitua example.com pelo nome do seu domínio.)
gcloud compute ssl-certificates create CERT_NAME \ --domains=example.com
Substitua CERT_NAME pelo nome que quer que o certificado SSL gerido tenha (por exemplo,
myservice-cert
). - Crie um proxy HTTPS de destino.
gcloud compute target-https-proxies create HTTPS_PROXY_NAME \ --ssl-certificates=CERT_NAME \ --url-map=URLMAP_NAME
Substitua HTTPS_PROXY_NAME pelo nome que quer dar ao proxy HTTPS de destino (por exemplo,
myservice-https
). - Crie uma regra de encaminhamento que associe os recursos de rede que criou ao endereço IP.
gcloud compute forwarding-rules create --global FORWARDING_RULE_NAME \ --target-https-proxy=HTTPS_PROXY_NAME \ --address=SERVICE_IP \ --ports=443
Substitua FORWARDING_RULE_NAME pelo nome do recurso da regra de encaminhamento que quer criar (por exemplo,
myservice-lb
).
Terraform
Em alternativa aos passos descritos nesta secção, pode usar o módulo Terraform do balanceador de carga HTTP global.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
-
Configure o endereço IP:
Configura o nome do recurso do endereço IP como
myservice-service-ip
. Pode alterar este valor para o seu próprio valor. Este endereço IP é um endereço IPv4 anycast global que encaminha para o centro de dados ou o ponto de presença da Google mais próximo dos seus visitantes. -
Crie e configure o serviço de back-end:
Este recurso configura o serviço de back-end para ter o nome
myservice-backend
. Pode alterar este valor para o seu próprio valor. -
Configure o mapa de URLs:
Associa o recurso do serviço de back-end (
myservice-backend
) ao novo recurso do mapa de URLs (myservice-lb-urlmap
). Pode alterar estes valores para os seus próprios valores. -
Crie um certificado TLS gerido para o seu domínio para apresentar tráfego HTTPS. Substitua
example.com
pelo nome do seu domínio no recursogoogle_compute_managed_ssl_certificate
: -
Configure o proxy HTTPS:
Cria um recurso
google_compute_target_https_proxy
com o nome de destinomyservice-https-proxy
e associa o certificado TLS (myservice-ssl-cert
) e os recursos de mapeamento de URLs (myservice-lb-urlmap
) criados anteriormente. Pode alterar estes valores para os seus próprios valores. -
Configure a regra de encaminhamento:
Cria o recurso
google_compute_global_forwarding_rule
com o nome de destinomyservice-https-proxy
e associa o destino do proxy HTTPS criado anteriormente (myservice-https-proxy
) e o recurso de endereço IP (myservice-service-ip
). Pode alterar estes valores para os seus próprios valores. -
Aplicar esta configuração:
Para aplicar a configuração do Terraform num Google Cloud projeto, conclua os passos nas secções seguintes.
Prepare o Cloud Shell
- Inicie o Cloud Shell.
-
Defina o Google Cloud projeto predefinido onde quer aplicar as suas configurações do Terraform.
Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
As variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz).
-
No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório. O nome do ficheiro tem de ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o ficheiro é denominadomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se estiver a seguir um tutorial, pode copiar o código de exemplo em cada secção ou passo.
Copie o exemplo de código para o ficheiro
main.tf
criado recentemente.Opcionalmente, copie o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
- Reveja e modifique os parâmetros de exemplo para aplicar ao seu ambiente.
- Guarde as alterações.
-
Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade
:terraform init -upgrade
Aplique as alterações
-
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou
atualizar correspondem às suas expetativas:
terraform plan
Faça as correções necessárias à configuração.
-
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yes
no comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
- Abra o seu Google Cloud projeto para ver os resultados. Na Google Cloud consola, navegue para os seus recursos na IU para se certificar de que o Terraform os criou ou atualizou.
Configure grupos de pontos finais de rede regionais
Para cada região na qual fez a implementação no passo anterior, tem de criar grupos de pontos finais de rede (NEGs) sem servidor e adicioná-los ao serviço de back-end através das seguintes instruções:
CLI gcloud
-
Crie um grupo de pontos finais de rede para o serviço do Cloud Run em
REGION
:gcloud compute network-endpoint-groups create NEG_NAME \ --region=REGION \ --network-endpoint-type=SERVERLESS \ --cloud-run-service=SERVICE_NAME
Substitua o seguinte:
- NEG_NAME com o nome do recurso do grupo de pontos finais de rede. (por exemplo, `myservice-neg-uscentral1`)
- REGION com a região na qual o seu serviço está implementado.
- SERVICE_NAME com o nome do seu serviço.
-
Adicione o grupo de pontos finais de rede ao serviço de back-end:
gcloud compute backend-services add-backend --global BACKEND_NAME \ --network-endpoint-group-region=REGION \ --network-endpoint-group=NEG_NAME
Especifique o NEG_NAME que criou no passo anterior para a região.
-
Repita os passos anteriores para cada região.
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
-
Configure um grupo de pontos finais de rede com o nome
myservice-neg
para o serviço do Cloud Run para cada região especificada na variávelrun_regions
: -
Configure um serviço de back-end para anexar o grupo de pontos finais da rede (
myservice-neg
):
Configure os registos DNS no seu domínio
Para direcionar o seu nome de domínio para a regra de encaminhamento que criou, atualize os respetivos registos de DNS com o endereço IP que criou.
Encontre o endereço IP reservado do balanceador de carga executando o seguinte comando:
gcloud compute addresses describe SERVICE_IP \ --global \ --format='value(address)'
Substitua SERVICE_IP pelo nome do endereço IP que criou anteriormente. Este comando imprime o endereço IP no resultado.
Atualize os registos de DNS do seu domínio adicionando um registo
A
com este endereço IP.
Configure o público-alvo personalizado se usar serviços autenticados
Os serviços autenticados estão protegidos pela IAM. Estes serviços do Cloud Run requerem autenticação do cliente que declara o destinatário pretendido de um pedido no momento da geração de credenciais (o público-alvo).
O público-alvo é normalmente o URL completo do serviço de destino, que, por predefinição, para os serviços do Cloud Run, é um URL gerado que termina em run.app
. No entanto, numa implementação em várias regiões, um cliente não pode saber antecipadamente para que serviço regional um pedido vai ser encaminhado.
Assim, para uma implementação em várias regiões, configure o seu serviço para usar públicos-alvo personalizados.
Aguarde o aprovisionamento do balanceador de carga
Depois de configurar o domínio com o endereço IP do equilibrador de carga, aguarde que os registos de DNS sejam propagados. Da mesma forma, aguarde que o certificado TLS gerido seja emitido para o seu domínio e esteja pronto para começar a publicar tráfego HTTPS a nível global.
O balanceador de carga pode demorar até 30 minutos a começar a publicar tráfego.
Quando estiver pronto, visite o URL do seu Website com o prefixo https://
para o experimentar.
Validar estado
Para verificar o estado da propagação do seu registo DNS, use a
dig
utilidade de linha de comandos:dig A +short example.com
O resultado mostra o endereço IP que configurou nos seus registos DNS.
Verifique o estado da emissão do certificado gerido executando o seguinte comando:
gcloud compute ssl-certificates describe CERT_NAME
Substitua CERT_NAME pelo nome que escolheu anteriormente para o recurso de certificado SSL.
O resultado mostra uma linha que contém
status: ACTIVE
.
Configure o redirecionamento de HTTP para HTTPS
Por predefinição, uma regra de encaminhamento processa apenas um protocolo e, por isso, os pedidos aos seus pontos finais http://
respondem com "404 Not Found". Se precisar que os pedidos aos seus http://
URLs sejam redirecionados para o https://
protocolo, crie um mapa de URLs adicional e uma regra de encaminhamento com as seguintes instruções:
CLI gcloud
-
Crie um mapa de URLs com uma regra de redirecionamento.
gcloud compute url-maps import HTTP_URLMAP_NAME \ --global \ --source /dev/stdin <<EOF name: HTTP_URLMAP_NAME defaultUrlRedirect: redirectResponseCode: MOVED_PERMANENTLY_DEFAULT httpsRedirect: True EOF
Substitua HTTP_URLMAP_NAME pelo nome do recurso do mapa de URLs que vai criar (por exemplo,
myservice-httpredirect
). -
Crie um proxy HTTP de destino com o mapa de URLs.
gcloud compute target-http-proxies create HTTP_PROXY_NAME \ --url-map=HTTP_URLMAP_NAME
Substitua HTTP_PROXY_NAME pelo nome do proxy HTTP de destino que vai criar (por exemplo,
myservice-http
). -
Crie uma regra de encaminhamento na porta
80
com o mesmo endereço IP reservado.gcloud compute forwarding-rules create --global HTTP_FORWARDING_RULE_NAME \ --target-http-proxy=HTTP_PROXY_NAME \ --address=SERVICE_IP \ --ports=80
Substitua HTTP_FORWARDING_RULE_NAME pelo nome da nova regra de encaminhamento que vai criar (por exemplo,
myservice-httplb
).
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
-
Crie um recurso de mapa de URLs com uma regra de redirecionamento:
-
Crie um proxy HTTP de destino com o recurso de mapa de URLs recém-criado (
myservice-https-urlmap
): -
Crie uma regra de encaminhamento na porta
80
com o mesmo recurso de endereço IP reservado (myservice-http-proxy
):
Use subscrições push do Pub/Sub autenticadas com implementação em várias regiões
Por predefinição, um serviço Pub/Sub envia mensagens para pontos finais push na mesma Google Cloud região onde o serviço Pub/Sub armazena as mensagens. Para uma solução alternativa a este comportamento, consulte o artigo Usar uma subscrição push do Pub/Sub autenticada com uma implementação do Cloud Run em várias regiões.
Configure uma comutação por falha manual
Para configurar manualmente o tráfego para fazer failover para uma região em bom estado, modifique o mapa de URLs do balanceador de carga de aplicações externo global.
Para atualizar o mapa de URLs do Application Load Balancer externo global, remova o NEG do serviço de back-end com a flag
--global
:gcloud compute backend-services remove-backend
BACKEND_NAME
\ --network-endpoint-group=NEG_NAME
\ --network-endpoint-group-region=REGION
\ --globalSubstitua o seguinte:
BACKEND_NAME
: o nome do serviço de back-end.NEG_NAME
: o nome do recurso do grupo de pontos finais da rede, por exemplo,myservice-neg-uscentral1
.REGION
: a região onde o NEG foi criado e da qual quer remover o seu serviço. Por exemplo,europe-west1,asia-east1
.
Para confirmar que uma região em bom estado está agora a publicar tráfego, navegue para https://
<domain-name>
.