Configure o armazenamento de objetos de terceiros

Pode usar um backend externo quando o conteúdo está alojado no local ou noutra nuvem. O back-end externo permite-lhe publicar o conteúdo a partir da RFC da Google Cloud.

Este documento explica o processo de configuração do armazenamento de objetos de terceiros, como o Amazon Simple Storage Service (Amazon S3) ou o Azure Blob Storage, como um back-end externo para a RFC. Os back-ends externos e o Cloud CDN funcionam em conjunto com um balanceador de carga de aplicações externo.

Arquitetura

Para criar o back-end externo, cria um grupo de pontos finais de rede da Internet (NEG) que aponta 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 contentor de armazenamento de terceiros como um back-end, tem de fazer o seguinte:

  1. Prepare o contentor de armazenamento de terceiros para publicar conteúdo.
  2. Crie um NEG de Internet que use o FQDN do contentor.
  3. Configure o balanceador de carga da aplicação externo com o NEG da Internet como o back-end.
  4. Teste a configuração.

Prepare o contentor para publicar conteúdo

Antes de iniciar a configuração no Google Cloud, certifique-se de que o contentor está configurado corretamente. Estas instruções pressupõem que está a usar um contentor do Amazon S3 e que tem as autorizações necessárias para fazer alterações ao contentor e aos objetos do Amazon S3.

  1. Certifique-se de que o contentor do Amazon S3 e os objetos no contentor são públicos ou que configurou a autenticação de origem privada para o contentor do Amazon S3.

  2. Certifique-se de que o conteúdo cumpre os requisitos de capacidade de colocação em cache indicados em Conteúdo colocável em cache. Se precisar de adicionar metadados de objetos, consulte a base de conhecimentos da AWS, por exemplo, o artigo Editar metadados de objetos.

  3. Precisa do ponto final do contentor do Amazon S3 (o FQDN) quando configurar o NEG da Internet. Para obter as informações do ponto final, siga as instruções fornecidas na base de conhecimentos da AWS, por exemplo, Aceder a um contentor. Também pode obter o URL do ponto final do Amazon S3 na página de vista geral do objeto.

Crie um NEG de Internet que use o nome de anfitrião do contentor

Para simplificar, este exemplo usa o FQDN backend.example.com. Certifique-se de que substitui este valor pelo FQDN do contentor de armazenamento de terceiros, que pode ter um aspeto semelhante a http://unique-name-bucket.s3-us-west-1.amazonaws.com/.

Este guia usa um exemplo para descrever os princípios básicos da utilização de um back-end externo (por vezes, denominado origem personalizada) num Application Load Balancer externo. Um backend externo é um ponto final externo ao Google Cloud. Quando usa um back-end externo com um Application Load Balancer externo, pode melhorar o desempenho através da colocação em cache da RFC do Cloud CDN.

O guia explica como configurar um Application Load Balancer externo global com um serviço de back-end ativado para o Cloud CDN que usa um proxy para um servidor de back-end externo em backend.example.com.

No exemplo, o balanceador de carga aceita pedidos HTTPS de clientes e encaminha estes pedidos como HTTPS para o back-end externo. Este exemplo pressupõe que o back-end externo suporta HTTPS.

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

Este guia pressupõe que já configurou um equilibrador de carga e que está a adicionar um novo back-end externo. Para mais informações, consulte o artigo Configure um Application Load Balancer clássico com um grupo de instâncias gerido no back-end.

A Figura 1 mostra uma arquitetura de exemplo.

Figura 1. Exemplo de utilização do contentor S3 para back-ends externos.
Figura 1. Exemplo de utilização do contentor 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 existe uma falha de cache, os pedidos de utilizador para /cart/id/1223515 são obtidos do back-end externo através de HTTPS. Todo o outro tráfego de entrada é direcionado para o serviço de backend com VMs do Compute Engine ou para o contentor de backend, com base no mapa de URLs. Google Cloud

Antes de começar

Antes de seguir este guia, familiarize-se com o seguinte:

Autorizações

Para seguir este guia, tem de criar um grupo de pontos finais de rede (NEG) da Internet e criar ou modificar um Application Load Balancer externo num projeto. Deve ser proprietário ou editor do projeto, ou ter ambas as funções do IAM do Compute Engine seguintes.

Tarefa Função necessária
Crie e modifique componentes do balanceador de carga Administrador da rede
Crie e modifique NEGs Administrador de instâncias do Compute

Configure um balanceador de carga com um back-end externo

Esta secção mostra como configurar e testar um NEG de Internet.

Vista geral da configuração

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

  • Definir o ponto final da Internet num NEG da Internet.
  • Adicionar um NEG da Internet como back-end a um serviço de back-end.
  • Definir que tráfego de utilizadores mapear para este serviço de back-end configurando o mapa de URLs do balanceador de carga da aplicação externo.
  • Adicionar os intervalos de IP necessários à lista de autorizações.

Este exemplo cria os seguintes recursos:

  • Uma regra de encaminhamento com o endereço IP 120.1.1.1direciona os pedidos recebidos para um proxy de destino.
    • O networkTier da regra de encaminhamento tem de ser PREMIUM.
  • O proxy de destino verifica cada pedido em relação ao mapa de URLs para determinar o serviço de back-end adequado para o pedido.
    • Para back-ends externos, o proxy de destino tem de ser TargetHttpProxy ou TargetHttpsProxy. Este exemplo usa TargetHttpsProxy.
  • A RFC da nuvem ativada (opcional) no serviço de back-end permite colocar em cache e publicar respostas a partir de caches da RFC da nuvem.
  • 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 do pedido HTTP.

A configuração tem o seguinte aspeto.

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

Crie o NEG e o ponto final da Internet

Consola

  1. Na Google Cloud consola, aceda à página Grupos de pontos finais de rede.

    Aceda a Grupos de pontos finais da rede

  2. Clique em Criar grupo de pontos finais de rede.
  3. Introduza o nome do grupo de pontos finais da rede: example-fqdn-neg.
  4. Para o Tipo de grupo de pontos finais da rede, selecione Grupo de pontos finais da rede (Internet).
  5. Para Porta predefinida, introduza 443.
  6. Para Novo ponto final de rede, selecione Nome do domínio totalmente qualificado e porta.
  7. Para o FQDN, introduza backend.example.com.
  8. Para Tipo de porta, selecione Predefinição e verifique se o Número da porta é 443.
  9. Clique em Criar.

gcloud

  1. Crie um NEG de Internet e defina o --network-endpoint-type como internet-fqdn-port (o nome do anfitrião e a porta onde o seu 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 seu ponto final ao NEG. Se não for especificada uma porta, a seleção de portas é predefinida para a porta 80 (HTTP) ou 443 (HTTPS; HTTP/2), consoante o protocolo configurado no serviço de back-end. Certifique-se de que inclui a flag --global:

    gcloud compute network-endpoint-groups update example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Liste o NEG da 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. Indique o ponto final nesse NEG:

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

    Saída:

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Adicione um back-end externo a um balanceador de carga

O exemplo seguinte atualiza um balanceador de carga existente.

No equilibrador de carga existente, o serviço predefinido é um Google Cloud serviço. O exemplo modifica o mapa de URLs existente adicionando um correspondente de caminhos que envia todos os pedidos para cart/id/1223515 para o serviço de back-end images, que está associado ao NEG da Internet.

Consola

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

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Para adicionar o serviço de back-end a um equilibrador de carga existente, selecione o seu equilibrador de carga de aplicações clássico, clique em Menu e, de seguida, selecione Editar.
  3. Clique em Configuração de back-end.
  4. No menu Serviços de back-end e contentores 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 Tipo de back-end, selecione Grupo de pontos finais da rede da Internet.
  7. Selecione o protocolo que pretende usar do balanceador de carga para o NEG de Internet. Para este exemplo, selecione HTTPS.
  8. Em Novo back-end > Grupo de pontos finais de rede da Internet, selecione example-fqdn-neg e, de seguida, clique em Concluído.
  9. Selecione Ativar Cloud CDN.
  10. Opcional: modifique o modo de cache e as definições de TTL.
  11. Em Configurações avançadas, em Cabeçalhos de pedidos personalizados, clique em Adicionar cabeçalho.
    1. Em Nome do cabeçalho, introduza Host.
    2. Em Valor do cabeçalho, introduza 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 anfitrião e caminho.
  2. A primeira linha ou linhas têm Google Cloud serviços na coluna direita e um deles já está preenchido com a regra predefinida Any unmatched (default) para Anfitriões e Caminhos.
  3. Certifique-se de que existe uma linha com images selecionado na coluna do lado direito. Se não existir, clique em Adicionar regra de anfitrião e caminho e selecione images. Preencha os outros campos da seguinte forma:
    1. Em Anfitriões, introduza *.
    2. Em Caminhos, introduza /cart/id/1223515.

Reveja e finalize

  1. Clique em Rever e finalizar.
  2. Compare as suas definições com o que pretendia criar.
  3. Se estiver tudo correto, clique em Atualizar.

gcloud

  1. Crie um novo 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 uma das seguintes opções:

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

    • USE_ORIGIN_HEADERS (predefinição): requer que a origem defina cabeçalhos de colocação em cache válidos para colocar conteúdo em cache

    • FORCE_CACHE_ALL: armazena em cache todo o conteúdo, ignorando todas as diretivas private, no-store ou no-cache nos cabeçalhos de resposta Cache-Control

  2. Configure o serviço de back-end para adicionar o cabeçalho do pedido personalizado Host: backend.example.com ao pedido:

    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 da 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. Associe o novo serviço de back-end ao mapa de URLs do balanceador de carga criando uma nova regra de correspondência para direcionar pedidos 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 o seguinte:

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

Adicione os intervalos de IP necessários à lista de autorizações

Para permitir que um Application Load Balancer externo envie pedidos para o seu NEG de Internet, tem de consultar o _cloud-eoips.googleusercontent.com Registo TXT de DNS através de 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 forma:

34.96.0.0/20
34.127.192.0/18

Tome nota dos intervalos de IP e certifique-se de que estes intervalos são permitidos pela sua firewall ou lista de controlo de acesso (ACL) na nuvem.

Para mais informações, consulte o artigo Autenticar pedidos.

Associe o seu domínio ao balanceador de carga

Após a criação do balanceador de carga, tome nota do endereço IP associado ao balanceador de carga, por exemplo, 30.90.80.100. Para direcionar o seu domínio para o equilibrador de carga, crie um registo A através do serviço de registo de domínios. Se adicionou vários domínios ao seu certificado SSL, tem de adicionar um registo A para cada um, todos a apontar para o endereço IP do equilibrador de carga. Por exemplo, para criar registos 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 usar o Cloud DNS como fornecedor de DNS, consulte o artigo Adicione, modifique e elimine registos.

Teste o balanceador de carga de aplicações externo

Agora que configurou o equilibrador de carga, pode começar a enviar tráfego para o endereço IP do equilibrador de carga. Se configurou um domínio, também pode enviar tráfego para o nome de domínio. No entanto, a propagação de DNS pode demorar algum tempo a ser concluída, pelo que pode começar por usar o endereço IP para testes.

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique no balanceador de carga que acabou de criar.

  3. Tome nota do endereço IP do balanceador de carga.

  4. Se criou um balanceador de carga de HTTP, pode testá-lo através de um navegador de Internet em http://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviço helloworld.

    Se criou um balanceador de carga HTTPS, pode testá-lo através de um navegador de Internet em https://IP_ADDRESS. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. É feito o redirecionamento para a página inicial do serviço helloworld.

    Se isso não funcionar e estiver a usar um certificado gerido pela Google, confirme que o estado do recurso do certificado é ACTIVE. Para mais informações, consulte o estado do recurso do certificado SSL gerido pela Google.

    Em alternativa, pode usar curl a partir da linha de comandos da sua máquina local. Substitua IP_ADDRESS pelo endereço IPv4 do equilibrador de carga.

    Se estiver a usar um certificado gerido pela Google, teste o domínio que aponta para o endereço IP do balanceador de carga. Por exemplo:

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

  5. Opcional: se estiver a usar um domínio personalizado, pode ter de aguardar que as definições de DNS atualizadas sejam propagadas. Em seguida, teste o seu domínio (por exemplo, backend.example.com) no navegador de Internet.

    Para obter ajuda na resolução de problemas, consulte o artigo Resolva problemas de NEG externos e de back-end da Internet.

Teste o Cloud CDN

Teste 1: aceder diretamente ao ponto final do contentor

Este teste usa os comandos time e wget de uma VM. O exemplo transfere /cart/id/1223515/image.jpg do contentor backend.example.com.

A partir do resultado, pode ver que o pedido geral demora 780 ms. Este é o tempo necessário para obter 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: primeiro pedido através da RFC na nuvem

Este teste usa o endereço IP do equilibrador de carga para obter o ficheiro /cart/id/1223515/image.jpg. Como este é o primeiro pedido, deve ser um erro e a RFC deve obter a imagem da origem, que é o Amazon S3. A partir do resultado, pode ver que o pedido 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: segundo pedido através da RFC

Agora, vamos fazer mais um pedido através deste IP do equilibrador de carga. Desta vez, devemos receber uma resposta em cache, pelo que deve ser mais rápido do que os 2 primeiros testes.

Estamos a usar novamente o mesmo IP do LB LOAD_BALANCER_IP_ADDRESS. A partir do resultado, podemos ver que o pedido 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

Valide através da utilização de registos

Os registos do Cloud CDN estão associados ao Application Load Balancer externo ao qual os back-ends ativados para o Cloud CDN estão anexados. Com os registos, pode verificar se um pedido é um acerto ou um erro. Pode ler mais acerca dos registos da RFC na secção Ver registos.

Limitações

  • O contentor de terceiros e os objetos têm de ser públicos. Em alternativa, pode manter o seu contentor e objetos privados se configurar a autenticação de origem privada. Os backends externos não suportam outros métodos de autenticação de conteúdo, como URLs assinados ou cookies assinados.

  • Quando usar um serviço de back-end externo que espera um valor específico para o cabeçalho Host do pedido HTTP, tem de configurar o serviço de back-end para definir o cabeçalho Host com esse valor esperado. Se não configurar um cabeçalho de pedido personalizado, um serviço de back-end preserva o cabeçalho Host que o cliente usou para se ligar ao Application Load Balancer externo. Google Cloud Para ver informações gerais sobre cabeçalhos personalizados, consulte o artigo Configure cabeçalhos de pedidos personalizados. Para um exemplo específico, consulte o artigo Configurar um balanceador de carga com um back-end externo.

O que se segue?