Configurer un bucket backend

Cloud CDN utilise les ressources de votre choix, c'est-à-dire soit l'équilibreur de charge d'application externe global, soit l'équilibreur de charge d'application classique, pour assurer le routage, la vérification de l'état et la compatibilité avec les adresses IP Anycast. Comme les équilibreurs de charge d'application externes globaux peuvent avoir plusieurs types d'instances backend (instances de VM Compute Engine, pods Google Kubernetes Engine, buckets Cloud Storage ou backends externes en dehors de Google Cloud), vous pouvez choisir les backends (origines) pour lesquels activer Cloud CDN.

Ce guide de configuration explique comment créer un équilibreur de charge d'application externe lorsque Cloud CDN est activé. L'exemple fait appel aux ressources suivantes :

  • Le réseau cloud privé virtuel (VPC) par défaut
  • Un mappage d'URL par défaut
  • Une adresse IP externe réservée
  • Un bucket Cloud Storage en tant que backend
  • Un unique bucket de backend d'équilibreur de charge, qui agit comme un wrapper autour du bucket Cloud Storage

Un bucket de backend est compatible avec les éléments suivants :

  • Buckets Cloud Storage de n'importe quelle classe de stockage, y compris des buckets multirégionaux
  • Stratégies Cloud CDN pour la mise en cache de contenu à la périphérie mondiale de Google

Pour découvrir le fonctionnement de Cloud CDN, consultez la présentation de Cloud CDN.

Par défaut, Cloud Storage utilise le même cache que Cloud CDN. Si vous activez Cloud CDN sur le bucket backend, vous pouvez utiliser les contrôles Cloud CDN sur votre contenu. Les contrôles Cloud CDN incluent, par exemple, les modes cache, les URL signées et l'invalidation. Cloud CDN vous permet également de mettre en cache du contenu volumineux (> 10 Mo). Si vous n'activez pas Cloud CDN sur votre bucket backend, vous ne pouvez utiliser que les en-têtes Cache-Control d'origine pour contrôler la mise en cache du contenu plus petit, tel que défini par les métadonnées Cloud Storage.

Backends de l'équilibreur de charge

Un équilibreur de charge d'application externe utilise un mappage d'URL pour diriger le trafic provenant d'URL spécifiées vers des services spécifiés. Le tableau suivant récapitule les types de backends dans lesquels vous pouvez héberger du contenu et des services.

Configuration du backend d'équilibreur de charge Type de support standard Types de backends
Service de backend Dynamique (par exemple, données)
  • Groupes d'instances non gérés
  • Groupes d'instances gérés
  • Groupes de points de terminaison du réseau internes à Google Cloud
  • Groupes de points de terminaison du réseau externes à Google Cloud
Bucket de backend Statique (par exemple, images)
  • Buckets Cloud Storage (décrits sur cette page)

Avant de commencer

Console

  1. Dans Google Cloud Console, accédez à la page Accueil.

    Accéder à la page d'accueil Google Cloud

  2. À droite de Google Cloud, sélectionnez un projet dans le menu déroulant.

gcloud

     gcloud config set project PROJECT_ID
   

Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

Terraform

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
   

Créer un bucket Cloud Storage

Si vous disposez d'un bucket Cloud Storage existant qui n'est pas déjà attribué à un équilibreur de charge, vous pouvez passer à l'étape suivante.

Lorsque vous créez un bucket Cloud Storage à utiliser comme backend pour un équilibreur de charge d'application externe avec Cloud CDN, nous vous recommandons de choisir un bucket multirégional, qui réplique automatiquement les objets sur plusieurs régions Google Cloud. Cela peut améliorer la disponibilité de votre contenu et augmenter la tolérance aux pannes au sein de votre application.

Console

  1. Dans la console Google Cloud, ouvrez la page Buckets Cloud Storage.

    Ouvrir la page Buckets

  2. Cliquez sur Créer un bucket.
  3. Spécifiez les valeurs des champs du tableau suivant, en conservant toutes les autres valeurs par défaut.

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Nom Saisissez un nom unique pour chaque bucket. Si le nom que vous saisissez n'est pas unique, un message vous invite à en renseigner un autre.
    Type d'emplacement Multirégional
    Emplacement Sélectionnez une région, telle que us (plusieurs régions aux États-Unis).
    Classe de stockage par défaut Standard
    Contrôle des accès Uniforme
  4. Cliquez sur Créer.

  5. Notez le nom du bucket Cloud Storage que vous venez de créer en vue de l'étape suivante.

gcloud

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

Terraform

Pour créer un bucket, utilisez la ressource 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"
  }
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Copier un fichier graphique dans votre bucket Cloud Storage

Pour pouvoir tester la configuration, vous allez copier un fichier graphique depuis un bucket Cloud Storage public vers votre propre bucket Cloud Storage.

gcloud

Exécutez la commande suivante dans Cloud Shell. Remplacez BUCKET_NAME par le nom unique de votre bucket Cloud Storage :

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

Terraform

Pour copier l'objet, utilisez local-exec Provisioner avec la commande 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"
  }
}

Pour importer un objet, vous pouvez également utiliser la ressource 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
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Dans la console Google Cloud, cliquez sur Actualiser pour vérifier que le fichier graphique a bien été copié.

Rendre votre bucket Cloud Storage public

Cet exemple rend votre bucket Cloud Storage lisible publiquement. Il s'agit de l'approche recommandée pour du contenu public. Avec ce paramètre, tous les internautes peuvent afficher et répertorier vos objets et leurs métadonnées, à l'exception des LCA. Pour réduire le risque d'exposition involontaire des données, vous devez généralement dédier des buckets Cloud Storage spécifiques aux objets publics.

Voici des alternatives à l'opération effectuée pour rendre un bucket Cloud Storage entier public:

La procédure suivante permet à tous les utilisateurs d'afficher les objets de votre bucket Cloud Storage, rendant ce dernier lisible publiquement.

Console

  1. Dans la console Google Cloud, ouvrez la page Buckets Cloud Storage.

    Ouvrir la page Buckets

  2. Accédez au bucket et cliquez sur l'onglet Autorisations.
  3. Cliquez sur Ajouter des comptes principaux.
  4. Dans Nouveaux comptes principaux, saisissez allUsers.
  5. Pour le rôle, sélectionnez Cloud Storage > Lecteur des objets de l'espace de stockage.
  6. Cliquez sur Enregistrer.

gcloud

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

Terraform

Pour rendre votre bucket Cloud Storage public, utilisez la ressource 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"
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Réserver une adresse IP externe

Maintenant que votre bucket Cloud Storage est opérationnel, configurez une adresse IP externe statique globale que vos clients utiliseront pour accéder à votre équilibreur de charge.

Cette étape est facultative mais recommandée, car une adresse IP externe statique fournit une adresse unique vers laquelle vous pouvez faire pointer votre domaine.

Console

  1. Dans Google Cloud Console, accédez à la page Adresses IP externes.

    Accéder à la page Adresses IP externes

  2. Pour réserver une adresse IPv4, cliquez sur Réserver une adresse statique.
  3. Dans le champ Nom, spécifiez example-ip.
  4. Définissez le Niveau de service réseau sur Premium.
  5. Définissez Version IP sur IPv4.
  6. Définissez le Type sur Global.
  7. Cliquez sur Réserver.

gcloud

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

Notez l'adresse IPv4 réservée :

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

Terraform

Pour réserver une adresse IP, utilisez la ressource google_compute_global_address.

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

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Créer l'équilibreur de charge d'application externe

Dans cette procédure, vous allez créer le bucket backend de l'équilibreur de charge, qui sert de wrapper à votre bucket Cloud Storage. Lors de la création ou de la modification d'un bucket backend, vous pouvez activer Cloud CDN.

Console

Démarrer le processus de configuration de l'équilibreur de charge d'application externe

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Dans la section Équilibrage de charge HTTP(S), cliquez sur Démarrer la configuration.
  3. Sélectionnez D'Internet vers mes VM, puis cliquez sur Continuer.
  4. Sous Gestion avancée du trafic, sélectionnez l'une des options suivantes :
    • Pour les équilibreurs de charge d'application classiques, sélectionnez Équilibreur de charge HTTP(S) classique.
    • Pour les équilibreurs de charge d'application externes globaux, sélectionnez Équilibreur de charge HTTP(S) avec gestion avancée du trafic.
  5. Dans le champ Nom, spécifiez http-lb puis passez à l'étape suivante.

Configurer le backend et activer Cloud CDN

Vous allez créer le bucket de backend d'équilibreur de charge, qui sert de wrapper à votre bucket Cloud Storage. Lors de la création ou de la modification d'un bucket de backend, vous pouvez activer Cloud CDN.

  1. Cliquez sur Configuration du backend.
  2. Dans la section Services de backend et buckets backend, cliquez sur Créer ou sélectionner des services backend et des buckets backend, puis sur Buckets de backend > Créer un bucket backend.
  3. Dans le champ Nom, spécifiez cat-backend-bucket. Ce nom n'a pas besoin d'être unique et peut être différent du nom du bucket Cloud Storage réel.
  4. Sous Bucket Cloud Storage, cliquez sur Parcourir.
  5. Sélectionnez le nom unique du bucket Cloud Storage que vous avez créé (BUCKET_NAME), puis cliquez sur Sélectionner.
  6. Cliquez sur Activer Cloud CDN.

  7. (Facultatif) Modifiez les paramètres du mode cache et la valeur TTL.

  8. Cliquez sur Create (Créer).

Configurer des règles d'hôte et des outils de mise en correspondance des chemins

Les règles d'hôte et les outils de mise en correspondance des chemins d'accès sont les composants de configuration d'un mappage d'URL de l'équilibreur de charge d'application externe.

Dans la section Règles d'hôte et de chemin d'accès, vous pouvez conserver les paramètres par défaut.

Pour obtenir un exemple de configuration personnalisée, consultez la page Ajouter des buckets de backend à des équilibreurs de charge.

Pour en savoir plus sur les règles d'hôte et les outils de mise en correspondance de chemins d'accès, consultez la page Présentation des mappages d'URL.

Configurer l'interface

  1. Cliquez sur Configuration de l'interface.
  2. Vérifiez que les options sont bien configurées avec ces valeurs.

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTP
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP example-ip
    Port 80

    Si vous souhaitez créer un équilibreur de charge HTTPS au lieu d'un équilibreur de charge HTTP, vous devez disposer d'un certificat SSL (gcloud compute ssl-certificates list) et remplir les champs comme suit.

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTPS
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP example-ip
    Port 443
    Certificat Sélectionnez un certificat ou créez-en un.
  3. Cliquez sur OK.

Vérifier la configuration

  1. Cliquez sur Vérifier et finaliser.
  2. Consultez les sections Buckets backend, Règles d'hôte et de chemin d'accès et Interface.
  3. Cliquez sur Créer.
  4. Attendez jusqu'à ce que l'équilibreur de charge soit créé.
  5. Cliquez sur le nom de l'équilibreur de charge (http-lb).
  6. Notez l'adresse IP de l'équilibreur de charge pour la prochaine tâche. Elle est désignée par l'élément IP_ADDRESS.

gcloud

Configurer le backend

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

Définissez le mode cache en remplaçant CACHE_MODE par l'un des éléments suivants :

  • CACHE_ALL_STATIC ou USE_ORIGIN_HEADERS: utilise les en-têtes définis conformément aux métadonnées de contrôle de cache dans Cloud Storage. Cloud Storage fournit toujours un en-tête Cache-Control à Cloud CDN. Si aucune valeur n'est explicitement choisie, une valeur par défaut est envoyée.

  • FORCE_CACHE_ALL: met en cache tout le contenu, en ignorant les instructions private, no-store ou no-cache dans les en-têtes de réponse Cache-Control envoyés par Cloud Storage.

Configurez le mappage d'URL

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

Configurer le proxy cible

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

Configurer la règle de transfert

  • Pour un équilibreur de charge d'application externe global, exécutez la commande gcloud CLI avec load-balancing-scheme=EXTERNAL_MANAGED. Ce paramètre offre une fonctionnalité de gestion avancée du trafic.
  • Pour un équilibreur de charge d'application classique, utilisez 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

Configurer le backend

Pour configurer le backend, utilisez la ressource 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
  }
}

Configurez le mappage d'URL

Pour configurer le backend, utilisez la ressource google_compute_url_map.

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

Configurer le proxy cible

Pour configurer le proxy cible, utilisez la ressource google_compute_target_http_proxy ou la ressource 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
}

Configurer la règle de transfert

Pour configurer la règle de transfert, utilisez la ressource 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
}
  • Pour un équilibreur de charge d'application externe global, utilisez load_balancing_scheme="EXTERNAL_MANAGED". Ce paramètre offre une fonctionnalité de gestion avancée du trafic.
  • Pour un équilibreur de charge d'application classique, utilisez load_balancing_scheme="EXTERNAL".

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Envoyer du trafic vers votre bucket backend

Une fois la règle de transfert globale créée, la propagation de votre configuration peut prendre plusieurs minutes, au bout desquelles vous pouvez commencer à envoyer du trafic vers l'adresse IP de l'équilibreur de charge.

Console

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur http-lb pour développer l'équilibreur de charge que vous venez de créer.

    Dans la section Backend, vérifiez que le bucket de backend est opérationnel. Une coche verte doit s'afficher à côté de votre bucket de backend. Si ce n'est pas le cas, commencez par actualiser la page. Il peut s'écouler quelques instants avant que la console Google Cloud n'indique que les backends sont opérationnels.

  3. Lorsque la console Google Cloud indique que le bucket de backend est opérationnel, vous pouvez tester votre équilibreur de charge à l'aide d'un navigateur Web en accédant à l'adresse http://IP_ADDRESS/never-fetch/three-cats.jpg. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Votre navigateur doit afficher une page dont le contenu affiche le fichier graphique.

gcloud

Utilisez la commande curl pour tester la réponse à partir de l'URL. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge.

Notez l'adresse IPv4 réservée :

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

Envoyez une requête curl :

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

Vérifier que Cloud CDN fonctionne

Si vous rechargez plusieurs fois de suite la page http://IP_ADDRESS/never-fetch/three-cats.jpg, vous devriez obtenir plusieurs succès de cache (hits).

L'entrée de journal suivante montre un succès de cache). Vous pouvez afficher les succès de cache dans la console Google Cloud en ouvrant l'explorateur de journaux et en filtrant par nom de règle de transfert.

Ouvrez l'explorateur de journaux

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

Console

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur http-lb pour développer l'équilibreur de charge que vous venez de créer.

    Dans la section Backend, vérifiez que le bucket de backend est opérationnel. Une coche verte doit s'afficher à côté de votre bucket de backend. Si ce n'est pas le cas, commencez par actualiser la page. Il peut s'écouler quelques instants avant que la console Google Cloud n'indique que les backends sont opérationnels.

  3. Lorsque la console Google Cloud indique que le bucket de backend est opérationnel, vous pouvez tester votre équilibreur de charge à l'aide d'un navigateur Web en accédant à l'adresse http://IP_ADDRESS/never-fetch/three-cats.jpg. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Votre navigateur doit afficher une page dont le contenu affiche le fichier graphique.

gcloud

Utilisez la commande curl pour tester la réponse à partir de l'URL. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge.

Notez l'adresse IPv4 réservée :

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

Envoyez une requête curl :

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

Le contenu est extrait de Cloud Storage, mis en cache par Cloud CDN, puis validé et extrait à nouveau lorsqu'il expire ou qu'il est supprimé du cache.

Le contenu du cache comporte un en-tête Age supérieur à zéro.

Le contenu qui doit être actualisé avant l'écoulement de la valeur TTL peut être invalidé et extrait à nouveau de Cloud Storage.

Désactiver Cloud CDN

Console

Désactiver Cloud CDN pour un seul bucket de backend

  1. Dans Google Cloud Console, accédez à la page Cloud CDN.

    Accéder à la page "Cloud CDN"

  2. Sur le côté droit de la ligne concernant l'origine, cliquez sur Menu , puis sélectionnez Modifier.
  3. Décochez les cases des buckets de backend qui ne doivent plus utiliser Cloud CDN.
  4. Cliquez sur Mettre à jour.

Supprimer Cloud CDN pour tous les buckets de backend d'une origine donnée

  1. Dans Google Cloud Console, accédez à la page Cloud CDN.

    Accéder à la page "Cloud CDN"

  2. Sur le côté droit de la ligne concernant l'origine, cliquez sur Menu , puis sélectionnez Supprimer.
  3. Cliquez sur Supprimer pour confirmer votre choix.

gcloud

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

La désactivation de Cloud CDN n'invalide pas et ne purge pas les caches. Si vous désactivez puis réactivez Cloud CDN, tout ou partie du contenu mis en cache peut rester en cache. Pour empêcher les caches d'utiliser un contenu, vous devez invalider ce contenu.

Étapes suivantes