Ce tutoriel explique comment créer un workflow de traduction qui attend votre entrée (intervention humaine) et qui connecte une base de données Firestore, deux fonctions Cloud Run, l'API Cloud Translation et une page Web qui utilise le SDK Firebase pour le mettre à jour en temps réel.
Avec Workflows, vous pouvez accepter un point de terminaison de rappel (ou webhook) qui attend que les requêtes HTTP arrivent à ce point de terminaison, et reprend l'exécution du workflow ultérieurement. Dans ce cas, le workflow attend que votre entrée rejette ou valide la traduction d'un texte, mais il peut également attendre un processus externe. Pour en savoir plus, consultez la section Attendre l'utilisation de rappels.
Architecture
Dans ce tutoriel, vous allez créer une application Web qui vous permet d'effectuer les opérations suivantes:
- Sur la page Web de traduction, saisissez le texte que vous souhaitez traduire de l'anglais vers le français. Cliquez sur Traduire.
- Depuis la page Web, une fonction Cloud Run est appelée pour lancer l'exécution du workflow. Le texte à traduire est transmis en tant que paramètre à la fonction et au workflow.
- Le texte est enregistré dans une base de données Cloud Firestore. L'API Cloud Translation est appelée. La traduction renvoyée est stockée dans la base de données. L'application Web est déployée à l'aide de Firebase Hosting et est mise à jour en temps réel pour afficher le texte traduit.
- L'étape
create_callback
du workflow crée une URL de point de terminaison de rappel qui est également enregistrée dans la base de données Firestore. La page Web affiche maintenant un bouton Valider et un bouton Refuser. - Le workflow est maintenant mis en pause et attend une requête HTTP POST explicite vers l'URL du point de terminaison de rappel.
- Vous pouvez décider de valider ou de refuser la traduction. Cliquez sur un bouton pour appeler une deuxième fonction Cloud Run qui, à son tour, appelle le point de terminaison de rappel créé par le workflow, en transmettant l'état d'approbation.
Le workflow reprend son exécution et enregistre l'état d'approbation
true
oufalse
dans la base de données Firestore.
Ce diagramme offre un aperçu du processus:
Objectifs
- Déployez une application Web.
- Créez une base de données Firestore pour stocker les requêtes de traduction.
- Déployez des fonctions Cloud Run pour exécuter le workflow.
- Déployer et exécuter un workflow pour orchestrer l'ensemble du processus.
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.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows APIs:
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows APIs:
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Mettez à jour les composants de Google Cloud CLI :
gcloud components update
- Connectez-vous à votre compte :
gcloud auth login
- Définissez l'ID de projet et l'emplacement par défaut utilisés dans ce tutoriel:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google Cloud. Vous pouvez trouver l'ID de votre projet sur la page Bienvenue de la console Google Cloud.REGION
: emplacement Workflows compatible de votre choix.
Déployer la première fonction Cloud Run
Cette fonction Cloud Run lance l'exécution du workflow. Le texte à traduire est transmis en tant que paramètre à la fonction et au workflow.
Créez un répertoire appelé
callback-translation
et avec des sous-répertoires appelésinvokeTranslationWorkflow
,translationCallbackCall
etpublic
:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Accédez au répertoire
invokeTranslationWorkflow
:cd ~/callback-translation/invokeTranslationWorkflow
Créez un fichier texte avec le nom de fichier
index.js
contenant le code Node.js suivant:Créez un fichier texte portant le nom de fichier
package.json
et contenant les métadonnéesnpm
suivantes:Déployer la fonction avec un déclencheur HTTP et autoriser les accès non authentifiés :
gcloud functions deploy invokeTranslationWorkflow \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=invokeTranslationWorkflow \ --set-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},CLOUD_REGION=${REGION},WORKFLOW_NAME=translation_validation \ --trigger-http \ --allow-unauthenticated
Le déploiement de la fonction peut prendre quelques minutes. Vous pouvez également utiliser l'interface Cloud Run Functions dans la console Google Cloud pour déployer la fonction.
Une fois la fonction déployée, vous pouvez confirmer la propriété
httpsTrigger.url
:gcloud functions describe invokeTranslationWorkflow
Notez l'URL renvoyée afin de pouvoir l'utiliser ultérieurement.
Déployer la deuxième fonction Cloud Run
Cette fonction Cloud Run envoie une requête HTTP POST au point de terminaison de rappel créé par le workflow, en transmettant un état d'approbation qui indique si la traduction est validée ou refusée.
Accédez au répertoire
translationCallbackCall
:cd ../translationCallbackCall
Créez un fichier texte avec le nom de fichier
index.js
contenant le code Node.js suivant:Créez un fichier texte portant le nom de fichier
package.json
et contenant les métadonnéesnpm
suivantes:Déployer la fonction avec un déclencheur HTTP et autoriser les accès non authentifiés :
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
Le déploiement de la fonction peut prendre quelques minutes. Vous pouvez également utiliser l'interface Cloud Run Functions dans la console Google Cloud pour déployer la fonction.
Une fois la fonction déployée, vous pouvez confirmer la propriété
httpsTrigger.url
:gcloud functions describe translationCallbackCall
Notez l'URL renvoyée afin de pouvoir l'utiliser ultérieurement.
Déployer le workflow
Un workflow est constitué d'une série d'étapes décrites à l'aide de la syntaxe Workflows, qui peut être écrite au format YAML ou JSON. Il s'agit de la définition du workflow. Après avoir créé un workflow, vous pouvez le déployer pour le rendre disponible en exécution.
Accédez au répertoire
callback-translation
:cd ..
Créez un fichier texte avec le nom de fichier
translation-validation.yaml
avec le contenu suivant :Après avoir créé le workflow, vous pouvez le déployer. Toutefois, vous ne devez pas l'exécuter:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Créer votre application Web
créer une application Web qui appelle une fonction Cloud qui lance l'exécution du workflow. La page Web est mise à jour en temps réel pour afficher le résultat de la requête de traduction.
Accédez au répertoire
public
:cd public
Créez un fichier texte avec le nom de fichier
index.html
contenant le balisage HTML suivant. (Dans une étape ultérieure, vous modifierez le fichierindex.html
et ajouterez les scripts du SDK Firebase.)Créez un fichier texte avec le nom de fichier
script.js
contenant le code JavaScript suivant :Modifiez le fichier
script.js
en remplaçant les espaces réservésUPDATE_ME
par les URL des fonctions Cloud Run que vous avez notées précédemment.Dans la méthode
translateBtn.addEventListener
, remplacezconst fnUrl = UPDATE_ME;
par:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
Dans la fonction
callCallbackUrl
, remplacezconst fnUrl = UPDATE_ME;
par:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
Créez un fichier texte avec le nom de fichier
style.css
contenant les styles en cascade suivants:
Ajouter Firebase à votre application Web
Dans ce tutoriel, la page HTML, le script JavaScript et la feuille de style CSS sont déployés en tant qu'éléments statiques à l'aide de Firebase Hosting, mais ils peuvent être hébergés n'importe où et diffusés localement sur votre propre machine à des fins de test.
Créer un projet Firebase
Avant de pouvoir ajouter Firebase à votre application, vous devez créer un projet Firebase pour vous connecter à votre application.
-
Dans la console Firebase, cliquez sur Créer un projet, puis sélectionnez votre projet Google Cloud existant dans le menu déroulant pour ajouter des ressources Firebase à ce projet.
-
Cliquez sur Continue (Continuer) jusqu'à ce que l'option permettant d'ajouter Firebase soit affichée.
-
Ignorez la configuration de Google Analytics pour votre projet.
-
Cliquez sur Ajouter Firebase :
Firebase provisionne automatiquement des ressources pour votre projet Firebase. Une fois le processus terminé, vous êtes redirigé vers la page de présentation de votre projet dans la console Firebase.
Enregistrer votre application auprès de Firebase
Une fois que vous avez créé un projet Firebase, vous pouvez y ajouter votre application Web.
Au centre de la page de présentation du projet, cliquez sur l'icône Web (</>) pour lancer le workflow de configuration.
Saisissez un pseudo pour votre application.
Il n'est visible que par vous dans la console Firebase.
Ignorez la configuration de Firebase Hosting pour le moment.
Cliquez sur Enregistrer l'application et accédez à la console.
Activer Cloud Firestore
L'application Web utilise Cloud Firestore pour recevoir et enregistrer des données. Vous devez activer Cloud Firestore.
Dans la section Build de la console Firebase, cliquez sur Firestore Database (Base de données Firestore).
(Vous devrez peut-être d'abord développer le volet de navigation de gauche pour afficher la section Build.)
Dans le volet Cloud Firestore, cliquez sur Créer une base de données.
Sélectionnez Commencer en mode test à l'aide d'une règle de sécurité semblable à celle-ci:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
Cliquez sur Suivant après avoir lu la clause de non-responsabilité concernant les règles de sécurité.
Définissez l'emplacement de stockage de vos données Cloud Firestore. Vous pouvez accepter la valeur par défaut ou choisir une région proche de vous.
Cliquez sur Activer pour provisionner Firestore.
Ajouter le SDK Firebase et initialiser Firebase
Firebase fournit des bibliothèques JavaScript pour la plupart des produits Firebase. Avant d'utiliser Firebase Hosting, vous devez ajouter les SDK Firebase à votre application Web.
- Pour initialiser Firebase dans votre application, vous devez fournir la configuration du projet Firebase de votre application.
- Dans la console Firebase, accédez à vos Paramètres du projet .
- Dans le volet Vos applications, sélectionnez votre application.
- Dans le volet Configuration du SDK, sélectionnez CDN pour charger les bibliothèques du SDK Firebase à partir du CDN.
- Copiez l'extrait dans le fichier
index.html
au bas du tag<body>
, en remplaçant les valeurs de l'espace réservéXXXX
.
Installez le SDK Firebase JavaScript.
Si vous n'avez pas encore de fichier
package.json
, créez-en un en exécutant la commande suivante à partir du répertoirecallback-translation
:npm init
Installez le package npm
firebase
et enregistrez-le dans votre fichierpackage.json
en exécutant la commande suivante:npm install --save firebase
Initialiser et déployer votre projet
Pour connecter vos fichiers de projet local à votre projet Firebase, vous devez initialiser votre projet. Vous pouvez ensuite déployer votre application Web.
Depuis le répertoire
callback-translation
, exécutez la commande suivante :firebase init
Cochez l'option
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
.Choisissez un projet existant et saisissez votre ID de projet.
Acceptez
public
en tant que répertoire racine public par défaut.Configurez une application monopage.
Ignorez la configuration des builds et des déploiements automatiques avec GitHub.
À l'invite
File public/index.html already exists. Overwrite?
, saisissez Non.Accédez au répertoire
public
:cd public
Dans le répertoire
public
, exécutez la commande suivante pour déployer votre projet sur votre site:firebase deploy --only hosting
Tester l'application Web localement
Firebase Hosting vous permet d'afficher et de tester les modifications localement, et d'interagir avec les ressources de projet backend émulé. Lorsque vous utilisez firebase serve
, votre application interagit avec un backend émulé pour votre contenu et votre configuration d'hébergement, mais votre backend réel pour toutes les autres ressources de projet. Pour ce tutoriel, vous pouvez utiliser firebase serve
, mais cette approche n'est pas recommandée lorsque vous effectuez des tests plus approfondis.
Depuis le répertoire
public
, exécutez la commande suivante :firebase serve
Ouvrez votre application Web à l'URL locale renvoyée (généralement
http://localhost:5000
).Saisissez du texte en anglais, puis cliquez sur Traduire.
Une traduction du texte en français doit s'afficher.
Vous pouvez désormais cliquer sur Valider ou Refuser.
Dans la base de données Firestore, vous pouvez vérifier le contenu. Celles-ci se présentent comme suit :
approved: true callback: "https://workflowexecutions.googleapis.com/v1/projects/26811016474/locations/us-central1/workflows/translation_validation/executions/68bfce75-5f62-445f-9cd5-eda23e6fa693/callbacks/72851c97-6bb2-45e3-9816-1e3dcc610662_1a16697f-6d90-478d-9736-33190bbe222b" text: "The quick brown fox jumps over the lazy dog." translation: "Le renard brun rapide saute par-dessus le chien paresseux."
L'état
approved
esttrue
oufalse
selon que vous validez ou refusez la traduction.
Félicitations ! Vous avez créé un workflow de traduction avec intervention humaine qui utilise des rappels Workflows.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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 les ressources du tutoriel
Supprimez la configuration par défaut de gcloud CLI que vous avez ajoutée lors de la configuration du tutoriel:
gcloud config unset workflows/location
Supprimez le workflow créé dans ce tutoriel :
gcloud workflows delete WORKFLOW_NAME
Supprimez les fonctions Cloud Run que vous avez créées dans ce tutoriel:
gcloud functions delete FUNCTION_NAME
Vous pouvez également supprimer des fonctions Cloud Run à partir de la console Google Cloud.