Migrer une application de l'environnement flexible App Engine vers Cloud Run

ID de la région

Le REGION_ID est un code abrégé que Google attribue en fonction de la région que vous sélectionnez lors de la création de votre application. Le code ne correspond pas à un pays ou une province, même si certains ID de région peuvent ressembler aux codes de pays et de province couramment utilisés. Pour les applications créées après février 2020, REGION_ID.r est inclus dans les URL App Engine. Pour les applications existantes créées avant cette date, l'ID de région est facultatif dans l'URL.

En savoir plus sur les ID de région

Ce guide explique comment migrer une application App Engine qui se connecte à une instance Cloud SQL avec une adresse IP publique.

En général, les étapes de ce guide montrent comment déployer le même code source d'application dans Cloud Run, puis le configurer pour utiliser le même utilisateur de base de données Cloud SQL afin de connecter votre instance et votre base de données existantes.

Les étapes de ce guide n'incluent pas comment utiliser une connexion d'adresse IP privée interne, car vous devez d'abord modifier le code de votre application. Toutefois, après avoir déployé votre application sur Cloud Run, vous pouvez suivre la procédure décrite sur la page Se connecter à Cloud SQL depuis Cloud Run pour découvrir les prérequis et apprendre à utiliser des adresses IP privées.

Pour mieux comprendre les similitudes et les différences entre App Engine et Cloud Run, y compris les avantages de la migration vers Cloud Run, consultez le résumé de la comparaison.

Avant de commencer

  1. Assurez-vous que Cloud Run répond aux exigences de votre application. Consultez la comparaison App Engine et Cloud Run pour déterminer si les ressources Cloud Run telles que le processeur et la mémoire répondent à vos besoins.
  2. Dans ce guide, nous partons du principe que votre application s'exécute sans erreur.

  3. Vous avez besoin d'un accès à votre instance Cloud SQL, y compris au nom d'utilisateur et au mot de passe de la base de données pour connecter votre application. Cloud Run applique un chiffrement et se connecte via le proxy d'authentification Cloud SQL à l'aide de l'une de sockets Unix ou de connecteurs Cloud SQL.

  4. Passez en revue les différences Cloud Run suivantes :

    • Cloud Run utilise le terme Revision au lieu de Version pour représenter chaque déploiement de modifications dans un service spécifique. Le premier déploiement de votre application sur un service dans Cloud Run a pour effet de créer la première révision de votre application. Chaque déploiement ultérieur d'un service crée une autre révision. En savoir plus sur le déploiement sur Cloud Run.

    • Vous pouvez déployer votre code source sur Cloud Run à l'aide de Google Cloud CLI ou de la console Google Cloud pour configurer et gérer vos paramètres d'application. Cloud Run ne nécessite pas de configuration basée sur des fichiers. Cependant, les configurations YAML sont prises en charges et vous pouvez utiliser l'outil app2run pour traduire votre fichier App Engine existant pour Cloud Run.

    • Chaque service que vous déployez sur Cloud Run utilise le domaine run.app de l'URL pour accéder au service en mode public.

    • Contrairement aux services App Engine qui sont publics par défaut, les services Cloud Run sont privés par défaut et vous obligent à les configurer pour l'accès public (non authentifié).

Migrer votre application vers Cloud Run

De manière générale, le processus de migration de votre application App Engine vers Cloud Run comprend les étapes suivantes :

  1. Activer les API requises
  2. Configurer le compte de service Cloud Run
  3. Déployer votre application dans Cloud Run

Activer les API requises

Avant de pouvoir déployer votre application sur Cloud Run, vous devez d'abord activer à la fois les API Cloud Run et Artifact Registry.

Utilisez la console Google Cloud pour activer les API :

Accéder aux API et aux services

Configurer le compte de service Cloud Run

Vous pouvez choisir de créer un nouveau compte de service ou de continuer à utiliser dans Cloud Run le même compte de service géré par l'utilisateur que celui que vous utilisez pour App Engine. Dans le compte de service, vous devez vous assurer que les rôles IAM (Identity and Access Management) suivants sont configurés ou que les autorisations équivalentes sont configurées :

Pour déployer sur Cloud Run, vous devez disposer de l'une des options suivantes :

  • Propriétaire
  • Éditeur
  • Rôles Administrateur Cloud Run et Utilisateur de compte de service
  • Autorisations Cloud Run équivalentes

Pour les connexions IP publiques à Cloud SQL, vous devez disposer de l'un des éléments suivants :

Déployer votre application dans Cloud Run

Il n'est pas nécessaire de modifier le code pour déployer votre application App Engine sur Cloud Run.

Dans les étapes suivantes, vous allez déployer votre application sur un nouveau service dans Cloud Run et configurer ce service pour qu'il se connecte à Cloud SQL.

Comme l'environnement flexible App Engine, Cloud Run accepte les déploiements basés sur des conteneurs et sur la source. Vous avez besoin d'accéder à votre image de conteneur ou au dépôt de code source en fonction de la méthode de déploiement que vous suivez.

Déployer des images de conteneurs

Si vos services App Engine sont déployés à l'aide d'un conteneur créé manuellement, vous pouvez utiliser la même image de conteneur pour déployer votre service sur Cloud Run. Pour déployer votre image de conteneur App Engine sur Cloud Run, procédez comme suit :

  1. Prenez note de l'URL de registre où se trouve votre image de conteneur. Il s'agit de la même URL que vous fournissez dans l'option --image-url lors du déploiement sur App Engine.

  2. Déployez votre image de conteneur :

    Console

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

      Accéder à Cloud Run

    2. Cliquez sur Créer un service.

    3. Cliquez sur le bouton Sélectionner dans le champ URL de l'image du conteneur, puis choisissez l'image de conteneur que vous avez déployée pour App Engine.

    4. Saisissez un nom pour votre service. Choisissez un nom unique qui représente l'application que vous déployez.

    5. Dans la section Authentification, cochez Autoriser les appels non authentifiés.

    6. Vous devez créer les mêmes variables d'environnement pour Cloud Run que dans le fichier app.yaml de votre application App Engine. Développez la section Conteneur, mise en réseau et sécurité, puis créez les variables d'environnement suivantes en cliquant sur Ajouter une variable sous Variables d'environnement :

      • Pour les sockets Unix, ajoutez :

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • Pour les connecteurs Cloud SQL, ajoutez :

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

        Remplacez INSTANCE_CONNECTION_NAME par votre ID de votre projet, votre région et votre instance au format project:region:instance-id. Vous trouverez ces informations sur la page Présentation de votre instance dans la console Google Cloud.

        Ces connexions sont automatiquement chiffrées sans configuration supplémentaire.

      • DB_NAME : nom de votre base de données.

      • DB_USER : nom de l'utilisateur de base de données.

      • DB_PASS : mot de passe que vous avez spécifié lors de la création de la base de données.

    7. Dans la section Connexions Cloud SQL, cliquez sur le bouton Ajouter une connexion, puis sélectionnez l'instance que vous avez créée précédemment pour App Engine.

    8. Cliquez sur Déployer. Une fois le service Cloud Run déployé, une URL s'affiche en haut de la page Détails du service. Cliquez sur le lien URL pour afficher l'exemple d'application déployé sur Cloud Run et connecté à Cloud SQL.

    gcloud

    Exécutez la commande suivante pour créer un service dans Cloud Run. Vous devez définir des options de configuration pour inclure les mêmes variables d'environnement de connexion SQL définies dans le fichier app.yaml de votre application App Engine :

    gcloud run deploy run-sql --image IMAGE \
      --allow-unauthenticated \
      --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
      --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
      --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
      --set-env-vars DB_NAME="DB_NAME" \
      --set-env-vars DB_USER="DB_USER" \
      --set-env-vars DB_PASS="DB_PASS"
    

    Remplacez :

    • IMAGE par l'image à déployer.
    • INSTANCE_CONNECTION_NAME par le nom de connexion de votre instance Cloud SQL ou par une liste de noms de connexion séparés par une virgule. Vous pouvez trouver le INSTANCE_CONNECTION_NAME en exécutant la commande suivante :

        gcloud instances describe INSTANCE_NAME
      
    • DB_NAME par le nom de votre base de données.

    • DB_USER par le nom d'utilisateur de votre base de données.

    • DB_PASS par le mot de passe de l'utilisateur de base de données.

Déployer le code source

Cloud Run utilise des buildpacks et Cloud Build en interne pour créer automatiquement des images de conteneurs à partir du code source. Vous n'avez pas besoin de créer manuellement un conteneur ou de spécifier un fichier Dockerfile. Toutefois, si un Dockerfile est présent, il sera utilisé.

Le déploiement d'un service Cloud Run à partir de la source utilise Artifact Registry. Cette fonctionnalité n'est donc disponible que dans les régions compatibles avec Artifact Registry.

Pour déployer le même code source que celui précédemment déployé sur App Engine, procédez comme suit :

  1. Accédez au répertoire source où se trouve le code source de votre application.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Déployer dans Cloud Run.

    Pour créer votre code source et déployer votre application, exécutez la commande déploiement avec l'option --source. Vous devez définir des options de configuration pour inclure les mêmes variables d'environnement de connexion SQL que celles définies dans le fichier app.yaml de votre application App Engine :

      gcloud run deploy run-sql --source SOURCE \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    Remplacez :

    • SOURCE par le chemin d'accès à votre répertoire source App Engine.
    • INSTANCE_CONNECTION_NAME par le nom de connexion de l'instance Cloud SQL ou par une liste de noms de connexion séparés par une virgule Vous pouvez trouver le INSTANCE_CONNECTION_NAME en exécutant la commande suivante :
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME par le nom de votre base de données.
    • DB_USER par le nom d'utilisateur de votre base de données.
    • DB_PASS par le mot de passe de l'utilisateur de base de données.
  3. Saisissez un nom pour le SERVICE lorsque vous y êtes invité.

  4. Répondez aux invites pour installer les API requises en répondant y lorsque vous y êtes invité. Vous ne devez procéder à cette opération qu'une fois par projet. Attendez la fin de la compilation et du déploiement. Une fois ces étapes terminées, un message semblable à celui-ci s'affiche :

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    Pour en savoir plus sur le déploiement de code source sur Cloud Run, consultez la page Déployer du code source.

Étapes suivantes