Comparer App Engine et 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 présente Cloud Run pour les utilisateurs qui connaissent déjà App Engine. Il couvre les principales similitudes et différences entre les plates-formes sans serveur pour vous aider à préparer la migration depuis l'environnement standard ou flexible App Engine.

Présentation

Cloud Run est la dernière évolution de Google Cloud sans serveur, développé depuis plus de 10 ans sur l'expérience d'exécution d'App Engine. Cloud Run s'exécute en grande partie sur la même infrastructure que l'environnement standard App Engine. Il existe donc de nombreuses similitudes entre ces deux plates-formes.

Cloud Run est conçu pour améliorer l'expérience App Engine, en intégrant bon nombre des meilleures fonctionnalités de l'environnement standard et de l'environnement flexible App Engine. Les services Cloud Run peuvent gérer les mêmes charges de travail que les services App Engine, mais Cloud Run offre beaucoup plus de flexibilité aux clients dans la mise en œuvre de ces services. Cette flexibilité, ainsi que l'amélioration des intégrations à Google Cloud et à des services tiers, permet également à Cloud Run de gérer les charges de travail qui ne peuvent pas s'exécuter sur App Engine.

Résumé comparatif

Bien qu'il existe de nombreuses similitudes et différences entre App Engine et Cloud Run, cette présentation se concentre sur les domaines les plus pertinents pour les clients App Engine qui font leurs premiers pas avec Cloud Run.

Environnement standard App Engine Environnement flexible App Engine Cloud Run
Terminologie Application ND
Service Service
Version Révision

Points de terminaison d'URL

URL de l'application
(service default)
https://PROJECT_ID.REGION_ID.r.appspot.com ND
URL de service https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com https://SERVICE_IDENTIFIER.run.app
URL de version/révision https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com https://TAG---SERVICE_IDENTIFIER.run.app

Mise à l'échelle

Un scaling automatique Oui Oui Yes
Scaling manuel Yes Yes Bien qu'il n'existe pas de paramètre de scaling manuel spécifique, le même comportement peut être répliqué en configurant le nombre maximal d'instances égal au nombre minimal d'instances
Scaling à zéro instance Yes Non Yes
Requêtes de préchauffage Configurable Non Automatique
Délai d'inactivité de l'instance (après la fin de la dernière requête) 15 minutes maximum Dépend du paramètre d'allocation de processeurs. Utiliser l'allocation systématique du processeur pour émuler le comportement d'App Engine
Délai avant expiration de la requête
  • Scaling automatique : 10 minutes
  • Scaling manuel/de base : 24 heures
60 minutes Configurable jusqu'à 60 minutes (par défaut : 5 minutes)

Deployment

À partir d'une source Yes Oui
Image de conteneur Non Oui (environnements d'exécution personnalisés) Oui

Ressources de calcul

vCPU
Classe d'instance vCPU* Mémoire
F/B1 .25 384 Mo
F/B2 0,5 768 Mo
F/B4 1 1,5 Go
F/B4_1G 1 3 Go
B8 2 3 Go
* Les équivalents en processeurs virtuels (vCPU) sont approximatifs
Jusqu'à 80 vCPU Jusqu'à 8 vCPU
Memory Jusqu'à 6,5 Go par vCPU Jusqu'à 32 Go

Modèle tarifaire

Frais par requête Non Non, lorsque le processeur est toujours alloué.
Oui, lorsque le processeur n'est alloué que lors du traitement des requêtes.
Nombre minimal d'instances inactives Même coût que les instances actives Coûts réduits pour les instances inactives (voir Temps d'instance de conteneur facturable)
Remises sur engagement d'utilisation Non Oui

Sécurité

Paramètres d'entrée Oui Oui Oui
Rôle de demandeur Non Oui
IAP Oui Oui Configurer à l'aide de Cloud Load Balancing
Pare-feu Oui Oui Configurer à l'aide de Google Cloud Armor

Connectivité

Domaines personnalisés Oui Oui Configurer à l'aide de Cloud Load Balancing
Connectivité VPC (y compris VPC partagé) Oui ND Oui
Paramètres de sortie VPC Oui ND Oui
Équilibrage de charge multirégional Non Oui

Accéder aux services Google Cloud

Cloud SQL Oui Oui Oui
Bibliothèques clientes Google Cloud Si vous utilisez des bibliothèques clientes Cloud dans App Engine, vous n'avez rien à modifier lors de la migration vers Cloud Run. Votre application bénéficiera d'une plus grande portabilité, car ces bibliothèques clientes fonctionnent partout.
Anciens services groupés App Engine Oui (Java, Python, Go, PHP uniquement) Non Non

Modèle de ressource

Schéma du modèle de ressource App Engine et Cloud Run

Le modèle de ressource Cloud Run est très semblable à App Engine, mais il existe quelques différences clés :

  • Cloud Run ne dispose pas de ressource Application de premier niveau ni du service default correspondant.
  • Les services Cloud Run du même projet peuvent être déployés dans différentes régions. Dans App Engine, tous les services du projet se trouvent dans la même région.
  • Cloud Run utilise le terme Révision au lieu de Version pour s'aligner sur le modèle de ressource Knative.
  • Les noms des révisions Cloud Run utilisent le format SERVICE_NAME-REVISION_SUFFIX, où REVISION_SUFFIX est généré automatiquement ou défini à l'aide de l'option de déploiement --revision-suffix=REVISION_SUFFIX.
  • Les révisions Cloud Run sont immuables, ce qui signifie que vous ne pouvez pas réutiliser les noms comme vous le feriez avec les versions d'App Engine (à l'aide de l'option de déploiement --version=VERSION_ID).
  • Les URL de service Cloud Run sont basées sur un identifiant de service généré automatiquement lors du premier déploiement du service. Les identifiants de service utilisent le format suivant : SERVICE_NAME-<auto-generated identifier>. L'identifiant de service est unique et ne change pas pendant la durée de vie du service.
  • Dans Cloud Run, seules les URL de service (SERVICE_IDENTIFIER.run.app) sont exposées par défaut. Pour traiter une révision spécifique, vous devez configurer un tag de trafic. Dans App Engine, les URL de service et de version sont exposées automatiquement.

Déploiement et configuration

Dans App Engine, la plupart des configurations sont effectuées dans le fichier app.yaml inclus dans chaque déploiement. Cette simplicité a un coût : si certains paramètres peuvent être mis à jour à l'aide de l'API Admin, la plupart des modifications nécessitent de redéployer le service.

Bien que Cloud Run dispose du fichier de configuration service.yaml, il n'est pas utilisé de la même manière que le fichier app.yaml. Le fichier service.yaml de Cloud Run ne peut pas être utilisé lors du déploiement à partir de la source, car l'un des éléments requis est le chemin d'accès à l'image de conteneur finale. En outre, service.yaml est conforme à la spécification Knative et peut être difficile à lire pour les utilisateurs qui ne connaissent pas les fichiers de configuration de type Kubernetes. Pour en savoir plus sur l'utilisation de service.yaml pour gérer la configuration, consultez la documentation Cloud Run.

Pour les clients App Engine qui font leurs premiers pas avec Cloud Run, l'utilisation des options de déploiement de gcloud CLI s'aligne beaucoup plus sur la gestion de la configuration lors du déploiement d'App Engine.

Pour définir la configuration lors du déploiement d'un nouveau code dans Cloud Run, utilisez les options gcloud run deploy :

gcloud run deploy SERVICE_NAME \
--cpu CPU \
--memory MEMORY \
--concurrency CONCURRENCY

Bien qu'il ne soit pas nécessaire d'utiliser les options de configuration avec chaque déploiement (voir Gérer les configurations), vous pouvez le faire pour simplifier la gestion de la configuration.

Dans Cloud Run, vous pouvez également mettre à jour la configuration sans redéployer le code source à l'aide de gcloud run services update :

gcloud run services update SERVICE_NAME \
--cpu CPU \
--memory MEMORY \
--concurrency CONCURRENCY

Comme les révisions Cloud Run sont immuables, cette commande crée une nouvelle révision avec la configuration mise à jour, mais utilise la même image de conteneur que la révision existante.

Gérer les configurations

Pour les déploiements App Engine, tous les paramètres doivent être fournis pour chaque déploiement. Si des paramètres ne sont pas fournis, des valeurs par défaut leur sont attribuées. Prenons l'exemple d'App Engine service-a, avec des versions utilisant les fichiers app.yaml indiqués ci-dessous :

App Engine service-a version1 App Engine service-a version2
app.yaml

runtime: python39
service: service-a
instance_class: F4

runtime: python39
service: service-a
Configuration appliquée

runtime: python39
service: service-a
instance_class: F4
default values:
..
..

runtime: python39
service: service-a
default values:
instance_class: F1
..
..

version1 est configuré avec instance_class: F4, tandis que version2, qui n'a fourni aucune valeur pour instance_class, est configuré avec la valeur par défaut instance_class: F1.

Pour Cloud Run, tous les paramètres de configuration fournis sont appliqués, mais ceux qui ne sont pas fournis conservent leurs valeurs existantes. Il vous suffit de fournir les valeurs des paramètres que vous souhaitez modifier. Exemple :

Cloud Run service-a revision1 Cloud Run service-a revision2
Commande de déploiement

gcloud run deploy service-a \
--cpu=4

gcloud run deploy service-a
Configuration appliquée

service: service-a
vCPUs: 4
default values:
..
..

service: service-a
vCPUs: 4
default values:
..
..

Dans App Engine, le déploiement sans paramètres de configuration crée une version utilisant tous les paramètres par défaut. Dans Cloud Run, le déploiement sans paramètre de configuration crée une révision utilisant les mêmes paramètres de configuration que la révision précédente. Pour la première révision d'un service Cloud Run sans déploiement de configuration, une révision est créée à l'aide de tous les paramètres par défaut.

Configuration par défaut

Paramètre de configuration Environnement standard App Engine Environnement flexible App Engine Cloud Run
Ressources de calcul F1 1 vCPU, .6 Go 1 vCPU, 512 Mo
Simultanéité maximale (requêtes) 10 Aucune 80
Délai avant expiration de la requête
  • Scaling automatique : 10 minutes
  • Scaling manuel/de base : 24 heures
60 minutes 5 minutes
Objectif d'utilisation du CPU 60 % 50 % 60 %
Nombre maximal d'instances Aucune 20 100
Nombre minimal d'instances 0 2 0

Point d'entrée

Lors du déploiement à partir de la source, App Engine lit la commande entrypoint à partir de l'attribut entrypoint dans le fichier app.yaml. Si aucun point d'entrée n'est fourni, une valeur par défaut spécifique à l'environnement d'exécution est appliquée. Cloud Run utilise les buildpacks de Google Cloud lors du déploiement à partir de la source. Certains langages ne disposent pas de point d'entrée par défaut, ce qui signifie que vous devez en fournir un, sinon la compilation échouera. Par exemple, les buildpacks Python nécessitent un fichier Procfile ou la spécification de la variable d'environnement de build GOOGLE_ENTRYPOINT.

Veuillez consulter la documentation sur les buildpacks pour connaître les exigences de configuration spécifiques au langage.

Mise à l'échelle

Bien que Cloud Run et l'environnement standard App Engine partagent en grande partie la même infrastructure de scaling, Cloud Run a été simplifié pour accélérer le scaling. Pour les besoins de cette simplification, les paramètres configurables sont limités aux éléments suivants :

Pour les instances Cloud Run, l'objectif d'utilisation du processeur n'est pas configurable et est fixe à 60 %. Consultez la documentation Cloud Run pour plus de détails sur l'autoscaling.

L'environnement flexible App Engine utilise l'autoscaler Compute Engine. Il présente donc des caractéristiques de scaling très différentes de celles de l'environnement standard et de Cloud Run.

Délai d'inactivité de l'instance

Dans App Engine, les instances inactives restent actives pendant 15 minutes après la fin du traitement de la dernière requête. Cloud Run vous permet de configurer ce comportement à l'aide de l'allocation de processeurs. Pour obtenir le même comportement qu'App Engine, définissez l'allocation de processeurs sur Processeur toujours alloué. Vous pouvez également utiliser l'option Processeur uniquement alloué lors du traitement des requêtes pour que les instances inactives soient arrêtées immédiatement (en l'absence de requêtes en attente).

Requêtes de préchauffage

Cloud Run préchauffe automatiquement les instances à l'aide de la commande entrypoint du conteneur. Vous n'avez donc pas besoin d'activer manuellement les requêtes de préchauffage ni de configurer un gestionnaire /_ah/warmup. Si vous souhaitez exécuter du code au démarrage d'une instance, avant que des requêtes soient traitées, vous pouvez soit:

Contenu statique

Dans l'environnement standard App Engine, vous pouvez diffuser du contenu statique sans utiliser de ressources de calcul en diffusant depuis Cloud Storage ou en configurant des gestionnaires. Cloud Run ne propose pas d'option de gestionnaires pour la diffusion de contenu statique. Vous pouvez donc diffuser le contenu à partir du service Cloud Run (identique au contenu dynamique) ou depuis Cloud Storage.

Rôle de demandeur Cloud Run

Cloud Run offre également la possibilité de contrôler l'accès au service avec IAM (Identity and Access Management). Les liaisons de stratégie IAM pour un service peuvent être définies à l'aide de gcloud CLI, de la console ou de Terraform.

Pour répliquer le comportement d'App Engine, vous pouvez rendre le service public en autorisant les requêtes non authentifiées. Vous pouvez définir cela au déploiement ou en mettant à jour les liaisons de stratégie IAM sur un service existant.

Deployment

Utilisez l'option de déploiement --allow-unauthenticated :

gcloud run deploy SERVICE_NAME ... --allow-unauthenticated

Service existant

Exécutez la commande gcloud run services add-iam-policy-binding :

gcloud run services add-iam-policy-binding SERVICE_NAME \
--member="allUsers" \
--role="roles/run.invoker"

SERVICE_NAME correspond au nom du service Cloud Run.

Vous pouvez également choisir de contrôler qui a accès au service en attribuant le rôle IAM Demandeur Cloud Run qui est configurable par service.

Deployment

gcloud run deploy SERVICE_NAME ... --no-allow-unauthenticated
gcloud run services add-iam-policy-binding SERVICE_NAME \
--member=MEMBER_TYPE \
--role="roles/run.invoker"

SERVICE_NAME correspond au nom du service et MEMBER_TYPE au type de compte principal. Exemple : user:email@domain.com.

Pour obtenir la liste des valeurs acceptées pour MEMBER_TYPE, consultez la section sur les concepts de Cloud IAM.

Service existant

gcloud run services add-iam-policy-binding SERVICE_NAME \
--member=MEMBER_TYPE \
--role="roles/run.invoker"

SERVICE_NAME correspond au nom du service et MEMBER_TYPE au type de compte principal. Exemple : user:email@domain.com.

Pour obtenir la liste des valeurs acceptées pour MEMBER_TYPE, consultez la section sur les concepts de Cloud IAM.

Variables d'environnement et métadonnées

App Engine et Cloud Run disposent de certaines variables d'environnement qui sont définies automatiquement. Le tableau ci-dessous présente les variables d'environnement App Engine, ainsi que leurs équivalents dans Cloud Run. Par rapport à App Engine, Cloud Run n'implémente que quelques variables d'environnement, mais les données disponibles à partir du serveur de métadonnées sont pour la plupart équivalentes.

Variables d'environnement par défaut

Nom App Engine Nom Cloud Run Description
GAE_SERVICE K_SERVICE Nom du service actuel. Dans App Engine, défini sur "default" si non spécifié.
GAE_VERSION K_REVISION Libellé de la version actuelle du service.
PORT PORT Port qui reçoit les requêtes HTTP.
ND K_CONFIGURATION Nom de la configuration Cloud Run ayant créé la révision.
GOOGLE_CLOUD_PROJECT ND ID du projet Cloud associé à votre application.
GAE_APPLICATION ID de votre application App Engine. Cet ID est précédé du préfixe "code de région~", tel que "e~" pour les applications déployées en Europe.
GAE_DEPLOYMENT_ID ID du déploiement actuel.
GAE_ENV Environnement App Engine. Défini sur "standard" si dans l'environnement standard.
GAE_INSTANCE ID de l'instance sur laquelle votre service est en cours d'exécution.
GAE_MEMORY_MB Quantité de mémoire disponible pour le processus d'application, en Mo.
NODE_ENV (disponible uniquement dans l'environnement d'exécution Node.js) Variable définie sur production lorsque votre service est déployé.
GAE_RUNTIME Environnement d'exécution spécifié dans le fichier app.yaml.

Chemins d'accès de serveur de métadonnées courants

Chemin d'accès Description Exemple
/computeMetadata/v1/project/project-id ID du projet auquel appartient le service test_project
/computeMetadata/v1/project/numeric-project-id Numéro du projet auquel appartient le service 12345678912
/computeMetadata/v1/instance/id Identifiant unique de l'instance de conteneur (également disponible dans les journaux). 16a61494692b7432806a16
(chaîne de caractères alphanumériques)
/computeMetadata/v1/instance/region
** Non disponible pour l'environnement flexible App Engine
Région de ce service, renvoie projects/PROJECT_NUMBER/regions/REGION projects/12345678912/regions/us-central1
/computeMetadata/v1/instance/service-accounts/default/email Adresse e-mail du compte de service d'exécution de ce service. service_account@test_project.iam.gserviceaccount.com
/computeMetadata/v1/instance/service-accounts/default/token Génère un jeton d'accès OAuth2 pour le compte de service de ce service. Ce point de terminaison renverra une réponse JSON avec un attribut access_token. {
"access_token":"<TOKEN>",
"expires_in":1799,
"token_type":"Bearer"
}

Étapes suivantes