Muchas apps necesitan procesar en segundo plano fuera del contexto de una solicitud web. En este instructivo, se crea una app web que permite a los usuarios ingresar texto para traducir y, luego, muestra una lista de traducciones anteriores. La traducción se realiza en segundo plano para evitar que se bloquee la solicitud del usuario.
En el siguiente diagrama se ilustra el proceso de solicitud de traducción.
Esta es la secuencia de eventos de cómo funciona la app del instructivo:
- Visita la página web para ver una lista de traducciones anteriores almacenadas en Firestore.
- Ingresa un formulario HTML para solicitar una traducción de texto.
- La solicitud de traducción se publica en Pub/Sub.
- Se activa un servicio de Cloud Run suscrito a ese tema Pub/Sub.
- El servicio de Cloud Run usa Cloud Translation para traducir el texto.
- El servicio de Cloud Run almacena el resultado en Firestore.
Este instructivo está dirigido a cualquier persona que desee aprender sobre el procesamiento en segundo plano con Google Cloud. No se requiere experiencia previa en el uso de Pub/Sub, Firestore, App Engine o Cloud Functions. Sin embargo, para comprender el código completo, resulta útil contar con cierta experiencia en .NET, JavaScript y HTML.
Objetivos
- Comprender e implementar los servicios de Cloud Run
- Probar la app
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
- 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 Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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 Run, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Actualiza los componentes de
gcloud
:gcloud components update
- Prepara tu entorno de desarrollo.
Prepara la app
En la ventana de la terminal, clona el repositorio de la app de muestra en la máquina local:
git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Cambia al directorio que contiene el código de muestra de la tarea en segundo plano:
cd getting-started-dotnet/BackgroundProcessing
Información sobre el servicio TranslateWorker
Primero, el servicio importa varias dependencias, como Firestore y Translation.
Los clientes de Firestore y Translation se inicializan para que puedan reutilizarse entre las invocaciones del controlador. De esa forma, no es necesario inicializar nuevos clientes para cada invocación, lo que ralentizaría la ejecución.
La API de Translation traduce la string al idioma que seleccionaste.
El constructor del controlador recibe los clientes de Firestore y Pub/Sub.
El método
Post
analiza el mensaje de Pub/Sub para obtener el texto que se traducirá. Usa el ID del mensaje como un nombre único para la solicitud de traducción a fin de garantizar que no almacene traducciones duplicadas.
Implementa el servicio TranslateWorker
En el directorio
BackgroundProcessing
, ejecuta la secuencia de comandos de PowerShell para compilar e implementar el servicio en Cloud Run:PublishTo-CloudRun.ps1
Información sobre la secuencia de comandos PublishTo-CloudRun.ps1
La secuencia de comandos PublishTo-CloudRun.ps1
publica el servicio en Cloud Run y evita que el servicio de TranslateWorker no se abuse de él. Si el servicio permitió todas las conexiones entrantes, cualquiera podría publicar solicitudes de traducción en el controlador y, por lo tanto, se generan costos. Por lo tanto, configura el servicio para que acepte solo solicitudes POST
de Pub/Sub.
La secuencia de comandos hace lo siguiente:
- Compila la aplicación de manera local con
dotnet publish
. - Compila un contenedor que ejecuta la aplicación con Cloud Build.
- Implementa la app en Cloud Run.
- Permite que el proyecto cree tokens de autenticación de Pub/Sub.
- Crea una cuenta de servicio para representar la identidad de suscripción de Pub/Sub.
- Otorga permiso a la cuenta de servicio para invocar el servicio
TranslateWorker
. Crea un tema y una suscripción de Pub/Sub
Información sobre el servicio TranslateUI
El servicio TranslateUI
renderiza una página web que muestra traducciones recientes y acepta solicitudes de traducciones nuevas.
La clase
StartUp
configura una app de ASP.NET y crea clientes de Pub/Sub y Firestore.El controlador de índices
Index
obtiene todas las traducciones existentes de Firestore y completa unViewModel
con la lista:Para solicitar una traducción nueva, se debe enviar un formulario HTML. El controlador de solicitudes de traducción valida la solicitud y publica un mensaje en Pub/Sub:
Implementa el servicio TranslateUI
En el directorio
BackgroundProcessing
, ejecuta la secuencia de comandos de PowerShell para compilar e implementar el servicio en Cloud Run:./PublishTo-CloudRun.ps1
Información sobre la secuencia de comandos PublishTo-CloudRun.ps1
La secuencia de comandos PublishTo-CloudRun.ps1
publica la app en Cloud Run.
La secuencia de comandos hace lo siguiente:
- Compila la aplicación de manera local con
dotnet publish
. - Compila un contenedor que ejecuta la app mediante Cloud Build.
Implementa la app en Cloud Run.
Prueba la app
Después de ejecutar correctamente la secuencia de comandos PublishTo-CloudRun.ps1
, intenta solicitar una traducción.
El comando final en la secuencia de comandos
PublishTo-CloudRun.ps1
te indica la URL de tu servicio de IU. En la ventana de la terminal, busca la URL del servicioTranslateUI
:gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
En tu navegador, ve a la URL que obtuviste del paso anterior.
Hay una página con una lista vacía de traducciones y un formulario para solicitar traducciones nuevas.
En el campo Texto para traducir, ingresa el texto que desees traducir, por ejemplo,
Hello, World.
.Haga clic en Enviar.
Para actualizar la página, haz clic en Actualizar refresh. Aparece una fila nueva en la lista de traducciones. Si no ves la traducción, espera unos segundos y vuelve a intentarlo. Si la traducción sigue sin aparecer, consulta la siguiente sección sobre cómo depurar la app.
Depura la app
Si no puedes conectarte al servicio de Cloud Run o no ves nuevas traducciones, verifica lo siguiente:
Comprueba que la secuencia de comandos
PublishTo-CloudRun.ps1
se completó con éxito y que no se generó ningún error. Si hubo errores (por ejemplo,message=Build failed
), corrígelos y vuelve a intentarlo.Comprueba si hay errores en los registros.
En la consola de Google Cloud, ve a la página de Cloud Run.
Haz clic en el nombre del servicio,
translate-ui
.Haga clic en Registros.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto de Google 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.
Borra los servicios de Cloud Run.
Borra los servicios de Cloud Run que creaste en este instructivo:
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker
¿Qué sigue?
- Obtén más información sobre Cloud Run.