Configure um contentor de back-end

O Cloud CDN tira partido da sua escolha do balanceador de carga de aplicações externo global ou do balanceador de carga de aplicações clássico para oferecer encaminhamento, verificação de funcionamento e apoio técnico para IP Anycast. Uma vez que os balanceadores de carga de aplicações externos globais podem ter vários tipos de instâncias de back-end, como instâncias de VM do Compute Engine, pods do Google Kubernetes Engine, contentores do Cloud Storage ou back-ends externos fora do Google Cloud, pode escolher os back-ends (origens) para os quais ativar o Cloud CDN.

Este guia de configuração mostra como criar um Application Load Balancer externo com o Cloud CDN ativado. O exemplo usa os seguintes recursos:

  • A rede de nuvem virtual privada (VPC) predefinida
  • Um mapa de URLs predefinido
  • Um endereço IP externo reservado
  • Um contentor do Cloud Storage como back-end
  • Um único contentor de back-end do balanceador de carga que funciona como um wrapper em torno do contentor do Cloud Storage

Um contentor de back-end suporta o seguinte:

  • Contentores do Cloud Storage de qualquer classe de armazenamento, incluindo contentores multirregionais
  • Políticas de RFC de nuvem para colocar conteúdo em cache na extremidade global da Google

Para saber como funciona o Cloud CDN, consulte a vista geral do Cloud CDN.

Por predefinição, o Cloud Storage usa a mesma cache que o Cloud CDN usa. Se ativar a RFC do Google Cloud no contentor de back-end, pode usar os controlos da RFC do Google Cloud no seu conteúdo. Os controlos da CDN na nuvem incluem, por exemplo, modos de cache, URLs assinados e anulação. A RFC de multimédia na nuvem também lhe permite colocar em cache conteúdo grande (> 10 MB). Se não ativar a RFC do Google Cloud no seu contentor de back-end, só pode usar cabeçalhos de origem Cache-Control para controlar o armazenamento em cache de conteúdo mais pequeno, conforme definido pelos metadados do Google Cloud Storage.

Back-ends do balanceador de carga

Um balanceador de carga de aplicações externo usa um mapa de URLs para direcionar o tráfego de URLs especificados para serviços especificados. A tabela seguinte resume os tipos de back-ends onde pode alojar conteúdo e serviços.

Configuração do back-end do balanceador de carga Tipo de suporte típico Tipos de back-end
Serviço de back-end Dinâmico (como dados)
  • Grupos de instâncias não geridos
  • Grupos de instâncias geridas
  • Grupos de pontos finais de rede internos a Google Cloud
  • Grupos de pontos finais de rede externos a Google Cloud
Contentor de back-end Estáticos (como imagens)
  • Contentores do Cloud Storage (abordados nesta página)

Antes de começar

Consola

  1. Na Google Cloud consola, aceda à página Início.

    Aceda à Google Cloud página inicial

  2. À direita de Google Cloud, selecione um projeto no menu pendente.

gcloud

     gcloud config set project PROJECT_ID
   

Substitua PROJECT_ID pelo seu Google Cloud ID do projeto.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

Crie um contentor do Cloud Storage

Se tiver um contentor do Cloud Storage existente que ainda não esteja atribuído a um equilibrador de carga, pode avançar para o passo seguinte.

Quando cria um contentor do Cloud Storage para usar como back-end de um Application Load Balancer externo com o Cloud CDN, recomendamos que escolha um contentor multirregional, que replica automaticamente objetos em várias Google Cloud regiões. Isto pode melhorar a disponibilidade do seu conteúdo e melhorar a tolerância a falhas na sua aplicação.

Consola

  1. Na Google Cloud consola, abra a página Recipientes do Cloud Storage.

    Abra a página Recipientes

  2. Clique em Criar contentor.
  3. Especifique valores para os campos na tabela seguinte, deixando todos os outros com os respetivos valores predefinidos.

    Propriedade Valor (introduza o valor ou selecione uma opção conforme especificado)
    Nome Para cada contentor, introduza um nome globalmente único. Se o nome que introduzir não for único, é apresentada uma mensagem para experimentar outro nome.
    Tipo de localização Multirregião
    Localização Selecione uma região, como us (várias regiões nos Estados Unidos).
    Classe de armazenamento predefinida Padrão
    Controlo de acesso Uniform
  4. Clique em Criar.

  5. Tome nota do nome do contentor do Cloud Storage recém-criado para o passo seguinte.

gcloud

gcloud storage buckets create gs://BUCKET_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access

Terraform

Para criar um contentor, use o google_storage_bucketresource.

# Cloud Storage bucket
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "default" {
  name                        = "${random_id.bucket_prefix.hex}-my-bucket"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
  // Assign specialty files
  website {
    main_page_suffix = "index.html"
    not_found_page   = "404.html"
  }
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Copie um ficheiro gráfico para o seu contentor do Cloud Storage

Para lhe permitir testar a configuração, copie um ficheiro gráfico de um contentor do Cloud Storage público para o seu próprio contentor do Cloud Storage.

gcloud

Execute o seguinte comando no Cloud Shell. Substitua BUCKET_NAME pelo nome exclusivo do contentor do Cloud Storage:

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_NAME/never-fetch/

Terraform

Para copiar o objeto, use o comando local-exec Provisioner com o comando gcloud storage cp.

resource "null_resource" "upload_image" {
  provisioner "local-exec" {
    command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.default.name}/never-fetch/ --recursive"
  }
}

Em alternativa, para carregar um objeto, use o google_storage_bucket_object recurso.

# image object for testing, try to access http://<your_lb_ip_address>/test.jpg
resource "google_storage_bucket_object" "test_image" {
  name = "test-object"
  # Uncomment and add valid path to an object.
  #  source       = "/path/to/an/object"
  #  content_type = "image/jpeg"

  # Delete after uncommenting above source and content_type attributes
  content      = "Data as string to be uploaded"
  content_type = "text/plain"

  bucket = google_storage_bucket.default.name
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Na Google Cloud consola, clique em Atualizar para verificar se o ficheiro gráfico foi copiado.

Torne o seu contentor do Cloud Storage público

Este exemplo torna o seu contentor do Cloud Storage publicamente legível. Esta é a abordagem recomendada para conteúdo público. Com esta definição, qualquer pessoa na Internet pode ver e listar os seus objetos e os respetivos metadados, excluindo as ACLs. Para reduzir o risco de exposição não intencional de dados, deve normalmente dedicar buckets do Cloud Storage específicos para objetos públicos.

Seguem-se alternativas para tornar um contentor do Cloud Storage inteiro público:

O procedimento seguinte concede a todos os utilizadores acesso à visualização de objetos no seu contentor do Cloud Storage, tornando o contentor publicamente legível.

Consola

  1. Na Google Cloud consola, abra a página Recipientes do Cloud Storage.

    Abra a página Recipientes

  2. Navegue para o contentor e clique no separador Autorizações.
  3. Clique em Adicionar responsáveis.
  4. Em Novos membros, introduza allUsers.
  5. Para a função, selecione Cloud Storage > Visitante de objetos de armazenamento.
  6. Clique em Guardar.

gcloud

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=allUsers --role=roles/storage.objectViewer

Terraform

Para tornar o seu contentor do Cloud Storage público, use o recurso google_storage_bucket_iam_member.

# make bucket public
resource "google_storage_bucket_iam_member" "default" {
  bucket = google_storage_bucket.default.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Reserve um endereço IP externo

Agora que o contentor do Cloud Storage está em funcionamento, configure um endereço IP externo estático global que os seus clientes usam para alcançar o equilibrador de carga.

Este passo é opcional, mas recomendado, porque um endereço IP externo estático fornece um único endereço para direcionar o seu domínio.

Consola

  1. Na Google Cloud consola, aceda à página Endereços IP externos.

    Aceda à página Endereços IP externos

  2. Para reservar um endereço IPv4, clique em Reservar endereço estático.
  3. Atribua um Nome de example-ip.
  4. Defina o Nível de serviço de rede como Premium.
  5. Defina a versão do IP como IPv4.
  6. Defina o Tipo como Global.
  7. Clique em Reservar.

gcloud

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

Tome nota do endereço IPv4 que foi reservado:

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

Terraform

Para reservar um endereço IP, use o recurso google_compute_global_address.

# reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Crie o balanceador de carga de aplicações externo

Neste procedimento, cria o contentor de back-end do balanceador de carga, que funciona como um wrapper para o seu contentor do Cloud Storage. Quando cria ou edita um bucket de back-end, pode ativar o Cloud CDN.

Consola

Inicie o processo de configuração do balanceador de carga de aplicações externo

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

    Aceda à página Balanceamento de carga

  2. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  3. Selecione Da Internet para as minhas VMs e, de seguida, clique em Continuar.
  4. Em Gestão avançada de tráfego, selecione uma das seguintes opções:
    • Para balanceadores de carga de aplicações clássicos, selecione Balanceador de carga HTTP(S) clássico.
    • Para balanceadores de carga de aplicações externos globais, selecione Balanceador de carga HTTP(S) com gestão de tráfego avançada.
  5. Defina Nome como http-lb e, em seguida, avance para o passo seguinte.

Configure o back-end e ative o Cloud CDN

Crie o contentor de back-end do balanceador de carga, que funciona como um wrapper para o seu contentor do Cloud Storage. Quando cria ou edita um bucket de back-end, pode ativar o Cloud CDN.

  1. Clique em Configuração de back-end.
  2. Em Serviços de back-end e contentores de back-end, clique em Criar ou selecionar serviços de back-end e contentores de back-end e, de seguida, clique em Contentores de back-end > Criar um contentor de back-end.
  3. Defina o Nome como cat-backend-bucket. Este nome não tem de ser globalmente único e pode ser diferente do nome do contentor do Cloud Storage real.
  4. Em Contentor do Cloud Storage, clique em Procurar.
  5. Selecione o identificador exclusivo global do Cloud Storage BUCKET_NAME que criou e, de seguida, clique em Selecionar.
  6. Clique em Ativar Cloud CDN.

  7. (Opcional) Modifique o modo de cache e as definições de TTL.

  8. Clique em Criar.

Configure regras de anfitriões e correspondências de caminhos

As regras de anfitrião e os correspondentes de caminhos são componentes de configuração de um mapa de URLs de um balanceador de carga de aplicações externo.

Em Regras de anfitrião e caminho, pode manter as predefinições.

Para ver um exemplo de configuração personalizada, consulte o artigo Adicionar contentores de back-end a equilibradores de carga.

Para saber mais acerca das regras de anfitrião e dos correspondentes de caminhos, consulte a vista geral dos mapas de URLs.

Configure a interface

  1. Clique em Configuração do front-end.
  2. Verifique se as opções estão configuradas com estes valores.

    Propriedade Valor (introduza um valor ou selecione uma opção conforme especificado)
    Protocolo HTTP
    Nível de serviço de rede Premium
    Versão do IP IPv4
    Endereço IP example-ip
    Porta 80

    Se quiser criar um balanceador de carga HTTPS em vez de um balanceador de carga HTTP, tem de ter um certificado SSL (gcloud compute ssl-certificates list) e preencher os campos da seguinte forma.

    Propriedade Valor (introduza um valor ou selecione uma opção conforme especificado)
    Protocolo HTTPS
    Nível de serviço de rede Premium
    Versão do IP IPv4
    Endereço IP example-ip
    Porta 443
    Certificado Selecione um certificado ou Crie um novo certificado
  3. Clique em Concluído.

Reveja a configuração

  1. Clique em Rever e finalizar.
  2. Reveja as secções Recipientes de back-end, Regras de anfitriões e caminhos e Front-end.
  3. Clique em Criar.
  4. Aguarde a criação do balanceador de carga.
  5. Clique no nome do balanceador de carga (http-lb).
  6. Tome nota do endereço IP do equilibrador de carga para a tarefa seguinte. Chama-se IP_ADDRESS.

gcloud

Configure o back-end

gcloud compute backend-buckets create cat-backend-bucket \
    --gcs-bucket-name=BUCKET_NAME \
    --enable-cdn \
    --cache-mode=CACHE_MODE

Defina o modo de cache substituindo CACHE_MODE por uma das seguintes opções:

  • CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS: usa os cabeçalhos definidos de acordo com os metadados de controlo da cache no armazenamento na nuvem. O Cloud Storage fornece sempre um cabeçalho Cache-Control ao Cloud CDN. Se não for escolhido explicitamente nenhum valor, envia um valor predefinido.

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

Configure o mapa de URLs

gcloud compute url-maps create http-lb \
    --default-backend-bucket=cat-backend-bucket

Configure o proxy de destino

gcloud compute target-http-proxies create http-lb-proxy \
    --url-map=http-lb

Configure a regra de encaminhamento

  • Para um Application Load Balancer externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Esta definição oferece capacidade de gestão avançada do tráfego.
  • Para um balanceador de carga de aplicações clássico, use load-balancing-scheme=EXTERNAL.
gcloud compute forwarding-rules create http-lb-forwarding-rule \
    --load-balancing-scheme=LOAD_BALANCING_SCHEME \
    --network-tier=PREMIUM \
    --address=example-ip \
    --global \
    --target-http-proxy=http-lb-proxy \
    --ports=80

Terraform

Configure o back-end

Para configurar o back-end, use o recurso google_compute_backend_bucket.

# backend bucket with CDN policy with default ttl settings
resource "google_compute_backend_bucket" "default" {
  name        = "cat-backend-bucket"
  description = "Contains beautiful images"
  bucket_name = google_storage_bucket.default.name
  enable_cdn  = true
  cdn_policy {
    cache_mode        = "CACHE_ALL_STATIC"
    client_ttl        = 3600
    default_ttl       = 3600
    max_ttl           = 86400
    negative_caching  = true
    serve_while_stale = 86400
  }
}

Configure o mapa de URLs

Para configurar o back-end, use o recurso google_compute_url_map.

# url map
resource "google_compute_url_map" "default" {
  name            = "http-lb"
  default_service = google_compute_backend_bucket.default.id
}

Configure o proxy de destino

Para configurar o proxy de destino, use o recurso google_compute_target_http_proxy ou o recurso google_compute_target_https_proxy.

# http proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Configure a regra de encaminhamento

Para configurar a regra de encaminhamento, use o recurso google_compute_global_forwarding_rule.

# forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}
  • Para um Application Load Balancer externo global, use-o com o load_balancing_scheme="EXTERNAL_MANAGED". Esta definição oferece uma capacidade de gestão de tráfego avançada.
  • Para um balanceador de carga de aplicações clássico, use load_balancing_scheme="EXTERNAL".

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

Envie tráfego para o seu contentor de back-end

Depois de criar a regra de encaminhamento global, a configuração pode demorar vários minutos a propagar-se a nível mundial. Após vários minutos, pode começar a enviar tráfego para o endereço IP do balanceador de carga.

Consola

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

    Aceda à página Balanceamento de carga

  2. Clique em http-lb para expandir o equilibrador de carga que acabou de criar.

    Na secção Backend, confirme se o contentor de back-end está em bom estado. Deve existir uma marca de verificação verde junto ao seu contentor de back-end. Se vir algo diferente, experimente primeiro atualizar a página. A Google Cloud consola pode demorar alguns momentos a indicar que os back-ends estão em bom estado.

  3. Depois de a Google Cloud consola mostrar que o contentor de back-end está em bom estado, pode testar o equilibrador de carga através de um navegador de Internet acedendo a http://IP_ADDRESS/never-fetch/three-cats.jpg. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. O navegador deve renderizar uma página com conteúdo que mostre o ficheiro gráfico.

gcloud

Use o comando curl para testar a resposta do URL. Substitua IP_ADDRESS pelo endereço IPv4 do equilibrador de carga.

Tome nota do endereço IPv4 que foi reservado:

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

Envie um pedido curl:

curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Verifique se o Cloud CDN está a funcionar

Se atualizar a http://IP_ADDRESS/never-fetch/three-cats.jpg página várias vezes em rápida sucessão, devem ocorrer vários acertos da cache.

A entrada de registo seguinte mostra um resultado da cache. Pode ver os resultados positivos da cache na Google Cloud consola abrindo o Explorador de registos e filtrando pelo nome da regra de encaminhamento.

Abra o Explorador de registos

Logs Explorer

{
    insertId: "1oek5rg3l3fxj7"
    jsonPayload: {
        @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
        cacheId: "SFO-fbae48ad"
        statusDetails: "response_from_cache"
    }
    httpRequest: {
        requestMethod: "GET"
        requestUrl: "http://LOAD_BALANCER_IP_ADDRESS/never-fetch/three-cats.jpg"
        requestSize: "577"
        status: 254
        responseSize: "157"
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
        remoteIp: "CLIENT_IP_ADDRESS"
        cacheHit: true
        cacheLookup: true
    }
    resource: {
        type: "http_load_balancer"
        labels: {
            zone: "global"
            url_map_name: "URL_MAP_NAME"
            forwarding_rule_name: "FORWARDING_RULE_NAME"
            target_proxy_name: "TARGET_PROXY_NAME"
            backend_service_name: ""
            project_id: "PROJECT_ID"
        }
    }
    timestamp: "2020-06-08T23:41:25.078651Z"
    severity: "INFO"
    logName: "projects/PROJECT_ID/logs/requests"
    trace: "projects/PROJECT_ID/traces/241d69833e64b3bf83fabac8c873d992"
    receiveTimestamp: "2020-06-08T23:41:25.588272510Z"
    spanId: "7b6537d3672e08e1"
}

Consola

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

    Aceda à página Balanceamento de carga

  2. Clique em http-lb para expandir o equilibrador de carga que acabou de criar.

    Na secção Backend, confirme se o contentor de back-end está em bom estado. Deve existir uma marca de verificação verde junto ao seu contentor de back-end. Se vir algo diferente, experimente primeiro atualizar a página. A Google Cloud consola pode demorar alguns momentos a indicar que os back-ends estão em bom estado.

  3. Depois de a Google Cloud consola mostrar que o contentor de back-end está em bom estado, pode testar o equilibrador de carga através de um navegador de Internet acedendo a http://IP_ADDRESS/never-fetch/three-cats.jpg. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. O navegador deve renderizar uma página com conteúdo que mostre o ficheiro gráfico.

gcloud

Use o comando curl para testar a resposta do URL. Substitua IP_ADDRESS pelo endereço IPv4 do equilibrador de carga.

Tome nota do endereço IPv4 que foi reservado:

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

Envie um pedido curl:

curl -D- -o /dev/null /dev/null http://IP_ADDRESS/never-fetch/three-cats.jpg

O conteúdo é obtido a partir do Cloud Storage, colocado em cache pelo Cloud CDN e, em seguida, validado e obtido novamente quando expira ou é removido da cache.

O conteúdo da cache tem um cabeçalho Age superior a zero.

O conteúdo que tem de ser atualizado antes do TTL pode ser invalidado e obtido novamente a partir do Cloud Storage.

Desative o Cloud CDN

Consola

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

  1. Na Google Cloud consola, aceda à página Cloud CDN.

    Aceda à página do Cloud CDN

  2. No lado direito da linha de origem, clique em Menu e, de seguida, selecione Editar.
  3. Desmarque as caixas de verificação de todos os contentores de back-end que quer impedir de usar a CDN da Google Cloud.
  4. Clique em Atualizar.

Remova o RFC para todos os contentores de back-end de uma origem

  1. Na Google Cloud consola, aceda à página Cloud CDN.

    Aceda à página do Cloud CDN

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

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_NAME \
    --no-enable-cdn

A desativação do Cloud CDN não invalida nem remove as caches. Se desativar e voltar a ativar o Cloud CDN, a maioria ou todo o seu conteúdo em cache pode continuar em cache. Para impedir que o conteúdo seja usado pelas caches, tem de invalidar esse conteúdo.

O que se segue?