Como configurar o Cloud CDN com o Cloud Run, Cloud Functions ou App Engine

Esta página mostra como criar um balanceador de carga HTTP(S) externo para encaminhar solicitações para back-ends sem servidor. Aqui, o termo sem servidor refere-se aos seguintes produtos de computação sem servidor: App Engine, Cloud Functions e Cloud Run.

Os NEGs sem servidor permitem usar aplicativos sem servidor do Google Cloud com balanceamento de carga HTTP(S) externo. Depois de configurar um balanceador de carga com o back-end NEG sem servidor, as solicitações para o balanceador de carga são roteadas para o back-end do aplicativo sem servidor.

Se quiser saber mais sobre NEGs sem servidor, leia a visão geral de NEGs sem servidor.

Antes de começar

  1. Implante um serviço do App Engine, do Cloud Functions ou do Cloud Run.
  2. Instale o SDK do Google Cloud, caso ainda não tenha feito isso.
  3. Configurar permissões.
  4. Adicione um recurso de certificado SSL.

Implantar um serviço do App Engine, do Cloud Functions ou do Cloud Run

As instruções nesta página pressupõem que você já tenha um serviço do Cloud Run, do Cloud Functions ou do App Engine em execução.

No exemplo desta página, usamos o guia de início rápido do Cloud Run em Python para implantar um serviço do Cloud Run na região us-central1. O restante desta página mostra como configurar um balanceador de carga HTTP(S) externo que usa um back-end NEG sem servidor para encaminhar solicitações para este serviço.

Se você ainda não implantou um aplicativo sem servidor ou se quiser testar um NEG sem servidor com um aplicativo de amostra, use um dos guias de início rápido a seguir. É possível criar um aplicativo sem servidor em qualquer região, mas você precisa usar a mesma região posteriormente para criar o NEG e o balanceador de carga sem servidor.

Cloud Run

Para criar um aplicativo Hello World simples, empacotá-lo em uma imagem de contêiner e implantá-la no Cloud Run, consulte o Guia de início rápido: criar e implantar.

Se você já tiver feito upload de um contêiner de amostra para o Container Registry, consulte Guia de início rápido: implantar um contêiner de amostra predefinido.

Cloud Functions

Consulte Guia de início rápido do Cloud Functions: Python.

App Engine

Consulte os seguintes guias de início rápido do App Engine para Python 3:

Instalar o Google Cloud SDK

Instale a ferramenta de linha de comando gcloud. Consulte Visão geral do gcloud para ver informações conceituais e de instalação sobre a ferramenta.

Caso ainda não tenha usado a ferramenta de linha de comando gcloud, primeiro execute gcloud init para iniciar o diretório do gcloud.

Configurar permissões

Para seguir este guia, você precisa criar um NEG sem servidor e um balanceador de carga HTTP(S) externo em um projeto. É necessário ser proprietário ou editor de um projeto ou ter os seguintes papéis de IAM do Compute Engine:

Tarefa Papel necessário
Criar balanceador de carga e componentes de rede Administrador de rede
Criar e modificar NEGs Administrador da instância do Compute
Criar e modificar certificados SSL Administrador de segurança

Como reservar um endereço IP externo

Agora que seus serviços estão funcionando, configure um endereço IP externo, estático e global que seus clientes possam usar para alcançar seu balanceador de carga.

Console

  1. Acesse a página "Endereços IP externos" no Console do Google Cloud.
    Acessar a página "Endereços IP externos"
  2. Clique em Reservar endereço estático para reservar um endereço IPv4.
  3. Atribua um Nome de example-ip.
  4. Defina o Nível da rede como Premium.
  5. Defina Versão IP como IPv4.
  6. Defina Tipo como Global.
  7. Clique em Reservar.

gcloud

gcloud compute addresses create example-ip \
    --ip-version=IPV4 \
    --global

Anote o endereço IPv4 que foi reservado:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Como criar um recurso de certificado SSL

Para criar um balanceador de carga HTTPS, é necessário adicionar um recurso de certificado SSL ao front-end do balanceador de carga. Crie um recurso de certificado SSL usando um certificado SSL gerenciado pelo Google ou um certificado SSL autogerenciado.

  • Certificados gerenciados pelo Google. O uso de certificados gerenciados pelo Google é recomendado porque o Google Cloud recebe, gerencia e renova esses certificados automaticamente. Para criar um certificado gerenciado pelo Google, você precisa ter um domínio e os registros DNS desse domínio para que o certificado seja provisionado. Se você ainda não tiver um domínio, será possível conseguir um no Google Domains. Além disso, você precisará atualizar o registro DNS A do domínio para apontar para o endereço IP do balanceador de carga criado na etapa anterior (example-ip). Para instruções detalhadas, consulte Como usar certificados gerenciados pelo Google.

  • Certificados autoassinados. Se você não quiser configurar um domínio agora, use um certificado SSL autoassinado para o teste.

Este exemplo pressupõe que você já criou um recurso de certificado SSL.

Se você quiser testar esse processo sem criar um recurso de certificado SSL (ou um domínio conforme exigido pelos certificados gerenciados pelo Google), ainda será possível usar as instruções nesta página para configurar uma carga HTTP.

Como criar o balanceador de carga HTTP(S) externo

No diagrama a seguir, o balanceador de carga usa um back-end NEG sem servidor para direcionar solicitações para um serviço do Cloud Run sem servidor. Neste exemplo, usamos o guia de início rápido do Cloud Run Python para implantar um serviço do Cloud Run.

Balanceamento de carga HTTPS para um aplicativo do Cloud Run (clique para ampliar)
Balanceamento de carga HTTPS para um aplicativo do Cloud Run

Como as verificações de integridade não são compatíveis com serviços de back-end com back-ends de NEG sem servidor, você não precisa criar uma regra de firewall que permita verificações de integridade se o balanceador de carga tiver apenas back-ends de NEG sem servidor.

Console

Como nomear o balanceador de carga

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  3. Em Somente voltado para a Internet ou interno, selecione Da Internet para minhas VMs.
  4. Clique em Continuar.
  5. Em Nome do balanceador de carga, digite serverless-lb.
  6. Mantenha a janela aberta para continuar.

Como configurar os serviços de back-end

  1. Clique em Configuração de back-end.
  2. No menu suspenso Criar ou selecionar um serviço de back-end, mantenha o ponteiro do mouse sobre Serviços de back-end e selecione Criar um serviço de back-end.
  3. Digite um Nome.
  4. Em Tipo de back-end, selecione Grupo de endpoints de rede sem servidor.
  5. Deixe o Protocolo inalterado. Este parâmetro é ignorado.
  6. Em Back-ends, na janela Novo back-end, selecione Criar grupo de endpoints de rede sem servidor.
  7. Digite um Nome.
  8. Em Região, selecione us-central1. Em seguida, selecione Cloud Run.
  9. Selecione Selecionar nome do serviço.
  10. Na lista suspensa Serviço, selecione o serviço do Cloud Run para o qual você quer criar um balanceador de carga.
  11. Clique em Criar.
  12. Na janela Novo back-end, clique em Concluído.
  13. Selecione Ativar Cloud CDN. Mantenha as configurações padrão do modo de cache e TTL.
  14. Clique em Criar.

Como configurar regras de host e correspondentes de caminho

As regras de host e os correspondentes de caminho são componentes de configuração do Mapa de URLs de um balanceador de carga de HTTP(S) externo.

  1. Clique em Regras de host e caminho.
  2. Mantenha os hosts e caminhos padrão. Neste exemplo, todas as solicitações vão para o serviço de back-end criado na etapa anterior.

Como configurar o front-end

  1. Clique em Configuração de front-end.
  2. Digite um Nome.
  3. Para criar um balanceador de carga HTTPS, é necessário ter um Certificado SSL (gcloud compute ssl-certificates list). Recomendamos o uso de um certificado gerenciado pelo Google, conforme descrito anteriormente. Para configurar um balanceador de carga HTTP(S) externo, preencha os campos como a seguir.

    Verifique se as seguintes opções estão configuradas com estes valores:

    Propriedade Valor: digite um valor ou selecione uma opção conforme especificado
    Protocolo HTTPS
    Nível de serviço da rede Premium
    Versão IP IPv4
    Endereço IP example-ip
    Porta 443
    Certificado Selecione um certificado SSL existente ou crie um novo.

    Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy HTTPS. É possível criar um recurso de certificado SSL usando um certificado SSL gerenciado pelo Google ou um certificado SSL autogerenciado.
    Para criar um certificado gerenciado pelo Google, você precisa ter um domínio. O registro A do domínio precisa ser resolvido para o endereço IP do balanceador de carga (neste exemplo, example-ip). É recomendável usar certificados gerenciados pelo Google porque o Google Cloud recebe, gerencia e renova esses certificados automaticamente. Se você não tiver um domínio, poderá usar um certificado SSL autoassinado para testes.

  4. Clique em Concluído.

Como verificar a configuração

  1. Clique em Analisar e finalizar.
  2. Verifique o back-end, as Regras de host e caminho e o front-end.
  3. Clique em Criar.
  4. Aguarde o balanceador de carga ser criado.
  5. Clique no nome do balanceador de carga (serverless-lb).
  6. Anote o endereço IP do balanceador de carga para a próxima tarefa. Ele é referenciado como IP_ADDRESS.

gcloud

  1. Crie um NEG sem servidor para seu aplicativo sem servidor. Para criar um NEG sem servidor com um serviço do Cloud Run:

    gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
        --region=us-central1 \
        --network-endpoint-type=serverless  \
        --cloud-run-service=CLOUD_RUN_SERVICE_NAME
    
    Para mais opções, consulte o guia de referência gcloud para gcloud compute network-endpoint-groups create.
  2. Crie um serviço de back-end.
    gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --global \
        --enable-cdn \
        --cache-mode=CACHE_MODE \
        --custom-response-header='Cache-Status: {cdn_cache_status}' \
        --custom-response-header='Cache-ID: {cdn_cache_id}'
    

    Substitua CACHE_MODE por um dos seguintes:

    • CACHE_All_STATIC (padrão): armazena automaticamente o conteúdo estático em cache. As respostas marcadas como não armazenáveis em cache (as diretivas private, no-store ou no-cache nos cabeçalhos de resposta Cache-Control) não são armazenadas. Para armazenar conteúdo dinâmico em cache, o conteúdo precisa ter cabeçalhos de cache válidos. Esse é o comportamento padrão para todos os back-ends novos ativados do Cloud CDN.

    • USE_ORIGIN_HEADERS: exige a origem para definir cabeçalhos de cache válidos a fim de armazenar conteúdo em cache. As respostas sem esses cabeçalhos não são armazenadas em cache na borda do Google e exigem uma viagem completa à origem em todas as solicitações, o que pode afetar o desempenho e aumentar a carga no servidor de origem. Esse é o comportamento padrão para todos os back-ends existentes ativados do Cloud CDN.

    • FORCE_CACHE_ALL: armazena em cache todo o conteúdo, ignorando todas as diretivas private, no-store ou no-cache em cabeçalhos de resposta Cache-Control. Isso pode resultar no armazenamento em cache de conteúdo particular por usuário (identificação de usuários). Ative a função somente em back-ends que não exibem conteúdo particular ou dinâmico, como buckets do Cloud Storage.

    Para informações sobre as diretivas de cache que o Cloud CDN entende e o que não é armazenado em cache pelo Cloud CDN, consulte Conteúdo armazenável em cache e Conteúdo não armazenável em cache.

  3. Adicione o NEG sem servidor como um back-end ao serviço de back-end:

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
        --global \
        --network-endpoint-group=SERVERLESS_NEG_NAME \
        --network-endpoint-group-region=us-central1
    
  4. Crie um mapa de URL para encaminhar solicitações recebidas para o serviço de back-end:
    gcloud compute url-maps create URL_MAP_NAME \
        --default-service BACKEND_SERVICE_NAME
    

    Este mapa de URL de exemplo segmenta apenas um serviço de back-end que representa um único aplicativo sem servidor. Portanto, não é necessário configurar regras de host ou correspondências de caminho. Se você tiver mais de um serviço de back-end, poderá usar regras de host para direcionar solicitações para serviços diferentes com base no nome do host e configurar correspondências de caminho para direcionar solicitações para serviços diferentes com base no caminho da solicitação.

  5. Para criar um balanceador de carga HTTPS, você precisa ter um recurso de certificado SSL para usar no proxy HTTPS de destino. É possível criar um recurso de certificado SSL usando um certificado SSL gerenciado pelo Google ou um certificado SSL autogerenciado. O uso de certificados gerenciados pelo Google é recomendado porque o Google Cloud recebe, gerencia e renova esses certificados automaticamente.

    Para criar um certificado gerenciado pelo Google, você precisa ter um domínio. Se você não tiver um domínio, poderá usar um certificado SSL autoassinado para testes.

    Para criar um recurso de certificado SSL gerenciado pelo Google:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --domains DOMAIN
    

    Para criar um recurso de certificado SSL autogerenciado:

    gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
        --certificate CRT_FILE_PATH \
        --private-key KEY_FILE_PATH
    

  6. Crie um proxy de destino HTTP(S) para encaminhar solicitações ao mapa de URL.

    Para um balanceador de carga HTTPS, crie um proxy de destino HTTPS. O proxy é a parte do balanceador de carga onde é armazenado o certificado SSL para balanceamento de carga HTTPS. Portanto, nesta etapa, também é possível carregar o certificado.

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
        --ssl-certificates=SSL_CERTIFICATE_NAME \
        --url-map=URL_MAP_NAME
    

  7. Crie uma regra de encaminhamento global para encaminhar as solicitações recebidas para o proxy.

    Para um balanceador de carga HTTPS:

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
        --address=example-ip \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

Como atualizar os registros DNS do seu domínio para usar o endereço IP do balanceador de carga

Se você ainda não fez isso, atualize o registro DNS A ou AAAA do seu domínio para que aponte para o endereço IP do balanceador de carga, de modo que o tráfego enviado para as URLs de domínio personalizadas existentes seja roteado por meio do balanceador de carga.

Por exemplo, se você tiver um domínio personalizado de example.com e todos os seus serviços forem mapeados para esse domínio, atualize o registro DNS A ou AAAA para que example.com aponte para o endereço IP do balanceador de carga.

Antes de atualizar os registros DNS, teste a configuração localmente forçando a resolução de DNS local do domínio personalizado para o endereço IP do balanceador de carga. Para testar localmente, modifique o arquivo /etc/hosts/ na máquina local para apontar example.com para o endereço IP do balanceador de carga ou use a sinalização curl --resolve para forçar curl a usar o IP do balanceador de carga para a solicitação.

Quando o registro DNS de example.com é resolvido para o endereço IP do balanceador de carga HTTPS, as solicitações enviadas para example.com começam a ser roteadas por meio do balanceador de carga. O balanceador de carga os envia ao serviço de back-end relevante de acordo com o mapa de URL. Além disso, se o serviço de back-end estiver configurado com uma máscara de URL, o NEG sem servidor usará a máscara para encaminhar a solicitação para o serviço apropriado do Cloud Run, do Cloud Functions ou do App Engine.

Se você usa certificados gerenciados pelo Google, a migração de um serviço existente para um balanceador de carga HTTP(S) externo pode gerar inatividade, geralmente menos de uma hora. Isso ocorre porque o certificado SSL do balanceador de carga HTTP(S) externo não será provisionado até que você atualize os registros DNS para apontar para o endereço IP do balanceador de carga.

Como testar o balanceador de carga

Agora que você configurou o balanceador de carga, é possível começar a enviar tráfego para o endereço IP dele. Se você tiver configurado um domínio, também será possível enviar tráfego para o nome do domínio. No entanto, a propagação de DNS pode levar algum tempo para ser concluída. Portanto, é possível começar usando o endereço IP para o teste.

  1. Acesse a página "Balanceamento de carga" no Console do Google Cloud.
    Acessar a página "Balanceamento de carga"
  2. Clique no balanceador de carga que você acabou de criar.
  3. Anote o Endereço IP do balanceador de carga.
  4. Para um balanceador de carga HTTPS, é possível testar seu balanceador de carga usando um navegador da Web acessando https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você será direcionado para a página inicial do serviço helloworld.

    Se isso não funcionar e você estiver usando um certificado gerenciado pelo Google, confirme se o status do recurso do certificado é "ATIVO". Para mais informações, consulte Status do recurso de certificado SSL gerenciado pelo Google.

    Caso você tenha usado um certificado autoassinado durante o teste, o navegador exibirá um aviso. Você precisa permitir que o navegador aceite um certificado autoassinado. Clique no aviso para ver a página real.

  5. Para verificar as respostas do cache, use o curl na linha de comando da sua máquina local. Substitua IP_ADDRESS pelo endereço IPv4 do balanceador de carga:

    curl -v -o/dev/null https://IP_ADDRESS
    

    Se você estiver usando um certificado gerenciado pelo Google, teste o domínio que aponta para o endereço IP do balanceador de carga. Exemplo:

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    Se você estiver usando um certificado autoassinado, também precisará especificar a sinalização -k. A opção curl -k permite que o curl funcione se você tiver um certificado autoassinado. Use o parâmetro -k somente para testar seu próprio site. Em circunstâncias normais, um certificado válido é uma medida de segurança importante. Não ignore os avisos de certificados.

    A saída precisa conter os cabeçalhos personalizados Cache-ID e Cache-Status que você configurou para indicar se a resposta foi veiculada a partir do cache:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    A saída contém os cabeçalhos de resposta que indicam que houve uma ocorrência em cache, o que significa que o recurso estático no app sem servidor foi veiculado ao usuário de um cache de ponta do Cloud CDN.

    O cabeçalho cache-status informa o valor disabled para as respostas que não são armazenadas em cache no Cloud CDN. Para respostas em cache, o valor do cabeçalho cache-status é hit, miss ou revalidated.

Como desativar a Cloud CDN

Console

Desative o Cloud CDN para um único serviço de back-end

  1. No Console do Google Cloud, acesse a página do Cloud CDN.

    Acessar a página do Cloud CDN

  2. No lado direito da linha de origem, clique emMenu e selecione Editar.
  3. Desmarque as caixas de seleção dos serviços de back-end que você não quer mais que usem o Cloud CDN.
  4. Clique em Atualizar.

Remova o Cloud CDN de todos os serviços de back-end de uma origem

  1. No Console do Cloud, acesse a página do Cloud CDN.

    Acessar a página do Cloud CDN

  2. No lado direito da linha de origem, clique em Menu e selecione Remover.
  3. Para confirmar, clique em Remover.

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

A desativação da Cloud CDN não invalida ou limpa os caches. Se desativá-la e ativá-la de novo, a maior parte do seu conteúdo em cache talvez ainda esteja armazenada. Para impedir que o conteúdo seja usado pelos caches, é necessário invalidar esse conteúdo.

A seguir