Configurer Cloud CDN avec un stockage d'objets tiers

Vous pouvez utiliser une origine personnalisée lorsque le contenu est hébergé sur site ou dans un autre cloud. L'origine personnalisée vous permet de diffuser le contenu à partir de Cloud CDN de Google.

Ce document décrit le processus de configuration du stockage d'objets tiers, tel qu'Amazon Simple Storage Service (Amazon S3) ou Azure Blob Storage en tant qu'origine personnalisée pour Cloud CDN. Les origines personnalisées et Cloud CDN fonctionnent conjointement avec un équilibreur de charge HTTP(S) externe.

Architecture

Pour créer l'origine personnalisée, vous devez créer un groupe de points de terminaison du réseau Internet (NEG) qui pointe vers le service de stockage tiers en tant que backend de l'équilibreur de charge. Les NEG Internet sont utilisés pour les origines personnalisées.

Pour configurer le bucket de stockage tiers en tant que backend, procédez comme suit :

  1. Préparez le bucket de stockage tiers pour diffuser du contenu.
  2. Créez un NEG Internet qui utilise le nom de domaine complet du bucket.
  3. Configurez l'équilibreur de charge HTTP(S) externe avec le NEG Internet en tant que backend.
  4. Testez la configuration.

Préparer le bucket pour diffuser le contenu

Avant de commencer la configuration dans Google Cloud, assurez-vous que le bucket est configuré correctement. Ces instructions supposent que vous utilisez Amazon S3 et que vous disposez des autorisations nécessaires pour modifier le bucket et les objets Amazon S3.

  1. Assurez-vous que le bucket Amazon S3 et les objets qu'il contient sont publics. Pour obtenir des instructions, consultez la base de connaissances AWS. Par exemple : Comment puis-je accorder un accès en lecture public à certains objets de mon bucket Amazon S3 ?

  2. Assurez-vous que le contenu répond aux exigences de mise en cache, répertoriées dans la section Contenu pouvant être mis en cache. Si vous devez ajouter des métadonnées d'objet, consultez la base de connaissances AWS. Par exemple : Modifier des métadonnées d'objet

  3. Notez le point de terminaison du bucket Amazon S3 (le nom de domaine complet). Vous avez besoin de ces informations lorsque vous configurez le NEG Internet. Pour obtenir les informations sur le point de terminaison, suivez les instructions fournies dans la base de connaissances AWS. Par exemple : Accéder à un bucket. Vous pouvez également obtenir l'URL du point de terminaison Amazon S3 à partir de la page de présentation de l'objet.

Créer un NEG Internet utilisant le nom d'hôte du bucket

Pour plus de simplicité, cet exemple utilise le nom de domaine complet backend.example.com. Veillez à remplacer ce nom par le nom de domaine complet de votre bucket de stockage tiers, qui peut ressembler à http://unique-name-bucket.s3-us-west-1.amazonaws.com/.

Ce guide s'appuie sur un exemple pour expliquer les principes fondamentaux de l'utilisation d'une origine personnalisée dans un groupe de points de terminaison du réseau Internet (NEG). Une origine personnalisée correspond à un point de terminaison Internet externe à Google Cloud. Vous pouvez utiliser un NEG Internet en tant que backend pour un équilibreur de charge HTTP(S) externe et améliorer les performances en utilisant la mise en cache Cloud CDN.

Ce guide explique comment configurer un équilibreur de charge HTTP(S) externe global à l'aide d'un service de backend équipé de Cloud CDN et agissant comme proxy vers un serveur d'origine personnalisé situé à l'adresse backend.example.com.

Dans cet exemple, l'équilibreur de charge accepte les requêtes HTTPS des clients et les transfère vers l'origine personnalisée en tant que requêtes HTTP/2. Cet exemple part du principe que l'origine est compatible avec HTTP/2.

Vous pouvez également configurer un équilibreur de charge compatible avec les requêtes HTTP ou HTTP/2, et utiliser HTTPS lors de l'envoi par proxy de requêtes à l'origine personnalisée.

Dans ce guide, nous partons du principe que vous avez déjà configuré un équilibreur de charge et que vous ajoutez un nouveau backend à origine personnalisée.

Voici un exemple d'architecture :

Cas d'utilisation du bucket S3 pour les origines personnalisées
Cas d'utilisation du bucket S3 pour les origines personnalisées

Dans le schéma, www.example.com comporte une interface d'équilibreur de charge avec l'adresse IP 120.1.1.1. En cas d'échec du cache, les requêtes utilisateur pour /cart/id/1223515 sont extraites de l'origine personnalisée via HTTP/2. Le reste du trafic entrant est dirigé soit vers le service de backend Google Cloud avec des VM Compute Engine, soit vers le bucket du backend, en fonction du mappage d'URL.

Avant de commencer

Avant de suivre ce guide, familiarisez-vous avec les points suivants :

Autorisations

Pour suivre ce guide, vous devez créer un NEG Internet, puis créer ou modifier un équilibreur de charge HTTP(S) externe dans un projet. Vous devez être propriétaire ou éditeur du projet ou disposer des deux rôles IAM Compute Engine suivants.

Tâche Rôle requis
Créer et modifier des composants d'équilibreur de charge Administrateur réseau
Créer et modifier des NEG Administrateur d'instances Compute

Configurer un équilibreur de charge avec une origine personnalisée

Ce guide vous explique comment configurer et tester un NEG Internet.

Vue d'ensemble de la configuration

La configuration d'un NEG Internet implique les opérations suivantes :

  • La définition du point de terminaison Internet d'un NEG Internet
  • L'ajout d'un NEG Internet en tant que backend à un service de backend
  • La définition du trafic utilisateur à mapper vers ce service de backend via la configuration du mappage d'URL de votre équilibreur de charge HTTP(S) externe

Cet exemple crée les ressources suivantes :

  • Une règle de transfert avec l'adresse IP 120.1.1.1, qui dirige les demandes entrantes vers un serveur proxy cible.
    • Le networkTier de la règle de transfert doit être PREMIUM.
  • Le proxy cible analyse chaque requête par rapport au mappage d'URL afin de déterminer le service de backend adapté à la requête.
    • Pour les origines personnalisées, le proxy cible doit être TargetHttpProxy ou TargetHttpsProxy. Cet exemple utilise TargetHttpsProxy.
  • Le service Cloud CDN activé (facultatif) sur le service de backend permet de mettre en cache et de diffuser les réponses depuis les caches de Cloud CDN.
  • La configuration du service de backend dirige le trafic vers un groupe de points de terminaison du réseau Internet. Ce NEG Internet contient le point de terminaison du réseau dans lequel l'équilibreur de charge HTTP(S) externe envoie le trafic en cas de défaut du cache Cloud CDN.
  • Cet exemple inclut un en-tête de requête défini par l'utilisateur, qui est obligatoire lorsque l'origine personnalisée attend une valeur particulière pour l'en-tête Host de la requête HTTP.

La configuration se présente comme suit :

Cloud CDN avec backend de bucket Amazon S3
Cloud CDN avec backend de bucket Amazon S3

Créer le point de terminaison NEG et Internet

Console

  1. Dans Google Cloud Console, accédez à la page Groupes de points de terminaison du réseau.

    Accéder à la page "Groupes de points de terminaison du réseau"

  2. Cliquez sur Créer un groupe de points de terminaison du réseau.
  3. Saisissez le nom du groupe de points de terminaison du réseau : example-fqdn-neg.
  4. Pour le type de groupe de points de terminaison du réseau, sélectionnez Groupe de points de terminaison du réseau Internet.
  5. Pour le port par défaut, saisissez 443.
  6. Pour le nouveau point de terminaison du réseau, sélectionnez Nom de domaine complet et port.
  7. Comme nom de domaine complet, saisissez backend.example.com.
  8. Pour le type de port, sélectionnez Par défaut et vérifiez que le numéro de port est 443.
  9. Cliquez sur Créer.

gcloud

  1. Créez un NEG Internet et définissez --network-endpoint-type sur internet-fqdn-port (le nom d'hôte et le port où votre origine peut être atteinte) :

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --network-endpoint-type="internet-fqdn-port" --global
    
  2. Ajoutez votre point de terminaison au NEG. Si aucun port n'est spécifié, le port est défini par défaut sur 80 (HTTP) ou 443 (HTTPS, HTTP/2) en fonction du protocole configuré dans le service de backend. Veillez à inclure l'option --global :

    gcloud compute network-endpoint-groups update example-fqdn-neg \
        --add-endpoint="fqdn=backend.example.com,port=443" \
        --global
    
  3. Répertoriez les NEG Internet créés :

    gcloud compute network-endpoint-groups list --global
    

    Résultat :

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. Répertoriez le point de terminaison dans ce NEG :

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

    Sortie :

    INSTANCE   IP_ADDRESS   PORT   FQDN
                                   backend.example.com
    

Ajouter une origine personnalisée à un équilibreur de charge

L'exemple suivant met à jour un équilibreur de charge existant.

Dans l'équilibreur de charge existant, le service par défaut est un service Google Cloud. L'exemple modifie le mappage d'URL existant en lui ajoutant un outil de mise en correspondance des chemins d'accès, qui envoie toutes les demandes de cart/id/1223515 au service de backend images associé au NEG Internet.

Console

Créer le service de backend et ajouter le NEG Internet

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

    Accéder à la page Équilibrage de charge

  2. Pour ajouter le service de backend à un équilibreur de charge existant, sélectionnez votre équilibreur de charge HTTP(S) externe, cliquez sur Menu , puis sélectionnez Modifier.
  3. Cliquez sur Configuration du backend.
  4. Dans le menu déroulant Créer ou sélectionner des services backend et des buckets backend, sélectionnez Services backend > Créer un service backend.
  5. Définissez le nom du service de backend sur images.
  6. Pour le type de backend, sélectionnez Groupe de points de terminaison du réseau Internet.
  7. Sélectionnez le protocole que vous souhaitez utiliser depuis l'équilibreur de charge vers le NEG Internet. Pour cet exemple, sélectionnez HTTP/2.
  8. Sous Nouveau backend > Groupe de points de terminaison du réseau Internet, sélectionnez example-fqdn-neg, puis cliquez sur Terminé.
  9. Sélectionnez Activer Cloud CDN.
  10. Conservez les paramètres du mode de cache et la valeur TTL par défaut.
  11. Dans Configurations avancées, sous En-têtes de requêtes personnalisés, cliquez sur Ajouter un en-tête.
    1. Dans le champ Nom de l'en-tête, saisissez Host.
    2. Dans le champ Valeur d'en-tête, saisissez backend.example.com.
  12. Cliquez sur Créer.
  13. Laissez la fenêtre ouverte pour continuer.

Associer le service de backend à un mappage d'URL existant

  1. Cliquez sur Règles d'hôte et de chemin d'accès.
  2. La ou les premières lignes incluent des services Google Cloud dans la colonne de droite, et l'une d'entre elles contient déjà la règle par défaut Any unmatched (default) pour les hôtes et les chemins d'accès.
  3. Dans la colonne de droite, assurez-vous qu'il existe une ligne dont la propriété images est sélectionnée. Si ce n'est pas le cas, cliquez sur Ajouter une règle d'hôte et de chemin d'accès, puis sélectionnez images. Remplissez les autres champs comme suit :
    1. Dans le champ Hôtes, saisissez *.
    2. Sous Chemins d'accès, saisissez /cart/id/1223515.

Vérifier et finaliser

  1. Cliquez sur Vérifier et finaliser.
  2. Comparez vos paramètres à ce que vous aviez l'intention de créer.
  3. Si tout semble correct, cliquez sur Créer pour créer votre équilibreur de charge HTTP(S) externe.

gcloud

  1. Créez un service de backend pour le NEG :

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --protocol=HTTP2
    
  2. Configurez le service de backend pour ajouter l'en-tête de requête personnalisé Host: backend.example.com à la requête :

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. Ajoutez le NEG Internet au service de backend à l'aide de la commande backend-services add-backend :

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. Associez le nouveau service de backend au mappage d'URL de l'équilibreur de charge en créant une règle de correspondance pour diriger les requêtes vers ce backend :

    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
    

    Remplacez les éléments suivants :

    • EXAMPLE_URL_MAP : nom de votre mappage d'URL existant
    • GCP_SERVICE_EXAMPLE : nom d'un service de backend par défaut
    • CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE : nom de cette nouvelle règle de chemin d'accès
    • /CART/ID/1223515 : chemin d'accès
    • IMAGES : nom du nouveau service de backend avec le NEG Internet associé

Tester l'équilibreur de charge HTTP(S) externe

Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP. Si vous avez configuré un domaine, vous pouvez également envoyer du trafic vers le nom de domaine. Toutefois, la propagation DNS peut prendre un certain temps. Vous pouvez donc commencer à utiliser l'adresse IP à des fins de test.

  1. Accédez à la page Équilibrage de charge dans Google Cloud Console.
    Accéder à la page Équilibrage de charge
  2. Cliquez sur l'équilibreur de charge que vous venez de créer.
  3. Notez l'adresse IP de l'équilibreur de charge.
  4. Si vous avez créé un équilibreur de charge HTTP, vous pouvez le tester à l'aide d'un navigateur Web en accédant à http://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du service helloworld.

    Si vous avez créé un équilibreur de charge HTTPS, vous pouvez le tester à l'aide d'un navigateur Web en accédant à https://IP_ADDRESS. Remplacez IP_ADDRESS par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du service helloworld.

    Si cela ne fonctionne pas et que vous utilisez un certificat géré par Google, vérifiez que l'état de votre ressource de certificat est ACTIF. Pour en savoir plus, consultez la section Vérifier l'état du certificat SSL géré par Google.

    Vous pouvez également utiliser curl depuis l'interface de ligne de commande de votre machine locale. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge.

    Si vous utilisez un certificat géré par Google, testez le domaine pointant vers l'adresse IP de l'équilibreur de charge. Exemple :

    curl -s 'backend.example.com:443' --connect-to test.example.com:443:IP_ADDRESS:443
    

  5. (Facultatif) Si vous utilisez un domaine personnalisé, vous devrez peut-être attendre la propagation des paramètres DNS mis à jour. Testez ensuite votre domaine (par exemple, backend.example.com) dans le navigateur Web.

    Pour obtenir de l'aide sur la résolution des problèmes, consultez la section Résoudre les problèmes liés à l'origine personnalisée et aux NEG Internet.

Tester Cloud CDN

Test 1 : Appel direct au point de terminaison du bucket

Ce test utilise les commandes time et wget d'une VM. L'exemple télécharge /cart/id/1223515/image.jpg à partir du bucket backend.example.com.

À partir du résultat, vous pouvez voir que la requête globale prend 78 ms. Cala correspond au temps nécessaire pour récupérer directement une image de 3,3 Mo à partir d'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

Test 2 : Première requête via Cloud CDN

Ce test utilise l'adresse IP de l'équilibreur de charge pour récupérer le fichier /cart/id/1223515/image.jpg. Comme il s'agit de la première requête, il doit s'agir d'une erreur et Cloud CDN devrait extraire l'image de l'origine, soit Amazon S3. À partir du résultat, vous pouvez voir que la requête a pris 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

Test 3 : Deuxième requête via CDN

Nous allons maintenant effectuer une autre requête à l'aide de cette adresse IP d'équilibreur de charge. Cette fois, nous devrions obtenir une réponse mise en cache, et cela devrait donc être plus rapide que les deux premiers tests.

Nous utilisons à nouveau la même adresse IP LB LOAD_BALANCER_IP_ADDRESS. Le résultat indique que la requête n'a pris que 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

Valider à l'aide de journaux

Les journaux pour Cloud CDN sont associés à l'équilibreur de charge HTTP(S) externe auquel les backends compatibles avec Cloud CDN sont associés. À l'aide des journaux, vous pouvez vérifier si une requête est un appel ou une erreur. Pour en savoir plus sur les journaux Cloud CDN, consultez la page Afficher les journaux.

Limites

  • Le bucket tiers et les objets doivent être publics. Les origines personnalisées ne sont pas compatibles avec les URL signées ou les cookies signés.

Étape suivante