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 :
Configurer votre projet Google Cloud et créer des identifiants
Créer le fichier de configuration (
app.json
) pour votre déploiement
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 :
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.
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 ressourceVersion
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 servicedefault
de l'applicationMY_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" }
Vérifiez que votre version a été déployée dans votre application App Engine :
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 champname
, que vous utilisez avec la méthodeGET
de la collectionapps.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
Où
[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.
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 collectionapps.services.versions
. Vous devez spécifier la version que vous avez déployée dans la requête HTTPGET
, 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
Où
[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
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]
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
:
- Créez le code et les fichiers sources du service
backend
. - Placez les ressources de l'application pour votre service
backend
dans un bucket Cloud Storage. - Créez le fichier de configuration
backend/app.json
. Utilisez des requêtes HTTP pour déployer la version
v1
du servicebackend
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 versionv1
dans le servicebackend
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 } } } ] }