Configure o repositório de objetos de terceiros

É possível usar um back-end externo quando o conteúdo está hospedado no local ou em outra nuvem. O back-end externo permite exibir o conteúdo do Cloud CDN do Google.

Neste documento, você verá o processo de configuração do repositório de objetos de terceiros, como o Amazon Simple Storage Service (Amazon S3) ou o Armazenamento de Blobs do Azure, como um back-end externo para o Cloud CDN. Os back-ends externos e o Cloud CDN trabalham com um balanceador de carga de aplicativo externo.

Arquitetura

Para criar o back-end externo, crie um grupo de endpoints de rede (NEG) da Internet que aponte para o serviço de armazenamento de terceiros como o back-end do balanceador de carga. Os NEGs da Internet são usados para back-ends externos.

Para configurar o bucket de armazenamento de terceiros como um back-end, faça o seguinte:

  1. Prepare o bucket de armazenamento de terceiros para disponibilizar conteúdo.
  2. Crie um NEG da Internet que use o nome de domínio totalmente qualificado (FQDN, na sigla em inglês) do bucket.
  3. Configure o balanceador de carga de aplicativo externo com o NEG da Internet como back-end.
  4. Teste a configuração.

Preparar o bucket para disponibilizar conteúdo

Antes de iniciar a configuração no Google Cloud, verifique se o bucket está configurado corretamente. Essas instruções presumem que você esteja usando um bucket do Amazon S3 e tenha as permissões necessárias para fazer alterações no bucket e nos objetos do Amazon S3.

  1. Verifique se o bucket do Amazon S3 e os objetos do bucket são públicos ou se você configurou autenticação de origem particular para o bucket do Amazon S3.

  2. Verifique se o conteúdo atende aos requisitos de armazenamento em cache, listados em Conteúdo armazenável em cache. Se você precisar adicionar metadados de objetos, consulte a base de conhecimento da AWS. Por exemplo, Como editar metadados de objetos.

  3. Você vai precisar do endpoint do bucket do Amazon S3 (o FQDN) ao configurar o NEG da Internet. Para receber as informações do endpoint, siga as instruções fornecidas na base de conhecimento da AWS. Por exemplo, Como acessar um bucket. Também é possível conseguir o URL do endpoint do Amazon S3 na página de visão geral do objeto.

Criar um NEG da Internet que use o nome do host do bucket

Para simplificar, este exemplo usa o FQDN backend.example.com. Substitua-o pelo FQDN do bucket de armazenamento de terceiros, que pode ser algo como http://unique-name-bucket.s3-us-west-1.amazonaws.com/.

Este guia usa um exemplo para descrever os fundamentos do uso de um back-end externo (às vezes chamado origem personalizada) em um balanceador de carga de aplicativo externo. Um back-end externo é um endpoint externo ao Google Cloud. Ao usar um back-end externo com um balanceador de carga de aplicativo externo, é possível melhorar o desempenho usando o armazenamento em cache do Cloud CDN.

O guia descreve como configurar um balanceador de carga de aplicativo externo global com um serviço de back-end ativado para o Cloud CDN que envia proxies a um servidor de back-end externo em backend.example.com.

No exemplo, o balanceador de carga aceita solicitações HTTPS de clientes e envia essas solicitações por proxy como HTTPS para o back-end externo. Neste exemplo, presumimos que o back-end externo é compatível com HTTPS.

Outras opções seriam configurar um balanceador de carga para aceitar solicitações HTTP ou HTTPS e usar HTTPS ao enviar solicitações por proxy para o back-end externo.

Neste, guia, presumimos que você já tenha configurado um balanceador de carga e esteja adicionando um novo back-end externo. Para mais informações, consulte Configurar um balanceador de carga de aplicativo clássico com um back-end de grupo gerenciado de instâncias.

A Figura 1 mostra um exemplo de arquitetura.

Figura 1. Caso de uso de bucket do S3 para back-ends externos.
Figura 1. Caso de uso de bucket do S3 para back-ends externos.

No diagrama, www.example.com tem um front-end do balanceador de carga com o endereço IP 120.1.1.1. Quando há uma ausência no cache, as solicitações do usuário para /cart/id/1223515 são encontradas no back-end externo por HTTPS. Todos o resto do tráfego de entrada é direcionado para o serviço de back-end do Google Cloud com VMs do Compute Engine ou para o bucket de back-end, com base no mapa de URL.

Antes de começar

Antes de seguir as instruções deste guia, familiarize-se com o seguinte:

Permissões

Para seguir este guia, é preciso criar um grupo de endpoints de rede (NEG, na sigla em inglês) da Internet e criar ou modificar um balanceador de carga de aplicativo externo em um projeto. É necessário ser proprietário ou editor de um projeto ou ter os papéis de IAM do Compute Engine a seguir.

Tarefa Papel necessário
Criar e modificar componentes do balanceador de carga Administrador de rede
Criar e modificar NEGs Admin da instância do Compute

Configurar um balanceador de carga com um back-end externo

Este guia mostra como configurar e testar um NEG da Internet.

Visão geral da configuração

A configuração de um NEG da Internet envolve o seguinte:

  • Definindo o endpoint na Internet em uma NEG na Internet.
  • Adicionar um NEG da Internet como back-end para um serviço de back-end.
  • Para definir o tráfego de usuários a ser mapeado para esse serviço de back-end, configure o mapa de URLs do seu balanceador de carga de aplicativo externo.
  • Adicionar os intervalos de IP necessários à lista de permissões

Neste exemplo, criamos os seguintes recursos:

  • Uma regra de encaminhamento com o endereço IP 120.1.1.1 direciona solicitações recebidas para um proxy de destino.
    • O networkTier da regra de encaminhamento precisa ser PREMIUM.
  • O proxy de destino verifica cada solicitação em um mapa de URL para determinar o serviço de back-end apropriado para a solicitação.
    • Para back-ends externos, o proxy de destino precisa ser TargetHttpProxy ou TargetHttpsProxy. O exemplo usa TargetHttpsProxy.
  • O Cloud CDN ativado (opcional) no serviço de back-end permite o armazenamento em cache e a disponibilização de respostas dos caches do Cloud CDN.
  • Este exemplo inclui um cabeçalho personalizado, que é necessário quando o back-end externo espera um valor específico para o cabeçalho Host da solicitação HTTP.

A configuração é semelhante à seguinte.

Figura 2. Cloud CDN com um back-end do bucket do Amazon S3.
Figura 2. Cloud CDN com um back-end do bucket do Amazon S3.

Criar o NEG e o endpoint de Internet

Console

  1. No console do Google Cloud , acesse a página Grupos de endpoints de rede.

    Acessar grupos de endpoints de rede

  2. Clique em Criar grupo de endpoints de rede.
  3. Digite o Nome do grupo de endpoints de rede: example-fqdn-neg.
  4. Em Tipo de grupo de endpoints de rede, selecione Grupo de endpoints de rede (Internet).
  5. Em Porta padrão, insira 443.
  6. Para o Novo endpoint da rede, selecione Nome de domínio totalmente qualificado e porta.
  7. Para o FQDN, insira backend.example.com.
  8. Em Tipo de porta, selecione Padrão e verifique se Número da porta é 443.
  9. Clique em Criar.

gcloud

  1. Crie um NEG da Internet e defina o --network-endpoint-type como internet-fqdn-port (o nome do host e a porta em que o back-end externo pode ser alcançado):

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --network-endpoint-type="internet-fqdn-port" --global
    
  2. Adicione o endpoint ao NEG. Se uma porta não for especificada, o padrão de seleção da porta será 80 (HTTP) ou 443 (HTTPS; HTTP/2), dependendo do protocolo configurado no serviço de back-end. Certifique-se de incluir a sinalização --global:

    gcloud compute network-endpoint-groups update example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Listar o NEG na Internet criado:

    gcloud compute network-endpoint-groups list --global
    

    Saída:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. Liste o endpoint dentro do NEG:

    gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \
        --global
    

    Saída:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Adicionar um back-end externo a um balanceador de carga

O exemplo a seguir atualiza um balanceador de carga.

No balanceador de carga, o serviço padrão é um serviço do Google Cloud . O exemplo modifica o mapa de URLs existente adicionando um correspondente de caminho que envia todas as solicitações de cart/id/1223515 para o serviço de back-end images, que está associado ao NEG da Internet.

Console

Crie o serviço de back-end e adicione o NEG da Internet

  1. No console do Google Cloud , acesse a página Balanceamento de carga.

    Acesse Balanceamento de carga

  2. Para adicionar o serviço de back-end a um balanceador de carga, selecione o balanceador de carga de aplicativo clássico, clique em Menu e selecione Editar.
  3. Clique em Configuração de back-end.
  4. No menu Serviços de back-ends e buckets de back-end, selecione Criar um serviço de back-end.
  5. Defina o nome do serviço de back-end como images
  6. Para o tipo de back-end, selecione Grupo de endpoints da rede na Internet.
  7. Selecione o protocolo que você pretende usar no balanceador de carga para o NEG da Internet. Neste exemplo, selecione HTTPS.
  8. Em Novo back-end > Grupo de endpoints de rede da Internet, selecione example-fqdn-neg e clique em Concluído.
  9. Selecione Ativar Cloud CDN.
  10. Opcional: modifique as configurações do modo de cache e TTL.
  11. Em Configurações avançadas, em Cabeçalhos da solicitação personalizada, clique em Adicionar cabeçalho.
    1. Em Nome do cabeçalho, digite Host.
    2. Em Valor do cabeçalho, insira backend.example.com.
  12. Clique em Criar.
  13. Mantenha a janela aberta para continuar.

Anexe o serviço de back-end a um mapa de URLs existente

  1. Clique em Regras de host e caminho.
  2. A primeira linha ou linhas têm serviços do Google Cloud na coluna à direita e uma delas já está preenchida com a regra padrão Any unmatched (default) para Hosts e Caminhos.
  3. Certifique-se de que haja uma linha com images selecionado na coluna da direita. Se ela não existir, clique em Adicionar regra de host e caminho e selecione images. Preencha os outros campos da seguinte forma:
    1. Em Hosts, insira *.
    2. Em Caminhos, digite /cart/id/1223515.

Revisar e finalizar

  1. Clique em Analisar e finalizar.
  2. Compare as configurações com o que você pretendia criar.
  3. Se tudo parecer certo, clique em Atualizar.

gcloud

  1. Crie um serviço de back-end para o NEG:

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --cache-mode=CACHE_MODE \
       --protocol=HTTP2
    

    Defina o modo de cache substituindo CACHE_MODE por um dos seguintes itens:

    • CACHE_ALL_STATIC: armazena automaticamente em cache o conteúdo estático.

    • USE_ORIGIN_HEADERS: (padrão) exige que a origem defina cabeçalhos de armazenamento em cache válidos para armazenar conteúdo em cache.

    • FORCE_CACHE_ALL: armazena em cache todo o conteúdo, ignorando a diretiva private, no-store ou no-cache em cabeçalhos de resposta Cache-Control.

  2. Configure o serviço de back-end para adicionar o cabeçalho da solicitação personalizado Host: backend.example.com à solicitação:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. Use o comando backend-services add-backend para adicionar o NEG na Internet ao serviço de back-end:

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. Anexe o novo serviço de back-end ao mapa de URLs do balanceador de carga ao criar uma nova regra de correspondência para direcionar solicitações para esse back-end:

    gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \
      --default-service=GCP_SERVICE_EXAMPLE \
      --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \
      --backend-service-path-rules=/CART/ID/1223515=IMAGES
    

    Substitua:

    • EXAMPLE_URL_MAP: o nome do seu mapa de URLs atual
    • GCP_SERVICE_EXAMPLE: o nome de um serviço de back-end padrão existente
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE: o nome dessa nova regra de caminho
    • /CART/ID/1223515: o caminho
    • IMAGES: o nome do novo serviço de back-end com o NEG da Internet conectado

Autorizar os intervalos de IP necessários na lista de permissões

Para permitir que um balanceador de carga de aplicativo externo envie solicitações ao NEG da Internet, é preciso consultar o registro TXT _cloud-eoips.googleusercontent.com do DNS usando uma ferramenta como dig ou nslookup.

Por exemplo, execute o seguinte comando dig:

dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2

A saída contém dois intervalos de IP, da seguinte maneira:

34.96.0.0/20
34.127.192.0/18

Observe os intervalos de IP e verifique se esses intervalos são permitidos pelo firewall ou pela lista de controle de acesso (ACL, na sigla em inglês) à nuvem.

Para mais informações, consulte Como autenticar solicitações.

Conectar o domínio ao balanceador de carga

Após a criação do balanceador de carga, anote o endereço IP associado ao balanceador de carga, por exemplo, 30.90.80.100. Para apontar o domínio para o balanceador de carga, crie um registro A usando o serviço de registro de domínio. Se você adicionou vários domínios ao certificado SSL, adicione um registro A para cada um deles, todos apontando para o endereço IP do balanceador de carga. Por exemplo, para criar registros A para www.example.com e example.com, use o seguinte:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Se você usa o Cloud DNS como provedor de DNS, consulte Adicionar, modificar e excluir registros.

Testar o balanceador de carga de aplicativo externo

Agora que você configurou o balanceador de carga, pode 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 teste.

  1. No console do Google Cloud , acesse a página Balanceamento de carga.

    Acesse 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. Se você criou um balanceador de carga HTTP, teste-o usando um navegador da Web em http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você irá para a página inicial do serviço helloworld.

    Se você criou um balanceador de carga HTTPS, pode testá-lo usando um navegador da Web em https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Você irá para a página inicial do serviço helloworld.

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

    Se preferir, use o curl na linha de comando da máquina local. Substitua IP_ADDRESS pelo endereço IPv4 do balanceador de carga:

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

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

  5. Opcional: se estiver sendo usado um domínio personalizado, talvez seja necessário aguardar até que as configurações de DNS atualizadas sejam propagadas. Em seguida, teste o domínio (por exemplo, backend.example.com) no navegador da Web.

    Para ajuda com a solução de problemas, consulte Solução de problemas de back-end externo e NEG da Internet.

Testar o Cloud CDN

Teste 1: como alcançar o endpoint do bucket diretamente

Esse teste usa os comandos time e wget de uma VM. O exemplo faz o download de /cart/id/1223515/image.jpg do bucket backend.example.com.

Na saída, é possível ver que a solicitação geral leva 780 ms. Está na hora de recuperar uma imagem de 3,3 MB diretamente do Amazon S3.

time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46--  backend.example.com/cart/id/1223515/image.jpg
Resolving backend.example.com (backend.example.com)... 52.219.120.233
Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.47'
/cart/id/1223515/image.jpg.47                                                 100%[==============================================================================================================================================>]   3.29M  6.25MB/s    in 0.5s
2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106]
real    0m0.780s
user    0m0.003s
sys     0m0.012s

Teste 2: primeira solicitação usando o Cloud CDN

Esse teste usa o endereço IP do balanceador de carga para recuperar o arquivo /cart/id/1223515/image.jpg. Como essa é a primeira solicitação, ela deve ser uma ausência e o Cloud CDN precisa buscar a imagem na origem, que é o Amazon S3. Na da saída, é possível ver que a solicitação demorou 844 ms.

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.44'
/cart/id/1223515/image.jpg.44                                                 100%[==============================================================================================================================================>]   3.29M  8.23MB/s    in 0.4s
2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106]
real    0m0.844s
user    0m0.003s
sys     0m0.012s

Teste 3: segunda solicitação usando o CDN

Agora faremos mais uma solicitação usando o IP do balanceador de carga. Desta vez, devemos receber uma resposta armazenada em cache para que ela seja mais rápida do que os 2 primeiros testes.

Estamos novamente usando o mesmo IP do LB LOAD_BALANCER_IP_ADDRESS. Na saída, vemos que a solicitação demorou apenas 18 ms.

time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29--  http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3447106 (3.3M) [image/jpeg]
Saving to: '/cart/id/1223515/image.jpg.45'
/cart/id/1223515/image.jpg.45                                                 100%[==============================================================================================================================================>]   3.29M  --.-KB/s    in 0.008s
2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106]
real    0m0.018s
user    0m0.001s
sys     0m0.010s

Verificar usando registros

Os registros do Cloud CDN estão associados ao balanceador de carga de aplicativo externo ao qual os back-ends do Cloud CDN estão anexados. Com os registros, é possível verificar se uma solicitação é uma ocorrência ou uma ausência. Leia mais sobre os registros do Cloud CDN em Como visualizar registros.

Limitações

  • O bucket de terceiros e os objetos precisam ser públicos. Como alternativa, é possível manter o bucket e os objetos particulares se for configurada autenticação de origem particular. Os back-ends externos não são compatíveis com outros métodos de autenticação de conteúdo, como URLs assinados ou cookies assinados.

  • Ao usar um serviço de back-end externo que espera um valor específico para o cabeçalho Host da solicitação HTTP, configure o serviço de back-end para definir o cabeçalho Host como esse valor esperado. Se você não configurar um cabeçalho da solicitação personalizado, um serviço de back-end preservará o cabeçalho Host usado pelo cliente para se conectar ao balanceador de carga de aplicativo externo do Google Cloud . Para informações gerais sobre cabeçalhos personalizados, consulte Configurar cabeçalhos da solicitação personalizados. Para ver um exemplo específico, consulte Como configurar um balanceador de carga com um back-end externo.

A seguir