En este instructivo, se muestra cómo escribir un servicio de Cloud Run desde una suscripción de envío a Pub/Sub, cómo implementarlo y cómo llamarlo.
Objetivos
- Escribir, compilar y, también, implementar un servicio en Cloud Run
- Llamar al servicio mediante la publicación de un mensaje en un tema de Pub/Sub
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.
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.
-
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 Artifact Registry, Cloud Build, Pub/Sub and Cloud Run APIs.
- Instala e inicializa gcloud CLI
- Actualiza los componentes:
gcloud components update
Funciones obligatorias
Si quieres obtener los permisos que necesitas para completar el instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Editor de Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador de Cloud Run (
roles/run.admin
) -
Crea cuentas de servicio (
roles/iam.serviceAccountCreator
) -
Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin
) -
Editor de Pub/Sub (
roles/pubsub.editor
) -
Usuario de cuenta de servicio (
roles/iam.serviceAccountUser
) -
Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer
) -
Administrador de almacenamiento (
roles/storage.admin
)
Si quieres obtener más información para otorgar roles, consulta Administra el acceso.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Configura los valores predeterminados de gcloud
A fin de configurar gcloud con los valores predeterminados para el servicio de Cloud Run, sigue estos pasos:
Configura el proyecto predeterminado:
gcloud config set project PROJECT_ID
Reemplaza PROJECT_ID por el nombre del proyecto que creaste para este instructivo.
Configura gcloud en la región que elegiste:
gcloud config set run/region REGION
Reemplaza REGION por la región de Cloud Run compatible que prefieras.
Ubicaciones de Cloud Run
Cloud Run es regional, lo que significa que la infraestructura que ejecuta los servicios se ubica en una región específica, y Google la administra para que esté disponible de manera redundante en todas las zonas de esa región.
El cumplimiento de los requisitos de latencia, disponibilidad o durabilidad es el factor principal para seleccionar la región en la que se ejecutan los servicios de Cloud Run.
Por lo general, puedes seleccionar la región más cercana a los usuarios, pero debes considerar la ubicación de los otros productos de Google Cloud que usa el servicio de Cloud Run.
Si usas productos de Google Cloud en varias ubicaciones, la latencia y el costo del servicio pueden verse afectados.
Cloud Run está disponible en las siguientes regiones:
Sujetas a los Precios del nivel 1
asia-east1
(Taiwán)asia-northeast1
(Tokio)asia-northeast2
(Osaka)europe-north1
(Finlandia) Bajo nivel de CO2europe-southwest1
(Madrid)europe-west1
(Bélgica) Bajo nivel de CO2europe-west4
(Países Bajos)europe-west8
(Milán)europe-west9
(París) Bajo nivel de CO2me-west1
(Tel Aviv)us-central1
(Iowa) Bajo nivel de CO2us-east1
(Carolina del Sur)us-east4
(Virginia del Norte)us-east5
(Columbus)us-south1
(Dallas)us-west1
(Oregón) Bajo nivel de CO2
Sujetas 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-south1
(Bombay, India)asia-south2
Delhi (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) Bajo nivel de CO2europe-west3
(Fráncfort, Alemania) Bajo nivel de CO2europe-west6
(Zúrich, Suiza) Bajo nivel de CO2me-central1
(Doha)me-central2
(Dammam)northamerica-northeast1
(Montreal) Bajo nivel de CO2northamerica-northeast2
(Toronto) Bajo nivel de CO2southamerica-east1
(São Paulo, Brasil) Bajo nivel de CO2southamerica-west1
(Santiago, Chile) Bajo nivel de CO2us-west2
(Los Ángeles)us-west3
(Salt Lake City)us-west4
(Las Vegas)
Si ya creaste un servicio de Cloud Run, puedes ver la región en el panel de Cloud Run en la consola de Google Cloud.
Crea 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
Reemplaza lo siguiente:
- REPOSITORY por un nombre único para el repositorio.
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
Crear un tema de Pub/Sub
El servicio de muestra se activa mediante mensajes publicados en un tema de Pub/Sub, por lo que deberás crear un tema en Pub/Sub.
gcloud
Para crear un tema nuevo de Pub/Sub, usa el siguiente comando:
gcloud pubsub topics create myRunTopic
Puedes usar myRunTopic o reemplazarlo por un nombre de tema único dentro de tu proyecto de Google Cloud.
Terraform
Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.
Para crear un tema de Pub/Sub, agrega lo siguiente al archivo main.tf
existente:
Puedes usar un nombre de tema único dentro de tu proyecto de Cloud.
Recupera la muestra de código
A fin de recuperar la muestra de código para su uso, haz lo siguiente:
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
C#
git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
De manera opcional, puedes descargar la muestra como un archivo ZIP y extraerla.
Ve al directorio que contiene el código de muestra 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/pubsub/
Revisa el código
El código de este instructivo consta de los siguientes elementos:
Un servidor que maneja las solicitudes entrantes
Node.js
Para que el servicio de Node.js sea fácil de probar, la configuración del servidor es independiente del inicio del servidor.
El servidor web de Node.js está configurado 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 mostrar un código de respuesta HTTP preciso. Los códigos de éxito, como HTTP
200
o204
, confirman la recepción del procesamiento completo del mensaje de Pub/Sub. Los códigos de error, como HTTP400
o500
, indican que se volverá a intentar enviar el mensaje, como se describe en la Guía de recepción de mensajes mediante suscripciones de envío.Un
Dockerfile
que define el entorno operativo del servicio. El contenido delDockerfile
varía según el lenguajeNode.js
Python
Go
Java
En esta muestra, se usa Jib para compilar imágenes de Docker mediante herramientas de Java comunes. Jib optimiza las compilaciones de contenedores sin la necesidad de tener un Dockerfile o tener Docker instalado. Obtén más información sobre la compilación de contenedores de Java con Jib.
C#
Para obtener detalles sobre cómo autenticar el origen de las solicitudes de Pub/Sub, consulta Integra en Pub/Sub.
Envía el código
El código de envío consta de tres pasos: compilar una imagen de contenedor con Cloud Build, subir la imagen de contenedor a Artifact Registry y, luego, implementar la imagen de contenedor en Cloud Run.
Para enviar el código, haz lo siguiente:
-
Compila el contenedor y publica en Artifact Registry:
Node.js
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se completa de manera correcta, deberías ver un mensaje de ÉXITO con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y puede volver a usarse si es necesario.
Python
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se completa de manera correcta, deberías ver un mensaje de ÉXITO con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y puede volver a usarse si es necesario.
Go
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se completa de manera correcta, deberías ver un mensaje de ÉXITO con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y puede volver a usarse si es necesario.
Java
-
Usa el auxiliar de credenciales de gcloud CLI
para autorizar a Docker a que envíe contenido a tu Artifact Registry.
gcloud auth configure-docker
-
Usa el complemento de Maven para Jib para compilar y enviar el contenedor a Artefact Registry.
mvn compile jib:build -D image=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si se ejecuta de forma correcta, deberías ver un mensaje de COMPILACIÓN EXITOSA. La imagen se almacena en Artifact Registry y puede volver a usarse si es necesario.
C#
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen.Si la operación se completa de manera correcta, deberías ver un mensaje de ÉXITO con el ID, la hora de creación y el nombre de la imagen. La imagen se almacena en Artifact Registry y puede volver a usarse si es necesario.
-
Implementa tu aplicación:
Línea de comandos
-
Ejecuta el comando siguiente para implementar tu app:
gcloud run deploy pubsub-tutorial --image REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub --no-allow-unauthenticated
Reemplaza lo siguiente:- PROJECT_ID por el ID del proyecto de Google Cloud.
- REPOSITORY por el nombre del repositorio de Artifact Registry
- REGION por la región de Google Cloud que se usará para el repositorio de Artifact Registry.
pubsub
es el nombre de la imagen ypubsub-tutorial
es el nombre del servicio. Ten en cuenta que la imagen de contenedor se implementa en el servicio y en la región que configuraste antes en Configura 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 Integra en Pub/Sub para obtener más detalles sobre cómo se configura. Para obtener más detalles sobre la autenticación basada en la administración de identidades y accesos (IAM), consulta Administra el acceso mediante la IAM.Espera hasta que finalice la implementación; esto puede tomar alrededor de medio minuto. Si la operación se completa de forma correcta, la línea de comandos mostrará la URL de servicio. Esta URL se usa para configurar una suscripción a Pub/Sub.
-
Si deseas implementar una actualización de código en el servicio, repite los pasos anteriores. Cada implementación en un servicio crea una revisión nueva y comienza a entregar tráfico de forma automática cuando está lista.
Terraform
Para crear un servicio de Cloud Run, agrega lo siguiente al archivo
.tf
existente.Reemplaza el valor de
image
por la URL de tu imagen:REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
. -
Integra en Pub/Sub
Para integrar el servicio en Pub/Sub, sigue estos pasos:
gcloud
Crea o selecciona una cuenta de servicio para representar la identidad de suscripción a 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 reemplazarlo por un nombre único dentro de tu proyecto de Google Cloud.Crea una suscripción a Pub/Sub con la cuenta de servicio:
Usa este comando para permitir que la cuenta de servicio invoque el servicio
pubsub-tutorial
:gcloud run services add-iam-policy-binding pubsub-tutorial \ --member=serviceAccount:cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/run.invoker
Es posible que los cambios de IAM tomen varios minutos en propagarse. Mientras tanto, puede que veas errores
HTTP 403
en los registros del servicio.Permite que Pub/Sub cree tokens de autenticación en el proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Reemplaza lo siguiente:
- PROJECT_ID por el ID del proyecto de Google Cloud.
- PROJECT_NUMBER por tu número de proyecto de Google Cloud
El ID y el número del proyecto se enumeran en el panel Información del proyecto en la consola de Google Cloud para el proyecto.
Crea una suscripción a 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.iam.gserviceaccount.com
Reemplaza lo siguiente:
- myRunTopic por el tema que creaste antes.
- SERVICE-URL por la URL HTTPS proporcionada en la implementación del servicio. Esta URL funciona incluso si también agregaste una asignación de dominio
- PROJECT_ID por el ID del proyecto de Google Cloud.
La marca
--push-auth-service-account
activa las funciones de envío de Pub/Sub para la autenticación y la autorización.Tu dominio del servicio de Cloud Run se registra de manera automática para que se use con las suscripciones a Pub/Sub.
Solo para Cloud Run, hay una verificación de autenticación integrada de que el token sea válido y una verificación de autorización de que la cuenta de servicio tenga permiso para invocar el servicio de Cloud Run.
Tu servicio ahora está completamente integrado en Pub/Sub.
Terraform
Crea o selecciona una cuenta de servicio para representar la identidad de suscripción a Pub/Sub.
Crea una suscripción a Pub/Sub con la cuenta de servicio:
Usa este comando para permitir que la cuenta de servicio invoque el servicio
pubsub-tutorial
:Permite que Pub/Sub cree tokens de autenticación en el proyecto:
Crea una suscripción a Pub/Sub con la cuenta de servicio:
Tu servicio ahora está completamente integrado en Pub/Sub.
Probarlo
Para probar la solución de extremo a extremo, 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 manera programática en lugar de usar la línea de comandos como se muestra en este instructivo. Para obtener más información, consulta Publica mensajes.
Navega a los registros de servicio:
- Navega a Google Cloud Console.
- Haz clic en el servicio
pubsub-tutorial
. Selecciona la pestaña Registros.
Los registros pueden tomar un tiempo en aparecer. Si no los ves de inmediato, vuelve a revisar en unos minutos.
Busca el mensaje “Hello Runner!”.
Limpia
Para revisar un caso práctico más detallado del uso de Cloud Run con Pub/Sub, omite la limpieza por ahora y continúa con el Instructivo de procesamiento de imágenes con Cloud Run.
Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- 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 recursos del instructivo
Usa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:
gcloud run services delete SERVICE-NAME
En el ejemplo anterior, SERVICE-NAME es el nombre del servicio que elegiste.
También puedes borrar los servicios de Cloud Run desde la consola de Google Cloud.
Quita la configuración de región predeterminada de gcloud que agregaste durante la configuración en el instructivo:
gcloud config unset run/region
Quita la configuración del proyecto:
gcloud config unset project
Borra otros recursos de Google Cloud que creaste en este instructivo:
- Borra el tema de Pub/Sub
myRunTopic
. - Borra la suscripción a Pub/Sub
myRunSubscription
. - Borra la imagen de contenedor con el nombre
REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/pubsub
de Artifact Registry. - Borra la cuenta de servicio de invocador
cloud-run-pubsub-invoker@PROJECT_ID.iam.gserviceaccount.com
.
- Borra el tema de Pub/Sub
¿Qué sigue?
- Consulta Restringe el ingreso con el fin de obtener información sobre cómo aumentar la seguridad de producción mediante el uso de controles de entrada internos para limitar el ingreso.
- Expande el servicio de muestra implementado en este instructivo para agregar una funcionalidad de procesamiento de imágenes que modifique las imágenes subidas a Cloud Storage.
- Obtén más información sobre cómo se ajustan los temas a la arquitectura de Pub/Sub y cómo administrarlos.
- Obtén más información sobre las suscripciones a Pub/Sub en Administra suscripciones.
- Explora arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.