De nombreuses applications doivent exécuter un traitement en arrière-plan dans d'autres contextes que celui d'une requête Web. Ce tutoriel indique comment créer une application Web qui permet aux utilisateurs de saisir du texte à traduire, puis qui affiche la liste des traductions précédentes. La traduction est effectuée dans un traitement en arrière-plan pour éviter de bloquer la requête de l'utilisateur.
Le schéma suivant illustre le processus de requête de traduction.
Voici, dans l'ordre, comment fonctionne l'application du tutoriel :
- L'application accède à la page Web pour consulter la liste des traductions précédentes stockées dans Firestore.
- Elle demande la traduction d'un texte en saisissant un formulaire HTML.
- La requête de traduction est publiée dans Pub/Sub.
- Une fonction Cloud abonnée à ce sujet Pub/Sub est déclenchée.
- Cette fonction Cloud utilise Cloud Translation pour traduire le texte.
- La fonction Cloud stocke le résultat dans Firestore.
Ce tutoriel est destiné à toute personne intéressée par le traitement en arrière-plan avec Google Cloud. Il ne nécessite aucune connaissance particulière de Pub/Sub, Firestore, App Engine ou Cloud Functions. Cependant, pour comprendre l'intégralité du code, il peut être utile de se familiariser avec Python, JavaScript et HTML.
Objectifs
- Comprendre et déployer une fonction Cloud
- Comprendre et déployer une application App Engine
- Tester l'application
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Functions, Pub/Sub, and Cloud Translation APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Functions, Pub/Sub, and Cloud Translation APIs.
-
Dans Google Cloud Console, ouvrez l'application dans Cloud Shell.
Cloud Shell vous permet d'accéder en ligne de commande à vos ressources cloud, directement depuis votre navigateur. Ouvrez Cloud Shell dans votre navigateur et cliquez sur Proceed (Continuer) pour télécharger l'exemple de code et le modifier dans le répertoire de l'application.
-
Dans Cloud Shell, configurez l'outil
gcloud
pour utiliser votre projet Google Cloud:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Comprendre la fonction Cloud
- La fonction commence par importer plusieurs dépendances, comme Firestore et Translation.
- Les clients Firestore et Translation internationaux sont initialisés afin qu'ils puissent être réutilisés pour les appels de fonction. De cette manière, vous n'avez pas besoin d'initialiser de nouveaux clients à chaque appel de fonction, ce qui ralentirait l'exécution.
- L'API Translation traduit la chaîne dans la langue que vous avez sélectionnée.
-
La fonction Cloud commence par analyser le message Pub/Sub pour obtenir le texte à traduire et la langue cible souhaitée.
Ensuite, la fonction Cloud traduit le texte et le stocke dans Firestore en utilisant une transaction pour s'assurer qu'il n'y a pas de traductions en double.
Déployer la fonction Cloud Functions
Dans Cloud Shell, dans le répertoire
function
, déployez la fonction Cloud avec un déclencheur Pub/Sub :gcloud functions deploy Translate --runtime=python37 \ --entry-point=translate_message --trigger-topic=translate \ --set-env-vars GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT
où
YOUR_GOOGLE_CLOUD_PROJECT
correspond à votre ID de projet Google Cloud.
Comprendre l'application
L'application Web comporte deux composants principaux :
-
Un serveur HTTP Python pour gérer les requêtes Web. Il comporte les deux points de terminaison suivants :
-
/
: répertorie toutes les traductions existantes et affiche un formulaire que les utilisateurs peuvent envoyer pour demander de nouvelles traductions. -
/request-translation
: les envois de formulaires sont envoyés à ce point de terminaison, qui publie la requête sur Pub/Sub à traduire de manière asynchrone.
-
- Un modèle HTML rempli par les traductions existantes par le serveur Python
Le serveur HTTP
Dans le répertoire
app
,main.py
commence par importer des dépendances, créer une application Flask, initialiser les clients Firestore et Translation, et définir une liste des langues compatibles :Le gestionnaire d'index (
/
) récupère toutes les traductions existantes dans Firestore et renseigne un modèle HTML à l'aide de la liste suivante :Pour demander de nouvelles traductions, envoyez un formulaire HTML. Le gestionnaire des requêtes de traduction, enregistré sur
/request-translation
, analyse le formulaire envoyé, valide la requête, puis publie un message dans Pub/Sub :
Modèle HTML
Le modèle HTML représente la base de la page HTML affichée à l'utilisateur afin qu'il puisse consulter les traductions précédentes et en demander de nouvelles. Ce modèle est rempli par le serveur HTTP à l'aide de la liste des traductions existantes.
-
L'élément
<head>
du modèle HTML inclut des métadonnées, des feuilles de style et du code JavaScript pour la page:Cette page intègre des éléments Material Design Lite (MDL) CSS et JavaScript. MDL vous permet d'apporter un aspect Material Design à vos sites Web.
JQuery permet d'attendre la fin de chargement du document et de définir un gestionnaire d'envoi de formulaires. Chaque fois que le formulaire de requête de traduction est envoyé, la page effectue une validation minimale du formulaire pour vérifier que la valeur n'est pas vide, puis envoie une requête asynchrone au point de terminaison
/request-translation
.Enfin, un snackbar MMD apparaît pour indiquer si la requête a abouti ou si une erreur s'est produite.
- Le corps HTML de la page utilise une mise en page LMD et plusieurs composants LMD pour afficher la liste des traductions et un formulaire pour demander des traductions supplémentaires:
Déployer l'application Web
Vous pouvez utiliser l'environnement standard App Engine pour créer et déployer une application qui s'exécute de manière fiable, même lorsqu'elle est soumise à une charge importante et doit gérer de grandes quantités de données.
Dans ce tutoriel, l'interface HTTP est déployée dans l'environnement standard App Engine.
Le fichier app.yaml
configure l'application App Engine :
-
Depuis le même répertoire que le fichier
app.yaml
, déployez votre application dans l'environnement standard App Engine:gcloud app deploy
Tester l'application
Après avoir déployé la fonction Cloud et l'application App Engine, essayez de demander une traduction.
-
Pour afficher l'application dans votre navigateur,saisissez l'URL suivante:
https://PROJECT_ID.REGION_ID.r.appspot.com
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google Cloud.REGION_ID
: code attribué par App Engine à votre application
Une page affiche une liste vide de traductions et un formulaire pour en demander de nouvelles.
-
Dans le champ Texte à traduire, saisissez du texte à traduire, par exemple :
Hello, World
. - Dans la liste déroulante, sélectionnez la langue dans laquelle vous souhaitez traduire le texte.
- Cliquez sur Submit (Envoyer).
- Pour actualiser la page, cliquez sur Actualiser refresh. Une nouvelle ligne s'affiche dans la liste de traduction. Si vous ne voyez pas de traduction, attendez encore quelques secondes, puis réessayez. Si vous ne voyez toujours pas de traduction, consultez la section suivante sur le débogage de l'application.
Déboguer l'application
Si vous ne parvenez pas à vous connecter à votre application App Engine ou si vous ne voyez pas de nouvelles traductions, vérifiez les points suivants:
-
Vérifiez que les commandes de déploiement
gcloud
ont bien abouti et n'ont généré aucune erreur. Si des erreurs se sont produites, corrigez-les, puis essayez de redéployer la fonction Cloud et l'application App Engine. -
Dans Google Cloud Console, accédez à la page "Visionneuse de journaux".
Accéder à la page "Visionneuse de journaux"- Dans la liste déroulante Ressources sélectionnées récemment, cliquez sur Application GAE , puis sur Tous les ID de module. La liste des requêtes correspondant à votre accès à l'application s'affiche. Si cette liste n'apparaît pas, vérifiez que vous avez bien sélectionné Tous les ID de module dans la liste déroulante. Si des messages d'erreur s'affichent dans Cloud Console, vérifiez que le code de votre application correspond au code dans la section sur la compréhension de l'application.
-
Dans la liste déroulante Ressources sélectionnées récemment, cliquez sur Fonction Cloud, puis sur Tous les noms de fonction. Une fonction est répertoriée pour chaque traduction demandée. Si ce n'est pas le cas, vérifiez que la fonction Cloud et l'application App Engine utilisent le même sujet Pub/Sub :
- Dans le fichier
background/main.py
, vérifiez quetopic_name
est défini sur"translate"
. - Lorsque vous déployez la fonction Cloud, veillez à inclure l'option
--trigger-topic=translate
.
- Dans le fichier
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet Cloud
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Supprimer l'instance App Engine
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Pour supprimer la version de l'application, cliquez sur Supprimer.
Supprimer la fonction Cloud
-
Supprimez la fonction Cloud que vous avez créée dans ce tutoriel:
gcloud functions delete Translate
Étapes suivantes
- Consultez d'autres tutoriels Cloud Functions.
- Obtenez plus d'informations sur App Engine.
- Essayez Cloud Run, qui vous permet d'exécuter des conteneurs sans état dans un environnement entièrement géré ou dans votre propre cluster Google Kubernetes Engine.