Configura un bucket de backend

Cloud CDN aprovecha el balanceador de cargas de aplicaciones externo global o el balanceador de cargas de aplicaciones clásico para proporcionar enrutamiento, verificación de estado y compatibilidad con IP Anycast. Debido a que los balanceadores de cargas de aplicaciones externos globales pueden tener varios tipos de instancias de backend (instancias de VM de Compute Engine, Pods de Google Kubernetes Engine, buckets de Cloud Storage o backends externos fuera de Google Cloud), puedes elegir para qué backends (orígenes) habilitar Cloud CDN.

En esta guía de configuración, se muestra cómo crear un balanceador de cargas de aplicaciones externo con Cloud CDN habilitado. En el ejemplo, se usan los siguientes recursos:

  • La red predeterminada de nube privada virtual (VPC)
  • Un mapa de URL predeterminado
  • Una dirección IP externa reservada
  • Un bucket de Cloud Storage como backend
  • Un bucket de backend del balanceador de cargas único que actúa como un wrapper alrededor del bucket de Cloud Storage

Un bucket de backend admite lo siguiente:

  • Buckets de Cloud Storage de cualquier clase de almacenamiento, incluidos los buckets multirregionales
  • Políticas de Cloud CDN para almacenar en caché el contenido en el extremo global de Google

Si deseas obtener información para saber cómo funciona Cloud CDN, consulta la Descripción general de Cloud CDN.

De forma predeterminada, Cloud Storage usa la misma caché que usa Cloud CDN. Si habilitas Cloud CDN en el bucket de backend, puedes usar los controles de Cloud CDN en tu contenido. Los controles de Cloud CDN incluyen, por ejemplo, los modos de almacenamiento en caché, las URL firmadas y la invalidación. Cloud CDN también te permite almacenar en caché contenido grande (más de 10 MB). Si no habilitas Cloud CDN en tu bucket de backend, solo puedes usar encabezados Cache-Control de origen para controlar el almacenamiento en caché del contenido más pequeño, como lo configuran los metadatos de Cloud Storage.

Backends del balanceador de cargas

Un balanceador de cargas de aplicaciones externo usa un mapa de URL para dirigir el tráfico de las URLs especificadas a los servicios especificados. En la siguiente tabla, se resumen los tipos de backends en los que puedes alojar contenido y servicios.

Configuración de backend del balanceador de cargas Tipo de contenido típico Tipos de backend
Servicio de backend Dinámico (como datos)
  • Grupos de instancias no administrados
  • Grupos de instancias administrados
  • Grupos de extremos de red internos en Google Cloud
  • Grupos de extremos de red externos a Google Cloud
Bucket de backend Estático (como imágenes)
  • Buckets de Cloud Storage (que se analizan en esta página)

Antes de comenzar

Consola

  1. En la consola de Google Cloud, ve a la página principal.

    Ir a la página principal de Google Cloud

  2. A la derecha de Google Cloud, selecciona un proyecto del menú desplegable.

gcloud

     gcloud config set project PROJECT_ID
   

Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

Crea un bucket de Cloud Storage

Si tienes un bucket de Cloud Storage existente que aún no se asignó a un balanceador de cargas, puedes pasar al siguiente paso.

Cuando creas un bucket de Cloud Storage para usarlo como backend de un balanceador de cargas de aplicaciones externo con Cloud CDN, te recomendamos que elijas un bucket multirregional, que replica de forma automática los objetos en varias regiones de Google Cloud. Esto puede mejorar la disponibilidad de tu contenido y la tolerancia a errores en tu aplicación.

Consola

  1. En la consola de Google Cloud, abre la página Buckets de Cloud Storage.

    Abrir la página Buckets

  2. Haz clic en Crear bucket.
  3. Especifica los valores para los campos de la siguiente tabla y deja los demás en sus valores predeterminados.

    Propiedad Valor (escribe el valor o selecciona una opción como se especifica)
    Nombre Para cada bucket, ingresa un nombre global único. Si el nombre que ingresas no es único, verás un mensaje para probar con otro nombre.
    Tipo de ubicación Multirregional
    Ubicación Selecciona una región, como EE.UU. (varias regiones en Estados Unidos).
    Clase de almacenamiento predeterminada Estándar
    Control de acceso Uniforme
  4. Haz clic en Crear.

  5. Toma nota del nombre del bucket de Cloud Storage recién creado para el siguiente paso.

gcloud

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

Terraform

Para crear un bucket, usa el 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"
  }
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Copia un archivo gráfico en tu bucket de Cloud Storage

Para que puedas probar la configuración, copia un archivo gráfico de un bucket público de Cloud Storage en tu propio bucket de Cloud Storage.

gcloud

Ejecuta el siguiente comando en Cloud Shell. Reemplaza BUCKET_NAME por el nombre de tu bucket único de Cloud Storage:

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

Terraform

Para copiar el objeto, usa local-exec Provisioner con el 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 subir un objeto, usa el 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
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

En la consola de Google Cloud, haz clic en Actualizar para verificar que el archivo gráfico esté copiado.

Haz que tu bucket de Cloud Storage sea público

En este ejemplo, se muestra cómo hacer que tu bucket de Cloud Storage tenga acceso público de lectura. Este es el enfoque recomendado para el contenido público. Con esta configuración, cualquier persona en Internet puede ver y enumerar tus objetos y sus metadatos, sin incluir las LCA. Para reducir el riesgo de exposición involuntaria de datos, por lo general, debes dedicar buckets específicos de Cloud Storage para objetos públicos.

Las siguientes son alternativas para hacer público un bucket de Cloud Storage completo:

En el siguiente procedimiento, se otorga a todos los usuarios acceso para ver los objetos de tu bucket de Cloud Storage, lo que hace que el bucket tenga acceso público de lectura.

Consola

  1. En la consola de Google Cloud, abre la página Buckets de Cloud Storage.

    Abrir la página Buckets

  2. Navega al bucket y haz clic en la pestaña Permisos.
  3. Haz clic en Agregar principales.
  4. En Principales nuevas, ingresa allUsers.
  5. Para la función, selecciona Cloud Storage > Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

gcloud

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

Terraform

Para hacer público tu bucket de Cloud Storage, usa el 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"
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Reservar una dirección IP externa

Ahora que el bucket de Cloud Storage está en funcionamiento, configura una dirección IP externa estática global que tus clientes usen para llegar al balanceador de cargas.

Este paso es opcional, pero se recomienda hacerlo, ya que una dirección IP externa estática proporciona una sola dirección a la que puedes apuntar tu dominio.

Consola

  1. En la consola de Google Cloud, ve a la página Direcciones IP externas.

    Ir a la página Direcciones IP externas

  2. Para reservar una dirección IPv4, haz clic en Reservar dirección estática.
  3. Asigna un Nombre de example-ip.
  4. Establece el Nivel de servicio de red en Premium.
  5. Configura la Versión de IP como IPv4.
  6. Configura el Tipo como Global.
  7. Haz clic en Reservar.

gcloud

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

Tome nota de la dirección IPv4 que estaba reservada:

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

Terraform

Para reservar una dirección IP, usa el recurso google_compute_global_address.

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

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Crea el balanceador de cargas de aplicaciones externo

En este procedimiento, crearás el bucket de backend del balanceador de cargas, que funciona como wrapper para tu bucket de Cloud Storage. Cuando creas o editas un bucket de backend, puedes habilitar Cloud CDN.

Consola

Inicia el proceso de configuración del balanceador de cargas de aplicaciones externo

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.
  3. Selecciona De Internet a mis VM y, luego, haz clic en Continuar.
  4. En Administración avanzada del tráfico, selecciona una de las siguientes opciones:
    • Para los balanceadores de cargas de aplicaciones clásicos, selecciona Balanceador de cargas de HTTP(S) clásico.
    • Para balanceadores de cargas de aplicaciones externos globales, selecciona Balanceador de cargas HTTP(S) con administración avanzada de tráfico.
  5. Establece el Nombre en http-lb y, luego, ve al paso siguiente.

Configura el backend y habilita Cloud CDN

Crea el bucket de backend del balanceador de cargas, que funciona como wrapper para el bucket de Cloud Storage. Cuando creas o editas un bucket de backend, puedes habilitar Cloud CDN.

  1. Haz clic en Configuración de backend.
  2. En Servicios y buckets de backend, haz clic en Crear o seleccionar servicios y buckets de backend. A continuación, haz clic en Buckets de backend > Crear un bucket de backend.
  3. Configura el campo Nombre como cat-backend-bucket. No es necesario que este nombre sea único a nivel global, y puede ser diferente al nombre del bucket real de Cloud Storage.
  4. En bucket de Cloud Storage, haz clic en Explorar.
  5. Selecciona el BUCKET_NAME único global de Cloud Storage que creaste y, a continuación, haz clic en Seleccionar.
  6. Haz clic en Habilitar Cloud CDN.

  7. Modifica la configuración del modo de almacenamiento en caché y de TTL (opcional).

  8. Haz clic en Crear.

Configura reglas de host y comparadores de rutas de acceso

Las reglas de host y los comparadores de rutas de acceso son componentes de configuración del mapa de URL de un balanceador de cargas de aplicaciones externo.

En Reglas de host y ruta de acceso, puedes mantener la configuración predeterminada.

Para ver un ejemplo de configuración personalizada, consulta Agrega buckets de backend a balanceadores de cargas.

Para obtener más información sobre las reglas de host y los comparadores de rutas de acceso, consulta la Descripción general de los mapas de URL.

Configura el frontend

  1. Haz clic en Configuración de frontend.
  2. Verifica que las siguientes opciones estén configuradas con estos valores.

    Propiedad Valor (escribe un valor o selecciona una opción como se especifica)
    Protocolo HTTP
    Nivel de servicio de red Premium
    Versión de IP IPv4
    Dirección IP example-ip
    Puerto 80

    Si deseas crear un balanceador de cargas de HTTPS en lugar de un balanceador de cargas de HTTP, debes tener un certificado SSL (gcloud compute ssl-certificates list) y debes completar los campos de la siguiente manera.

    Propiedad Valor (escribe un valor o selecciona una opción como se especifica)
    Protocolo HTTPS
    Nivel de servicio de red Premium
    Versión de IP IPv4
    Dirección IP example-ip
    Puerto 443
    Certificado Selecciona un certificado o crea uno nuevo
  3. Haz clic en Listo.

Revisa la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa los Buckets de backend, las Reglas de host y ruta de acceso y las secciones sobre Frontend.
  3. Haz clic en Crear.
  4. Espera a que se cree el balanceador de cargas.
  5. Haz clic en el nombre del balanceador de cargas (http-lb).
  6. Anota la dirección IP del balanceador de cargas para la siguiente tarea. Se hace referencia a ella como IP_ADDRESS.

gcloud

Configura el backend

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

Para establecer el modo de almacenamiento en caché, reemplaza CACHE_MODE por uno de los siguientes valores:

  • CACHE_ALL_STATIC o USE_ORIGIN_HEADERS: Usa los encabezados configurados según los metadatos de control de caché en Cloud Storage. Cloud Storage siempre proporciona un encabezado Cache-Control a Cloud CDN. Si no se elige ningún valor de forma explícita, se envía un valor predeterminado.

  • FORCE_CACHE_ALL: Almacena en caché todo el contenido, sin importar las directivas private, no-store o no-cache en los encabezados de respuesta Cache-Control que envíe Cloud Storage.

Configura el mapa de URL

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

Configura el proxy de destino

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

Configura la regla de reenvío

  • Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con load-balancing-scheme=EXTERNAL_MANAGED. Esta configuración ofrece capacidad avanzada de administración de tráfico.
  • Para un balanceador de cargas de aplicaciones clásico, usa 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

Configura el backend

Para configurar el backend, usa el 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
  }
}

Configura el mapa de URL

Para configurar el backend, usa el recurso google_compute_url_map.

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

Configura el proxy de destino

Para configurar el proxy de destino, usa el recurso google_compute_target_http_proxy o el 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
}

Configura la regla de reenvío

Para configurar la regla de reenvío, usa el 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 un balanceador de cargas de aplicaciones externo global, úsalo con load_balancing_scheme="EXTERNAL_MANAGED". Esta configuración ofrece capacidad avanzada de administración de tráfico.
  • Para un balanceador de cargas de aplicaciones clásico, usa load_balancing_scheme="EXTERNAL".

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Envía tráfico a tu bucket de backend

Después de crear la regla de reenvío global, la configuración puede demorar varios minutos en propagarse a nivel mundial. Después de varios minutos, puedes comenzar a enviar tráfico a la dirección IP del balanceador de cargas.

Consola

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. Haz clic en http-lb para expandir el balanceador de cargas que acabas de crear.

    En la sección Backend, confirma que el bucket de backend esté en buen estado. Debe haber una marca de verificación verde junto al bucket de backend. En caso contrario, primero vuelve a cargar la página. Puede llevar unos minutos que la consola de Cloud indique que los backends están en buen estado.

  3. Después de que en la consola de Cloud se muestre que el bucket de backend está en buen estado, puedes probar tu balanceador de cargas con un navegador web en http://IP_ADDRESS/never-fetch/three-cats.jpg. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Tu navegador debe renderizar una página con contenido que muestre el archivo gráfico.

gcloud

Usa el comando curl para probar la respuesta desde la URL. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

Toma nota de la dirección IPv4 que estaba reservada:

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

Envía una solicitud curl como la siguiente:

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

Verifica que Cloud CDN esté funcionando

Si vuelves a cargar la página http://IP_ADDRESS/never-fetch/three-cats.jpg varias veces seguidas y con rapidez, deberían existir varios aciertos de caché.

En la siguiente entrada de registro, se muestra un acierto de caché. Para ver los aciertos de caché, abre el Explorador de registros en la consola de Google Cloud y filtra por el nombre de regla de reenvío.

Abrir el 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"
}

Consola

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas.

    Ir a la página Balanceo de cargas

  2. Haz clic en http-lb para expandir el balanceador de cargas que acabas de crear.

    En la sección Backend, confirma que el bucket de backend esté en buen estado. Debe haber una marca de verificación verde junto al bucket de backend. En caso contrario, primero vuelve a cargar la página. Puede llevar unos minutos que la consola de Cloud indique que los backends están en buen estado.

  3. Después de que en la consola de Cloud se muestre que el bucket de backend está en buen estado, puedes probar tu balanceador de cargas con un navegador web en http://IP_ADDRESS/never-fetch/three-cats.jpg. Reemplaza IP_ADDRESS por la dirección IP del balanceador de cargas. Tu navegador debe renderizar una página con contenido que muestre el archivo gráfico.

gcloud

Usa el comando curl para probar la respuesta desde la URL. Reemplaza IP_ADDRESS por la dirección IPv4 del balanceador de cargas.

Toma nota de la dirección IPv4 que estaba reservada:

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

Envía una solicitud curl como la siguiente:

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

El contenido se recupera de Cloud Storage, se almacena en caché con Cloud CDN y, luego, se valida y se vuelve a recuperar cuando vence o se expulsa de la caché.

El contenido de la caché tiene un encabezado Age superior a cero.

El contenido que debe actualizarse antes que el TTL se puede invalidar y volver a recuperar desde Cloud Storage.

Inhabilita Cloud CDN

Consola

Inhabilita Cloud CDN para un solo bucket de backend

  1. En la consola de Google Cloud, ve a la página Cloud CDN.

    Ir a la página Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Editar.
  3. Desmarca las casillas de verificación de los buckets de backend que deseas que dejen de usar Cloud CDN.
  4. Haz clic en Actualizar.

Quita Cloud CDN de todos los buckets de backend de un origen

  1. En la consola de Google Cloud, ve a la página Cloud CDN.

    Ir a la página Cloud CDN

  2. En el lado derecho de la fila de origen, haz clic en Menú y, luego, selecciona Quitar.
  3. Para confirmar la acción, haz clic en Quitar.

gcloud

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

Inhabilitar Cloud CDN no invalida ni borra definitivamente las memorias caché. Si desactivas Cloud CDN y vuelves a activarlo, es probable que la mayor parte del contenido almacenado en caché, o todo ese contenido, aún siga almacenado en caché. Para evitar que las memorias caché usen el contenido, debes invalidarlo.

¿Qué sigue?