En este tutorial se muestra cómo escribir, desplegar y llamar a un servicio de Cloud Run desde una suscripción de inserción de Pub/Sub.
Configurar los valores predeterminados de gcloud
Para configurar gcloud con los valores predeterminados de tu servicio de Cloud Run, sigue estos pasos:
Configura tu proyecto predeterminado:
gcloud config set project PROJECT_ID
Sustituye PROJECT_ID por el nombre del proyecto que has creado para este tutorial.
Configura gcloud para la región que hayas elegido:
gcloud config set run/region REGION
Sustituye REGION por la región de Cloud Run compatible que quieras.
Ubicaciones de Cloud Run
Cloud Run es regional, lo que significa que la infraestructura que ejecuta tus servicios de Cloud Run se encuentra en una región específica y Google la gestiona para que esté disponible de forma redundante en todas las zonas de esa región.
Cumplir tus requisitos de latencia, disponibilidad o durabilidad son factores primordiales para seleccionar la región en la que se ejecutan tus servicios de Cloud Run.
Por lo general, puedes seleccionar la región más cercana a tus usuarios, pero debes tener en cuenta la ubicación de los otros Google Cloudproductos que utiliza tu servicio de Cloud Run.
Usar Google Cloud productos juntos en varias ubicaciones puede afectar a la latencia y al coste de tu servicio.
Cloud Run está disponible en las siguientes regiones:
Con sujeción a los precios del nivel 1
asia-east1
(Taiwán)asia-northeast1
(Tokio)asia-northeast2
(Osaka)asia-south1
(Bombay, la India)europe-north1
(Finlandia)CO2 bajo
europe-north2
(Estocolmo)CO2 bajo
europe-southwest1
(Madrid)CO2 bajo
europe-west1
(Bélgica)CO2 bajo
europe-west4
(Países Bajos)CO2 bajo
europe-west8
(Milán)europe-west9
(París)CO2 bajo
me-west1
(Tel Aviv)northamerica-south1
(México)us-central1
(Iowa)CO2 bajo
us-east1
(Carolina del Sur)us-east4
(Norte de Virginia)us-east5
(Columbus)us-south1
(Dallas)CO2 bajo
us-west1
(Oregón)CO2 bajo
Con sujeción a los precios del nivel 2
africa-south1
(Johannesburgo)asia-east2
(Hong Kong)asia-northeast3
(Seúl, Corea del Sur)asia-southeast1
(Singapur)asia-southeast2
(Yakarta)asia-south2
(Delhi, la India)australia-southeast1
(Sídney)australia-southeast2
(Melbourne)europe-central2
Varsovia (Polonia)europe-west10
(Berlín)europe-west12
(Turín)europe-west2
(Londres, Reino Unido)CO2 bajo
europe-west3
(Fráncfort, Alemania)europe-west6
(Zúrich, Suiza)Bajas emisiones de CO2
me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal)CO2 bajo
northamerica-northeast2
(Toronto)CO2 bajo
southamerica-east1
(São Paulo, Brasil)CO2 bajo
southamerica-west1
(Santiago, Chile)CO2 bajo
us-west2
(Los Ángeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Si ya has creado un servicio de Cloud Run, puedes ver la región en el panel de control de Cloud Run de la Google Cloud consola.
Crear un repositorio estándar de Artifact Registry
Crea un repositorio estándar de Artifact Registry para almacenar tu imagen de contenedor:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=REGION
Sustituye:
- REPOSITORY con un nombre único para el repositorio.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
Crear un tema de Pub/Sub
El servicio de ejemplo se activa mediante mensajes publicados en un tema de Pub/Sub, por lo que tendrás que crear un tema en Pub/Sub.
gcloud
Para crear un tema de Pub/Sub, usa el comando:
gcloud pubsub topics create myRunTopic
Puedes usar myRunTopic o sustituirlo por un nombre de tema único en tu proyecto Google Cloud .
Terraform
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
Para crear un tema de Pub/Sub, añade lo siguiente al archivo main.tf
:
Puedes usar un nombre de tema único en tu proyecto de Cloud.
Obtener el código de ejemplo
Para obtener el código de muestra que vas a usar, sigue estos pasos:
Clona el repositorio de aplicaciones de muestra en la máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
También puedes descargar el ejemplo como un archivo ZIP y extraerlo.
Cambia al directorio que contiene el código de ejemplo de Cloud Run:
Node.js
cd nodejs-docs-samples/run/pubsub/
Python
cd python-docs-samples/run/pubsub/
Go
cd golang-samples/run/pubsub/
Java
cd java-docs-samples/run/pubsub/
C#
cd dotnet-docs-samples/run/Run.Samples.Pubsub.MinimalApi/
Revisar el código
El código de este tutorial consta de lo siguiente:
Un servidor que gestiona las solicitudes entrantes.
Node.js
Para que el servicio Node.js sea fácil de probar, la configuración del servidor está separada del inicio del servidor.
El servidor web Node.js se configura en
app.js
.El servidor web se inicia en
index.js
:Python
Go
Java
C#
Un controlador que procesa el mensaje de Pub/Sub y registra un saludo.
Node.js
Python
Go
Java
C#
Debes codificar el servicio para que devuelva un código de respuesta HTTP preciso. Los códigos de éxito, como HTTP
200
o204
, confirman que el mensaje de Pub/Sub se ha procesado por completo. Los códigos de error, como400
o500
de HTTP, indican que se volverá a intentar enviar el mensaje, tal como se describe en la guía para recibir mensajes mediante Push.Un
Dockerfile
que define el entorno operativo del servicio. El contenido deDockerfile
varía según el idioma.Node.js
Python
Go
Java
En este ejemplo se usa Jib para crear imágenes de Docker con herramientas comunes de Java. Jib optimiza las compilaciones de contenedores sin necesidad de usar un Dockerfile ni de tener Docker instalado. Más información sobre cómo crear contenedores Java con Jib
C#
Para obtener información sobre cómo autenticar el origen de las solicitudes de Pub/Sub, consulta Integrar con Pub/Sub.
Lanzar el código
El envío de código consta de tres pasos: crear una imagen de contenedor con Cloud Build, subir la imagen de contenedor a Artifact Registry y desplegar la imagen de contenedor en Cloud Run.
Para enviar tu código, sigue estos pasos:
-
Crea el contenedor y publícalo en Artifact Registry:
Node.js
Reemplazar:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se realiza correctamente, verás un mensaje de ÉXITO que contiene el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y se puede volver a usar si es necesario.
Python
Reemplazar:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se realiza correctamente, verás un mensaje de ÉXITO que contiene el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y se puede volver a usar si es necesario.
Go
Reemplazar:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se realiza correctamente, verás un mensaje de ÉXITO que contiene el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y se puede volver a usar si es necesario.
Java
-
Usa el asistente de credenciales de la CLI de gcloud para autorizar a Docker a enviar contenido a tu Artifact Registry.
gcloud auth configure-docker
-
Usa el complemento Jib Maven para compilar y enviar el contenedor a Artifact Registry.
Reemplazar:mvn compile jib:build -D image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si todo va bien, debería aparecer el mensaje BUILD SUCCESS. La imagen se almacena en Artifact Registry y se puede volver a usar si es necesario.
C#
Reemplazar:gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se realiza correctamente, verás un mensaje de ÉXITO que contiene el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y se puede volver a usar si es necesario.
-
Despliega tu aplicación:
Línea de comandos
-
Ejecuta el siguiente comando para implementar tu aplicación:
Reemplazar:gcloud run deploy pubsub-tutorial --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub --no-allow-unauthenticated
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- REPOSITORY con el nombre del repositorio de Artifact Registry.
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen ypubsub-tutorial
es el nombre del servicio. Verás que la imagen del contenedor se ha desplegado en el servicio y la región que configuraste anteriormente en Configurar gcloud.La marca
--no-allow-unauthenticated
restringe el acceso no autenticado al servicio. Si mantienes el servicio privado, puedes confiar en la integración automática de Pub/Sub de Cloud Run para autenticar las solicitudes. Consulta Integrar con Pub/Sub para obtener más información sobre cómo se configura. Para obtener más información sobre la autenticación basada en la gestión de identidades y accesos, consulta Gestionar el acceso con la gestión de identidades y accesos.Espera a que se complete el despliegue, que puede tardar aproximadamente medio minuto. Si la acción se realiza correctamente, la línea de comandos mostrará la URL del servicio. Esta URL se usa para configurar una suscripción de Pub/Sub.
-
Si quieres implementar una actualización de código en el servicio, repite los pasos anteriores. Cada despliegue en un servicio crea una revisión y empieza a servir tráfico automáticamente cuando está listo.
Terraform
Para crear un servicio de Cloud Run, añade lo siguiente al archivo
.tf
que ya tengas. Reemplazar:resource "google_project_service" "cloudrun_api" { service = "run.googleapis.com" disable_on_destroy = false } resource "google_cloud_run_v2_service" "default" { name = "pubsub-tutorial" location = "REGION" template { containers { image = "IMAGE_URL" } } depends_on = [google_project_service.cloudrun_api] }
- IMAGE_URL con la URL de la imagen:
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
- REGION con la Google Cloud región que se va a usar en el repositorio de Artifact Registry.
-
Integrar con Pub/Sub
Para integrar el servicio con Pub/Sub, sigue estos pasos:
gcloud
Crea o selecciona una cuenta de servicio que represente la identidad de la suscripción de Pub/Sub.
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Puedes usar
cloud-run-pubsub-invoker
o sustituirlo por un nombre único en tu proyecto. Google CloudCrea una suscripción de Pub/Sub con la cuenta de servicio:
Da permiso a la cuenta de servicio invocadora para invocar tu servicio
pubsub-tutorial
:gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID. \ --role=roles/run.invoker
Los cambios de IAM pueden tardar varios minutos en propagarse. Mientras tanto, es posible que veas errores
HTTP 403
en los registros de servicio.Permite que Pub/Sub cree tokens de autenticación en tu proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \ --role=roles/iam.serviceAccountTokenCreator
Sustituye:
- PROJECT_ID por el ID de tu proyecto. Google Cloud
- PROJECT_NUMBER con el número de tu proyecto Google Cloud .
El ID y el número de proyecto se indican en el panel Información del proyecto de la Google Cloud consola de tu proyecto.
Crea una suscripción de Pub/Sub con la cuenta de servicio:
gcloud pubsub subscriptions create myRunSubscription --topic myRunTopic \ --ack-deadline=600 \ --push-endpoint=SERVICE-URL/ \ --push-auth-service-account=cloud-run-pubsub-invoker@PROJECT_ID.
Sustituye:
- myRunTopic con el tema que creaste anteriormente.
- SERVICE-URL con la URL HTTPS proporcionada al desplegar el servicio. Esta URL funciona aunque hayas añadido una asignación de dominio.
- PROJECT_ID por el ID de tu proyecto. Google Cloud
La marca
--push-auth-service-account
activa la función de inserción de Pub/Sub para la autenticación y la autorización.El dominio de tu servicio de Cloud Run se registra automáticamente para usarlo con suscripciones de Pub/Sub.
En Cloud Run, solo se realiza una comprobación de autenticación integrada para verificar que el token sea válido y una comprobación de autorización para comprobar que la cuenta de servicio tiene permiso para invocar el servicio de Cloud Run.
Tu servicio ahora está totalmente integrado con Pub/Sub.
Terraform
Crea o selecciona una cuenta de servicio que represente la identidad de la suscripción de Pub/Sub.
Crea una suscripción de Pub/Sub con la cuenta de servicio:
Da permiso a la cuenta de servicio invocadora para invocar tu servicio
pubsub-tutorial
:Permite que Pub/Sub cree tokens de autenticación en tu proyecto:
Crea una suscripción de Pub/Sub con la cuenta de servicio:
Tu servicio ahora está totalmente integrado con Pub/Sub.
Pruébalo
Para probar la solución integral, sigue estos pasos:
Envía un mensaje de Pub/Sub al tema:
gcloud pubsub topics publish myRunTopic --message "Runner"
También puedes publicar mensajes de forma programática en lugar de usar la línea de comandos, como se muestra en este tutorial. Para obtener más información, consulta Publicar mensajes.
Ve a los registros del servicio:
- Ve a la Google Cloud consola.
- Haz clic en el servicio
pubsub-tutorial
. Selecciona la pestaña Registros.
Puede que los registros tarden unos instantes en aparecer. Si no los ves inmediatamente, vuelve a comprobarlo al cabo de unos instantes.
Busca el mensaje "Hello Runner!".