Migrer un domaine personnalisé App Engine vers Cloud Load Balancing

Ce guide explique comment configurer un nouveau point de terminaison public pour votre application App Engine à l'aide de Cloud Load Balancing.

Avec Cloud Load Balancing, vous configurez votre point de terminaison de domaine personnalisé en tant que service de frontend et vous configurez votre application App Engine en tant que service de backend à l'aide d'un groupe de points de terminaison du réseau sans serveur (NEG). Le trafic vers le point de terminaison du service de frontend de Cloud Load Balancing est acheminé de la même manière qu'auparavant, y compris toutes les règles de routage que vous définissez dans le fichier dispatch.yaml de votre application.

Le schéma suivant décrit les modifications apportées à votre application :

Prenez un domaine personnalisé App Engine et transférez les requêtes entrantes vers un service de frontend Cloud Load Balancing qui distribue les requêtes au service de backend App Engine

En migrant vers Cloud Load Balancing, vous bénéficiez d'une flexibilité accrue dans la gestion du trafic lorsque vous atteignez votre domaine, par exemple en diffusant du contenu statique à partir de Cloud Storage ou en ajoutant des services exécutés sur d'autres plates-formes de calcul telles que Cloud Run et Google Kubernetes Engine.

Vous bénéficiez également d'un accès aux principales fonctionnalités Google Cloud non disponibles sur App Engine, par exemple :

  • Google Cloud Armor pour une sécurité renforcée avec la protection DDoS avancée, le contrôle des accès basés sur l'adresse IP et la géolocalisation, les règles de pare-feu d'application Web, etc.
  • Cloud CDN pour la diffusion de contenu mis en cache
  • Règles SSL pour gérer les fonctionnalités SSL et les versions TLS que votre application accepte

Ce guide explique comment transférer des requêtes entrantes de votre service App Engine avec un domaine personnalisé vers un service de frontend Cloud Load Balancing :

  1. S'assurer de disposer des autorisations requises
  2. Créer un certificat géré par Google.
  3. Configurer Cloud Load Balancing
  4. Tester l'équilibreur de charge
  5. Connecter un domaine à votre équilibreur de charge
  6. Supprimer le mappage de domaine personnalisé App Engine
  7. Configurer le contrôle d'entrée pour autoriser l'accès uniquement via Cloud Load Balancing

Avant de commencer

Vous devez disposer d'une application App Engine avec un domaine personnalisé configuré dans les paramètres App Engine.

Configurer les autorisations

Pour suivre ce guide, vous devez créer un certificat géré par Google, un NEG sans serveur et un équilibreur de charge HTTP(S) externe dans un projet. Vous devez être propriétaire ou éditeur du projet, ou disposer des rôles IAM suivants :

Tâche Rôle requis
Créer un certificat SSL géré par Google à l'aide du gestionnaire de certificats Propriétaire du gestionnaire de certificats ou Éditeur du gestionnaire de certificats, et Administrateur de l'équilibreur de charge Compute
Mettre à jour les enregistrements DNS du domaine personnalisé Administrateur Cloud DNS si vous utilisez Cloud DNS comme solution DNS.

Si vous utilisez un autre fournisseur DNS, vous devez ajouter et mettre à jour les enregistrements DNS du domaine personnalisé.
Créer des composants d'équilibrage de charge et de mise en réseau Administrateur de réseaux Compute
Créer et modifier des NEG Administrateur d'instances Compute
Créer et modifier des certificats SSL Administrateur de sécurité de Compute
Supprimer des domaines personnalisés dans les paramètres App Engine Rôle d'administrateur App Engine ou un rôle contenant l'autorisation appengine.applications.update.

Créer un certificat SSL géré par Google

Un certificat SSL géré par Google (également appelé certificat TLS dans la documentation) permet à Google Cloud d'obtenir, de gérer et de renouveler automatiquement des certificats. Pour migrer vers l'interface Cloud Load Balancing sans provoquer de temps d'arrêt pour votre service App Engine existant, vous devez utiliser le gestionnaire de certificats afin de créer une autorisation DNS et votre certificat géré par Google.

Notez que la documentation Cloud Load Balancing contient des instructions similaires sur la création d'un certificat SSL géré par Google. Cependant, ces instructions utilisent l'autorisation de l'équilibreur de charge, ce qui nécessite un temps d'arrêt pour votre service App Engine qui peut durer plusieurs heures. Pour en savoir plus, consultez la section Autorisation de domaine pour les certificats gérés par Google.

Pour éviter les temps d'arrêt de votre application, suivez les étapes décrites sur cette page.

Créer une autorisation DNS

  1. Créez l'autorisation DNS dans le gestionnaire de certificats en exécutant les commandes suivantes :

    gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
        --domain="DOMAIN_NAME"
    gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
    

    Remplacez les éléments suivants :

    • AUTHORIZATION_NAME est un nom unique qui décrit cette autorisation DNS.
    • DOMAIN_NAME est le nom de domaine personnalisé App Engine pour lequel vous créez cette autorisation DNS.
  2. Notez l'enregistrement CNAME renvoyé par la commande gcloud. Vous devrez l'utiliser pour mettre à jour votre enregistrement DNS dans les étapes suivantes.

Ajouter l'enregistrement CNAME à votre configuration DNS

Selon que vous utilisez Cloud DNS ou une autre solution DNS tierce, suivez les instructions correspondant à votre cas d'utilisation :

Cloud DNS

Lorsque vous créez une autorisation DNS, la commande gcloud renvoie l'enregistrement CNAME correspondant. Vous devez ajouter cet enregistrement CNAME à votre configuration DNS dans la zone DNS du domaine cible comme suit :

  1. Lancez la transaction d'enregistrement DNS :

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

    Remplacez DNS_ZONE_NAME par le nom de la zone DNS publique. Si vous utilisez Google Cloud pour gérer votre domaine et recevoir du trafic vers celui-ci, vous avez déjà créé une zone DNS publique. Pour afficher votre zone DNS publique, consultez la section Répertorier et décrire les zones gérées.

  2. Ajoutez l'enregistrement CNAME à la zone DNS cible :

    gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"
    

    Remplacez les éléments suivants :

    • CNAME_RECORD correspond à la valeur complète de l'enregistrement CNAME renvoyé par la commande gcloud qui a créé l'autorisation DNS correspondante.
    • DOMAIN_NAME est le nom de domaine personnalisé App Engine. Vous devez inclure le point final après le nom de domaine cible.
    • DNS_ZONE_NAME est le nom de la zone DNS cible mentionnée précédemment.
  3. Exécutez la transaction d'enregistrement DNS pour enregistrer vos modifications :

    gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
    

    Remplacez DNS_ZONE_NAME par le nom de la zone DNS cible mentionnée précédemment.

Autre solution DNS

Ajoutez un enregistrement CNAME à la configuration DNS de votre domaine en utilisant le nom d'hôte (host) (_acme-challenge.DOMAIN_NAME) et les champs de données de la section précédente. Consultez la documentation de votre solution DNS tierce.

Créer un certificat géré par Google faisant référence à l'autorisation DNS

Pour créer un certificat géré par Google qui référence l'autorisation DNS que vous avez créée lors des étapes précédentes, exécutez les commandes suivantes :

  1. Créez un certificat géré par Google :

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains=DOMAIN_NAME --dns-authorizations=AUTHORIZATION_NAME
    

    Remplacez les éléments suivants :

    • CERTIFICATE_NAME est un nom unique qui décrit le certificat.
    • DOMAIN_NAME est le nom de domaine personnalisé App Engine.
    • AUTHORIZATION_NAME est le nom de l'autorisation DNS créée précédemment.
  2. Vérifiez que le certificat est actif.

    Utilisez la commande suivante pour vérifier que le certificat lui-même est actif avant de le déployer sur votre équilibreur de charge. Notez que le passage de l'état du certificat à ACTIVE peut prendre plusieurs heures.

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Remplacez CERTIFICATE_NAME par le nom du certificat géré par Google que vous avez créé précédemment.

    L'outil gcloud renvoie un résultat semblable à celui-ci :

    certificatePem: myPEM
    createTime: '2021-10-20T12:19:53.370778666Z'
    expireTime: '2022-05-07T05:03:49Z'
    managed:
      authorizationAttemptInfo:
      - domain: example.com
        state: AUTHORIZED
      dnsAuthorizations:
      - projects/my-project/locations/global/dnsAuthorizations/myAuth
      domains:
      - example.com
      state: ACTIVE
    name: projects/myProject/locations/global/certificates/myCert
    scope: myScope
    sanDnsnames:
    - example.com
    updateTime: '2021-10-20T12:19:55.083385630Z'
    

    Si l'outil gcloud renvoie un résultat différent, consultez la page Résoudre les problèmes du gestionnaire de certificats.

Créer un mappage de certificat

  1. Créez un mappage de certificat :

    gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
    

    Remplacez CERTIFICATE_MAP_NAME par un nom unique qui décrit le mappage de certificat.

  2. Créez une entrée de mappage de certificat et associez-la à votre certificat et à votre mappage de certificat :

    gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME \
        --certificates=CERTIFICATE_NAME \
        --set-primary
    

    Remplacez les éléments suivants :

    • CERTIFICATE_MAP_ENTRY_NAME est un nom unique qui décrit cette entrée de mappage de certificat.
    • CERTIFICATE_MAP_NAME est le nom du mappage de certificat à laquelle cette entrée de mappage de certificat est associée.
    • CERTIFICATE_NAME est le nom du certificat que vous souhaitez associer à cette entrée de mappage de certificat.

    Vous pouvez ajouter l'option --set-primary pour vous assurer que le certificat est utilisé comme certificat par défaut si aucun nom de domaine n'est spécifié.

  3. Vérifiez que le mappage de certificat est actif.

    Exécutez la commande suivante pour vérifier que l'entrée de mappage de certificat est active avant d'associer le mappage de certificat correspondant au proxy cible 

    gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
        --map=CERTIFICATE_MAP_NAME
    

    Remplacez les éléments suivants :

    • CERTIFICATE_MAP_ENTRY_NAME est le nom de l'entrée de mappage de certificat créée précédemment.
    • CERTIFICATE_MAP_NAME est le nom du mappage de certificat auquel cette entrée de mappage de certificats est associée.

    L'outil gcloud renvoie un résultat semblable à celui-ci :

    createTime: '2021-09-06T10:01:56.229472109Z'
    name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
    state: ACTIVE
    updateTime: '2021-09-06T10:01:58.277031787Z'
    

Pour en savoir plus sur l'utilisation du gestionnaire de certificats, consultez la section Fonctionnement du gestionnaire de certificats.

Configurer Cloud Load Balancing

Une fois que vous disposez d'un certificat géré par Google, vous pouvez remplacer votre domaine personnalisé App Engine par un service de frontend Cloud Load Balancing.

Le schéma suivant illustre un équilibreur de charge HTTPS avec un seul service de backend et un NEG sans serveur.

Distribution du trafic vers une application App Engine

Les règles de transfert acheminent les requêtes entrantes provenant d'adresses IP externes et les requêtes directes vers le proxy HTTPS cible. Les équilibreurs de charge HTTPS utilisent des mappages d'URL pour diriger les requêtes vers le service de backend, qui contient un NEG sans serveur pour le service App Engine.

Réserver une adresse IP externe

Avant de configurer Cloud Load Balancing, vous devez configurer une adresse IP externe statique globale pour que les utilisateurs puissent accéder à votre équilibreur de charge.

Console

  1. Accédez à la page Adresses IP externes de Google Cloud Console.

    Accéder à la page "Adresses IP externes"

  2. Cliquez sur Réserver une adresse statique pour réserver une adresse IPv4.

  3. Attribuez un nom à l'adresse statique, par exemple appengine-external-ip.

  4. Définissez le niveau réseau à la valeur Premium.

  5. Définissez Version IP sur IPv4.

  6. Définissez le Type sur Global.

  7. Cliquez sur Réserver.

gcloud

  1. Créez une réservation d'adresse IP externe :

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

    EXTERNAL_IP est le nom de l'adresse à créer.

  2. Notez l'adresse IPv4 réservée :

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

Configurer le service de backend pour App Engine

Un groupe de points de terminaison du réseau (NEG) permet de spécifier un groupe de points de terminaison backend pour un équilibreur de charge. Pour spécifier un backend qui pointe vers un service App Engine, configurez le NEG sans serveur, puis configurez le service de backend, les règles de routage et le service de frontend dans Cloud Load Balancing.

  1. Créez un NEG sans serveur pour votre application App Engine :

    gcloud compute network-endpoint-groups create APP_ENGINE_NEG \
    --network-endpoint-type=serverless \
    --app-engine-app \
    --region=APP_ENGINE_REGION
    

    Remplacez les éléments suivants :

    • APP_ENGINE_NEG est le nom du groupe de points de terminaison du réseau.
    • APP_ENGINE_REGION est la région définie dans App Engine.

    Vous pouvez ajouter l'option --app-engine-app ci-dessus pour utiliser le routage par défaut au lieu de diriger vers un service App Engine spécifique. L'utilisation du routage par défaut signifie que les requêtes seront envoyées au service par défaut (https://PROJECT_ID.REGION_ID.r.appspot.com) et suit toutes les règles de routage que vous définissez dans le fichier dispatch.yaml. Ce comportement est identique à celui des domaines personnalisés configurés à l'aide d'App Engine.

  2. Créez le service de backend :

    gcloud compute backend-services create APP_ENGINE_BACKEND \
      --global \
      --load-balancing-scheme=EXTERNAL_MANAGED
    

    Remplacez APP_ENGINE_BACKEND par le nom du service de backend à créer.

  3. Ajoutez le NEG sans serveur au service de backend App Engine :

    gcloud compute backend-services add-backend APP_ENGINE_BACKEND \
    --global --network-endpoint-group=APP_ENGINE_NEG \
    --network-endpoint-group-region=APP_ENGINE_REGION
    

    Remplacez les éléments suivants :

    • APP_ENGINE_BACKEND est le nom du service de backend créé précédemment.
    • APP_ENGINE_NEG est le nom du groupe de points de terminaison du réseau.
    • APP_ENGINE_REGION est la région définie dans App Engine.
  4. Créez un mappage d'URL pour acheminer les requêtes entrantes vers le service de backend :

    gcloud compute url-maps create URL_MAP_NAME \
          --default-service APP_ENGINE_BACKEND
    

    Remplacez les éléments suivants :

    • URL_MAP_NAME est un nom unique pour la ressource de mappage d'URL qui définit le mappage des URL sur les services de backend.
    • APP_ENGINE_BACKEND est le nom du service de backend créé précédemment.
  5. Créez un proxy HTTP cible pour rediriger les requêtes vers votre mappage d'URL :

    gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --certificate-map=CERTIFICATE_MAP_NAME \
          --url-map=URL_MAP_NAME
    

    Remplacez les éléments suivants :

    • TARGET_HTTPS_PROXY_NAME est un nom unique que vous choisissez pour décrire votre proxy HTTPS.
    • CERTIFICATE_MAP_NAME est le nom du mappage de certificats faisant référence à votre entrée de mappage de certificat et au certificat associé.
    • URL_MAP_NAME est le nom du mappage d'URL précédent.
  6. Créez une règle de transfert pour acheminer les requêtes entrantes vers le proxy :

    gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=PREMIUM \
          --address=EXTERNAL_IP \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --ports=443
    

    Remplacez les éléments suivants :

    • HTTPS_FORWARDING_RULE_NAME est un nom unique qui décrit la règle de transfert pour diriger le trafic réseau vers le proxy HTTPS.
    • TARGET_HTTPS_PROXY_NAME est le nom du proxy HTTPS créé précédemment.
    • EXTERNAL_IP est le nom de l'adresse IPv4 créée précédemment.

Tester l'équilibreur de charge

Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP à des fins de test avant de migrer le domaine.

  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. S'il s'agit d'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, par exemple 30.90.80.100.

    • Si cela ne fonctionne pas et que vous utilisez un certificat géré par Google, vérifiez que votre certificat est à l'état ACTIVE et que le mappage de certificat est à l'état ACTIVE.
    • Si vous avez utilisé un certificat autosigné pour les tests, votre navigateur affiche un avertissement. Vous devez explicitement lui indiquer d'accepter un certificat autosigné. Cliquez sur l'avertissement pour afficher la page.

    Pour découvrir d'autres options de configuration, consultez la page Configurer un équilibreur de charge HTTP(S) externe global avec des plates-formes sans serveur.

Connecter un domaine à votre équilibreur de charge

Une fois l'équilibreur de charge créé, notez l'adresse IP associée à celui-ci (par exemple, 30.90.80.100). Pour faire pointer votre domaine vers votre équilibreur de charge, créez un enregistrement A à l'aide de votre service d'enregistrement de domaine. Si vous avez ajouté plusieurs domaines à votre certificat SSL, vous devez ajouter un enregistrement A à chacun d'eux, tous pointant vers l'adresse IP de l'équilibreur de charge. Par exemple, pour créer des enregistrements A pour www.example.com et example.com, utilisez le code suivant :

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

Si vous utilisez Google Domains, consultez l'Aide Google Domains pour obtenir plus d'informations.

Supprimer le mappage de domaine personnalisé App Engine

Dans la console Google Cloud :

  1. Accédez à l'onglet Domaines personnalisés de la page Paramètres d'App Engine.

    Accéder à l'onglet Domaines personnalisés

  2. Sélectionnez le nom de domaine personnalisé, puis cliquez sur Supprimer.

Vous pouvez également utiliser les commandes gcloud ou l'API Admin pour supprimer le domaine personnalisé.

Configurer le contrôle d'entrée pour autoriser l'accès uniquement via Cloud Load Balancing

Après avoir testé votre équilibreur de charge, nous vous recommandons de mettre à jour votre application App Engine pour accepter le trafic provenant uniquement de Cloud Load Balancing. Pour savoir comment configurer les contrôles d'entrée internal-and-cloud-load-balancing, consultez la page Paramètres d'entrée.