Configurar um bucket de back-end

O Cloud CDN aproveita o balanceador de carga de aplicativo externo global ou o balanceador de carga de aplicativo clássico para fornecer suporte a roteamento, verificação de integridade e IP anycast. Como os balanceadores de carga de aplicativo externos globais podem ter vários tipos de instância de back-end (instâncias de VM do Compute Engine, pods do Google Kubernetes Engine, buckets do Cloud Storage ou back-ends externos ao Google Cloud), é possível escolher em quais (origens) back-ends ativar o Cloud CDN.

Neste guia de configuração, mostramos como criar um balanceador de carga de aplicativo externo com o Cloud CDN ativado. O exemplo usa os seguintes recursos:

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

Um bucket de back-end é compatível com:

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

Por padrão, o Cloud Storage usa o mesmo cache usado pelo Cloud CDN. Se você ativar o Cloud CDN no bucket de back-end, será possível usar os controles do Cloud CDN no seu conteúdo. Os controles do Cloud CDN incluem, por exemplo, modos de cache, URLs assinados e invalidação. O Cloud CDN também permite armazenar conteúdo grande em cache (mais de 10 MB). Se você não ativar o Cloud CDN no bucket de back-end, só será possível usar cabeçalhos Cache-Control de origem para controlar o armazenamento em cache de conteúdo menor, conforme definido pelos metadados do Cloud Storage.

Back-ends de balanceador de carga

Um balanceador de carga de aplicativo externo usa um mapa de URL para direcionar o tráfego de URLs especificados para serviços específicos. Veja na tabela a seguir um resumo dos tipos de back-ends em que é possível hospedar conteúdo e serviços.

Configuração de back-end do balanceador de carga Tipo de mídia comum Tipos de back-end
Serviço de back-end Dinâmico (como dados)
  • Grupos de instâncias não gerenciadas
  • Grupos de instâncias gerenciadas
  • Grupos de endpoints de rede internos para o Google Cloud
  • Grupos de endpoints de rede externos para o Google Cloud
Bucket de back-end Estático (como imagens)
  • Buckets do Cloud Storage (discutidos nesta página)

Antes de começar

Console

  1. No Console do Google Cloud, acesse a página Início.

    Acessar a página inicial do Google Cloud

  2. À direita do Google Cloud, selecione um projeto no menu suspenso.

gcloud

     gcloud config set project PROJECT_ID
   

Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

crie um bucket do Cloud Storage

Se você tiver um bucket do Cloud Storage que ainda não está atribuído a um balanceador de carga, pule para a próxima etapa.

Ao criar um bucket do Cloud Storage a ser usado como back-end para um balanceador de carga de aplicativo externo com o Cloud CDN, recomendamos que você escolha um bucket multirregional que replica objetos automaticamente em várias regiões do Google Cloud. Isso pode melhorar a disponibilidade do seu conteúdo e a tolerância a falhas em todo o aplicativo.

Console

  1. No console do Google Cloud, abra a página Buckets do Cloud Storage.

    Abrir a página Buckets

  2. Clique em Criar bucket.
  3. Especifique valores para os campos na tabela a seguir, deixando todos os outros campos com valores padrão.

    Propriedade Valor (insira o valor ou selecione uma opção conforme especificado)
    Nome Em cada bucket, insira um nome globalmente exclusivo. Se o nome inserido não for exclusivo, você receberá uma mensagem para tentar outro nome.
    Tipo de local Multirregional
    Local Selecione uma região, como us (várias regiões nos Estados Unidos).
    Classe de armazenamento padrão Padrão
    Controle de acesso Uniforme
  4. Clique em Criar.

  5. Anote o nome do bucket do Cloud Storage recém-criado para a próxima etapa.

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 bucket, use o recurso google_storage_bucket.

# 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 Comandos básicos do Terraform.

Copiar um arquivo gráfico para o bucket do Cloud Storage

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

gcloud

Execute o seguinte comando no Cloud Shell: Substitua BUCKET_NAME pelo nome exclusivo do bucket 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 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"
  }
}

Como alternativa, para fazer upload de um objeto, use o recurso google_storage_bucket_object.

# 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 Comandos básicos do Terraform.

No console do Google Cloud, clique em Atualizar para verificar se o arquivo gráfico foi copiado.

Tornar o bucket do Cloud Storage público

Este exemplo torna o bucket do Cloud Storage publicamente legível. Essa é a abordagem recomendada para conteúdo público. Com essa configuração, qualquer pessoa na Internet pode ver e listar seus objetos e metadados, exceto Access Control Lists. Para reduzir o risco de exposição acidental de dados, dedique buckets específicos do Cloud Storage a objetos públicos.

Confira a seguir alternativas para tornar um bucket do Cloud Storage inteiro público:

O procedimento a seguir concede a todos os usuários acesso para visualizar objetos no seu bucket do Cloud Storage, tornando o bucket publicamente legível.

Console

  1. No console do Google Cloud, abra a página Buckets do Cloud Storage.

    Abrir a página Buckets

  2. Navegue até o bucket e clique na guia Permissões.
  3. Clique em Adicionar participantes.
  4. Em Novos principais, digite allUsers.
  5. Para o papel, selecione Cloud Storage > Leitor de objetos do Storage.
  6. Clique em Save.

gcloud

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

Terraform

Para tornar público o bucket do Cloud Storage, 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 Comandos básicos do Terraform.

Reservar um endereço IP externo

Agora que o bucket do Cloud Storage está em execução, configure um endereço IP externo, estático e global que seus clientes possam usar para acessar seu balanceador de carga.

Essa etapa é opcional, mas recomendada, porque um endereço IP externo e estático fornece um único endereço para apontar ao domínio.

Console

  1. No console do Google Cloud, acesse a página Endereços IP externos.

    Acessar a 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 Versão IP como IPv4.
  6. Defina Tipo como Global.
  7. Clique em Reservar.

gcloud

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

Anote o 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 Comandos básicos do Terraform.

Criar o balanceador de carga de aplicativo externo

Neste procedimento, você cria o bucket de back-end do balanceador de carga, que serve como wrapper para o bucket do Cloud Storage. Ao criar ou editar um bucket de back-end, é possível ativar o Cloud CDN.

Console

Iniciar o processo de configuração do balanceador de carga de aplicativo externo

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

    Acessar a página "Balanceamento de carga"

  2. Em Balanceamento de carga HTTP(S), clique em Iniciar configuração.
  3. Selecione Da Internet para minhas VMs e clique em Continuar.
  4. Em Gerenciamento de tráfego avançado, selecione uma destas opções:
    • Para balanceadores de carga de aplicativo clássico, selecione Balanceador de carga HTTP(S) clássico.
    • Para balanceadores de carga globais de aplicativos externos, selecione Balanceador de carga HTTP(S) com gerenciamento de tráfego avançado.
  5. Defina o Nome de http-lb e vá para a próxima etapa.

Configure o back-end e ative o Cloud CDN

Crie o bucket de back-end do balanceador de carga, que servirá como um wrapper para o bucket do Cloud Storage. Ao criar ou editar um bucket de back-end, é possível ativar o Cloud CDN.

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

  7. Opcional: modifique as configurações do modo de cache e TTL.

  8. Clique em Criar.

Configure regras de host e correspondentes de caminho

As regras de host e as correspondências de caminho são componentes de configuração do mapa de URL de um balanceador de carga de aplicativo externo.

Em Regras de host e caminho, é possível manter as configurações padrão.

Para um exemplo de configuração personalizado, consulte Como adicionar buckets de back-end a balanceadores de carga.

Para saber mais sobre as regras de host e as correspondências de caminho, consulte a Visão geral dos mapas de URL.

Configure o front-end

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

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

    Se você quiser criar um balanceador de carga HTTPS em vez de um balanceador de carga HTTP, precisará ter um certificado SSL (gcloud compute ssl-certificates list) e preencher os campos da seguinte maneira:

    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 ou Criar um novo certificado
  3. Clique em Concluído.

Analise a configuração

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

gcloud

Configurar 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 um dos seguintes itens:

  • CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS: usa os cabeçalhos definidos de acordo com os metadados de controle de cache no Cloud Storage. O Cloud Storage sempre fornece um cabeçalho Cache-Control para o Cloud CDN. Se nenhum valor for escolhido de maneira explícita, ele envia um valor padrão.

  • 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 enviados pelo Cloud Storage.

Configurar o mapa de URL

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

Configurar o proxy de destino

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

Configurar a regra de encaminhamento

  • Para um balanceador de carga de aplicativo externo global, use o comando da CLI gcloud com load-balancing-scheme=EXTERNAL_MANAGED. Essa configuração oferece recursos avançados de gerenciamento de tráfego.
  • Para um balanceador de carga de aplicativo 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
  }
}

Configurar o mapa de URL

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
}

Configurar 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
}

Configurar 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 balanceador de carga de aplicativo externo global, use com load_balancing_scheme="EXTERNAL_MANAGED". Essa configuração oferece recursos avançados de gerenciamento de tráfego.
  • Para um balanceador de carga de aplicativo clássico, use load_balancing_scheme="EXTERNAL".

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

Enviar tráfego para o bucket de back-end

Depois de criar a regra de encaminhamento global, pode levar vários minutos até a configuração ser propagada globalmente. Após alguns minutos, é possível começar a enviar tráfego para o balanceador de carga.

Console

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

    Acessar a página "Balanceamento de carga"

  2. Clique em http-lb para expandir o balanceador de carga que você acabou de criar.

    Na seção Back-end, confirme se o bucket de back-end está íntegro. Você precisa ver uma marca de seleção verde ao lado do bucket de back-end. Se não estiver assim, tente atualizar a página. Pode levar alguns instantes para o console do Google Cloud indicar que os back-ends estão íntegros.

  3. Depois que o console do Google Cloud mostrar que o bucket de back-end está íntegro, teste o balanceador de carga com um navegador da Web acessando http://IP_ADDRESS/never-fetch/three-cats.jpg. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Seu navegador precisa renderizar uma página com um conteúdo que mostre o arquivo gráfico.

gcloud

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

Anote o endereço IPv4 que foi reservado:

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

Envie uma solicitação curl:

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

Verifique se o Cloud CDN está funcionando

Se você recarregar a página http://IP_ADDRESS/never-fetch/three-cats.jpg várias vezes em sequência, haverá várias ocorrências em cache.

A entrada de registro a seguir mostra uma ocorrência em cache. Para conferir as ocorrências em cache no console do Google Cloud, abra o Explorador de registros e filtre pelo nome da regra de encaminhamento.

Abrir o Explorador de registros

Explorador de registros

{
    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"
}

Console

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

    Acessar a página "Balanceamento de carga"

  2. Clique em http-lb para expandir o balanceador de carga que você acabou de criar.

    Na seção Back-end, confirme se o bucket de back-end está íntegro. Você precisa ver uma marca de seleção verde ao lado do bucket de back-end. Se não estiver assim, tente atualizar a página. Pode levar alguns instantes para o console do Google Cloud indicar que os back-ends estão íntegros.

  3. Depois que o console do Google Cloud mostrar que o bucket de back-end está íntegro, teste o balanceador de carga com um navegador da Web acessando http://IP_ADDRESS/never-fetch/three-cats.jpg. Substitua IP_ADDRESS pelo endereço IP do balanceador de carga. Seu navegador precisa renderizar uma página com um conteúdo que mostre o arquivo gráfico.

gcloud

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

Anote o endereço IPv4 que foi reservado:

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

Envie uma solicitação curl:

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

O conteúdo é buscado no Cloud Storage, armazenado em cache pelo Cloud CDN. Em seguida, ele é validado e recuperado (quando expira) ou então é removido do cache.

O conteúdo do cache tem um cabeçalho Age maior que zero.

O conteúdo que precisa ser atualizado antes do TTL pode ser invalidado e recuperado do Cloud Storage.

Desativar o Cloud CDN

Console

Desative o Cloud CDN para um único bucket 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 em Menu e selecione Editar.
  3. Desmarque as caixas de seleção dos buckets 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 buckets de back-end de uma origem

  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 em Menu e selecione Remover.
  3. Para confirmar, clique em Remover.

gcloud

gcloud compute backend-buckets update BACKEND_BUCKET_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