Déployer des versions d'application sur App Engine

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

L'API App Engine Admin vous permet de déployer des versions d'applications de manière automatisée sur l'application App Engine via des requêtes HTTP POST.

Avant de commencer

Avant de pouvoir envoyer la requête de déploiement HTTP, vous devez être en mesure d'autoriser la requête HTTP, d'accéder aux fichiers intermédiaires de votre application et de disposer d'un fichier de configuration au format JSON. Consultez les rubriques suivantes pour découvrir les prérequis :

Déployer une application sur App Engine avec l'API Admin

Pour déployer une version d'application sur App Engine, procédez comme suit :

  1. Autorisez les requêtes HTTP, à l'aide d'un jeton d'accès par exemple.

    Vous pouvez obtenir l'autorisation d'accéder à l'API Admin à l'aide de différents flux OAuth en fonction des besoins de votre application API. Pour en savoir plus, consultez la page Accéder à l'API.

  2. Envoyez une requête HTTP POST à l'aide de votre jeton d'accès et de l'API Admin pour déployer votre version sur l'application App Engine.

    Pour déployer une version, envoyez une requête HTTP POST qui spécifie le fichier de configuration JSON et définit une ressource Version pour le service cible et l'application App Engine.

    Par exemple, vous pouvez utiliser la requête HTTP POST suivante pour déployer la version spécifiée dans le fichier de configuration JSON vers le service default de l'application MY_PROJECT_ID :

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json
    

    Exemple de commande curl :

    curl -X POST -T "app.json" -H "Content-Type: application/json" -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions
    

    Où :

    • [MY_ACCESS_TOKEN] est le jeton d'accès obtenu pour autoriser les requêtes HTTP.
    • [MY_PROJECT_ID] est l'ID du projet sur lequel vous souhaitez déployer la version.

    Exemple de réponse :

    {
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "insertTime": "2015-05-29T17:12:44.679Z",
        "method": "google.appengine.v1.Versions.CreateVersion",
        "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "user": "me@example.com"
      }
      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
    }
    
  3. Vérifiez que votre version a été déployée dans votre application App Engine :

    1. Affichez l'état de l'opération de déploiement en cours :

      La requête HTTP POST que vous avez utilisée lors de l'étape précédente renvoie le nom de l'opération dans le champ name, que vous utilisez avec la méthode GET de la collection apps.operations pour vérifier l'état de l'opération de déploiement.

      Par exemple, si le champ name de la réponse est :

      "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85"
      

      Vous envoyez ensuite la requête HTTP GET suivante :

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      Exemple de commande curl :

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85
      

      [MY_ACCESS_TOKEN] correspond à votre jeton d'accès et [MY_PROJECT_ID] à l'ID du projet dans lequel vous avez déployé la version.

      Exemple de réponse :

      {
        "done": true,
        "metadata": {
          "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
          "endTime": "2015-05-29T17:13:20.424Z",
          "insertTime": "2015-05-29T17:12:44.679Z",
          "method": "google.appengine.v1.Versions.CreateVersion",
          "target": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "user": "me@example.com"
        },
        "name": "apps/[MY_PROJECT_ID]/operations/89729825-ef1f-4ffa-b3e3-e2c25eb66a85",
        "response": {
          "@type": "type.googleapis.com/google.appengine.v1.Version",
          "creationTime": "2015-05-29T17:12:46.000Z",
          "deployer": "me@example.com",
          "id": "v1",
          "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
          "runtime": "python27",
          "servingStatus": "SERVING",
          "threadsafe": true,
        }
      }
      

      Pour en savoir plus sur l'interrogation des opérations de longue durée, consultez la documentation de référence RPC google.longrunning.

    2. Vérifiez que la version a été créée dans votre application App Engine :

      Pour afficher les détails de la version, utilisez la méthode GET de la collection apps.services.versions. Vous devez spécifier la version que vous avez déployée dans la requête HTTP GET, par exemple :

      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      Exemple de commande curl :

      curl -H "Authorization: Bearer [MY_ACCESS_TOKEN]" https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1
      

      [MY_ACCESS_TOKEN] correspond à votre jeton d'accès et [MY_PROJECT_ID] à l'ID du projet dans lequel vous avez déployé la version.

      Exemple de réponse :

      {
        "creationTime": "2015-05-29T17:12:46.000Z",
        "deployer": "me@example.com",
        "deployment": {
          "files": {
            "my-python-app.py": {
              "sha1Sum": "7cffbdaa9fcfa46e5e58269bfe336dd815de0566",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/logo.jpg",
            },
            "logo.jpg": {
              "sha1Sum": "13f7ea1e24f7cd2de5c66660525f2b509da37c14",
              "sourceUrl": "https://storage.googleapis.com/[YOUR_BUCKET_ID]/my-application/my-python-app.py"
            }
          }
        },
        "handlers": [
          {
            "authFailAction": "AUTH_FAIL_ACTION_REDIRECT",
            "login": "LOGIN_OPTIONAL",
            "script": {
              "scriptPath": "my-python-app.application",
            },
            "securityLevel": "SECURE_OPTIONAL",
            "urlRegex": "/.*"
          }
        ]
        "id": "v1",
        "name": "apps/[MY_PROJECT_ID]/services/default/versions/v1",
        "runtime": "python27",
        "servingStatus": "SERVING",
        "threadsafe": true,
      }
      
      GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions/v1?view=FULL
      
  4. Facultatif : Pour lancer votre navigateur et afficher l'application sur https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com, vous pouvez exécuter la commande suivante :

    gcloud app browse -v [MY_VERSION_ID]
    
  5. Configurez le volume de trafic que la version que vous venez de déployer doit recevoir.

    Par défaut, la version initiale que vous déployez sur l'application App Engine est automatiquement configurée de manière à recevoir la totalité du trafic. Cependant, toutes les versions ultérieures que vous déployez sur l'application App Engine doivent être configurées manuellement. Sinon, elles ne recevront aucun trafic.

    Pour en savoir plus sur la configuration du trafic pour les versions, consultez la page Migrer et répartir le trafic.

Déployer des versions et des services supplémentaires

La procédure de déploiement des versions suivantes de votre application, y compris la création de services supplémentaires, est quasiment identique aux étapes de déploiement décrites dans cette tâche. Si vous souhaitez remplacer la version actuelle en cours d'exécution dans votre application App Engine ou ajouter des services supplémentaires, vous pouvez déployer de nouvelles versions après avoir apporté quelques modifications à vos fichiers de configuration.

Consultez les exemples suivants pour savoir comment déployer des versions supplémentaires sur votre application App Engine. N'oubliez pas qu'après avoir déployé vos versions, vous devez configurer leur trafic.

Exemple : Déploiement de versions supplémentaires

Si une version ancienne ou défectueuse est en cours d'exécution sur App Engine, vous pouvez la remplacer en déployant une autre version sur votre application App Engine, puis en acheminant le trafic vers cette version. Par exemple, après avoir modifié le code source de votre application, vous pouvez modifier la valeur de version dans le fichier app.yaml, créer un fichier app.json, puis déployer une version v2 de votre application avec une autre requête HTTP POST :

Exemple de fichier app.yaml mis à jour :

  service: default
  version: v2
  runtime: python27
  threadsafe: true
  handlers:
  - url: /.*
    script: my-python-app.application

Exemple de requête HTTP POST pour la version v2 :

  POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/versions app.json

Après avoir suivi la procédure permettant de vérifier que la version a bien été déployée, vous pouvez envoyer une requête HTTP PATCH pour acheminer tout le trafic vers la nouvelle version, par exemple :

  PATCH https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/default/?updateMask=split {"split": { "allocations": { "v2": "1" } } }

Pour en savoir plus sur le routage du trafic, consultez la page Migrer et répartir le trafic.

Exemple : Déploiement de plusieurs services

Si vous avez une version v1 en cours d'exécution dans votre application App Engine et que vous souhaitez déployer un service supplémentaire, par exemple backend, vous effectuez les mêmes étapes de déploiement.

Par exemple, pour déployer la version v1 qui crée le service backend :

  1. Créez le code et les fichiers sources du service backend.
  2. Placez les ressources de l'application pour votre service backend dans un bucket Cloud Storage.
  3. Créez le fichier de configuration backend/app.json.
  4. Utilisez des requêtes HTTP pour déployer la version v1 du service backend sur votre application App Engine :

    Exemple de requête HTTP POST :

    POST https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services/backend/versions backend/app.json
    

    Exemple de requête HTTP GET pour vérifier que la version v1 dans le service backend a été créée :

    GET https://appengine.googleapis.com/v1/apps/[MY_PROJECT_ID]/services
    

    Exemple de réponse :

    {
      "services": [
        {
          "name": "apps/[MY_PROJECT_ID]/services/default",
          "id": "default",
          "split": {
            "allocations": {
              "v2": 1
            }
          }
        },
        {
          "name": "apps/[MY_PROJECT_ID]/services/backend",
          "id": "backend",
          "split": {
            "allocations": {
              "v1": 1
            }
          }
        }
      ]
    }
    

Étape suivante