En este instructivo, se muestra cómo escribir una función de Cloud Run HTTP que devuelve resultados de Spanner.
Objetivos
Escribe, implementa y activa una función de HTTP que acceda a Spanner.
Costos
En este documento, se usan Spanner y Cloud Run, que son componentes facturables de Google Cloud.
Para obtener información sobre el costo de usar Spanner, consulta Precios de Spanner.
Para obtener información sobre el costo del uso de Cloud Run, incluidas las invocaciones gratuitas, consulta Precios de Cloud Run.
Antes de comenzar
En este documento, se supone que tienes una instancia de Spanner llamada
test-instancey una base de datos llamadaexample-dbque usa el esquema de la aplicación de música. Para obtener instrucciones sobre cómo crear una instancia y una base de datos con el esquema de aplicación de música, consulta la guía de inicio rápido sobre el uso de Console o los instructivos de primeros pasos con Node.js o Python.Habilita las APIs de Cloud Run y Cloud Build.
Instala e inicializa gcloud CLI.
Si ya tienes instalada gcloud CLI, ejecuta el siguiente comando para actualizarla:
gcloud components updatePrepara tu entorno de desarrollo:
Node.js
Consulta la guía de configuración de Node.js.
Python
Consulta la guía de configuración de Python.
Roles obligatorios
Para obtener los permisos que necesitas para implementar servicios de Cloud Run desde la fuente, pídele a tu administrador que te otorgue los siguientes roles de IAM :
-
Desarrollador de origen de Cloud Run (
roles/run.sourceDeveloper) en tu proyecto -
Consumidor de uso del servicio (
roles/serviceusage.serviceUsageConsumer) en el servicio de Cloud Run -
Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la identidad del servicio -
Administrador de Spanner (
roles/spanner.admin) en la instancia de Spanner
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con lasGoogle Cloud APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta los permisos de implementación y cómo administrar el acceso.
Roles para la cuenta de servicio de Cloud Build
Tú o tu administrador deben otorgar a la cuenta de servicio de Cloud Build el siguiente rol de IAM.
Haz clic para ver los roles necesarios para la cuenta de servicio de Cloud Build
Cloud Build usa automáticamente la cuenta de servicio predeterminada de Compute Engine como la cuenta de servicio predeterminada de Cloud Build para compilar tu código fuente y el recurso de Cloud Run, a menos que anules este comportamiento. Para que Cloud Build pueda compilar tus fuentes, pídele a tu administrador que otorgue el rol de Compilador de Cloud Run (roles/run.builder) a la cuenta de servicio predeterminada de Compute Engine en tu proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Reemplaza PROJECT_NUMBER por el número de tu proyecto Google Cloudy PROJECT_ID por el ID del proyecto proyecto Google Cloud. Para obtener instrucciones detalladas sobre cómo encontrar el ID y el número de tu proyecto, consulta Crea y administra proyectos.
El otorgamiento del rol de compilador de Cloud Run a la cuenta de servicio predeterminada de Compute Engine tarda un par de minutos en propagarse.
Roles para la identidad del servicio
Debes otorgar a la identidad de servicio que usas para el servicio de Cloud Run el siguiente rol de IAM.
- Lector de base de datos de Spanner (
roles/spanner.databaseReader)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Prepara la aplicación
Clona el repositorio de la app de muestra en tu máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.gitDe manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitDe manera opcional, puedes descargar la muestra como un archivo zip y extraerla.
Cambia al directorio que contiene el código de muestra de Cloud Run Functions para acceder a Spanner:
Node.js
cd nodejs-docs-samples/functions/spannerPython
cd python-docs-samples/functions/spannerVe el código de muestra:
Node.js
Python
La función envía una consulta en SQL para recuperar todos los datos de
Albumsde tu base de datos. La función se ejecuta cuando haces una solicitud HTTP al extremo de la función.
Implementa la función
Ejecuta el siguiente comando en el directorio spanner para implementar la función con un activador HTTP:
Node.js
gcloud run deploy nodejs-spanner-function \
--source . \
--region REGION \
--function spannerQuickstart \
--base-image RUNTIME_ID \
--log-httpPython
gcloud run deploy python-spanner-function \
--source . \
--region REGION \
--function spanner_read_data \
--base-image RUNTIME_ID \
--log-httpReemplaza lo siguiente:
REGION con el nombre de la región deGoogle Cloud en la que deseas implementar tu función (por ejemplo,
us-west1).RUNTIME_ID con el ID de entorno de ejecución adecuado (por ejemplo,
nodejs22). Consulta Entornos de ejecución de lenguajes y las imágenes base admitidos.
La implementación de la función puede tardar hasta dos minutos.
Ten en cuenta el valor de url que se muestra cuando tu función termina de implementarse. Lo usarás
cuando actives la función.
Puedes ver las funciones implementadas en la página de Cloud Run en la consola deGoogle Cloud . También puedes crear y editar funciones en esa página, en la que, además, puedes obtener detalles y diagnósticos de tus funciones.
Activa la función
Haz una solicitud HTTP a tu función:
curl URL
Reemplaza URL por el valor de la URL que se muestra cuando la función se termina de implementar.
Deberías ver un resultado que muestre los resultados de la consulta en SQL, si es que trabajaste con un instructivo de introducción y completaste la base de datos:
SingerId: 2, AlbumId: 2, AlbumTitle: Forever Hold Your Peace
SingerId: 1, AlbumId: 2, AlbumTitle: Go, Go, Go
SingerId: 2, AlbumId: 1, AlbumTitle: Green
SingerId: 2, AlbumId: 3, AlbumTitle: Terrified
SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk
También puedes visitar la URL de la función en tu navegador para ver los resultados de tu consulta en SQL.
Realiza una limpieza
Para evitar incurrir en cargos adicionales en tu cuenta de Google Cloud por los recursos de Spanner y Cloud Run Functions utilizados en este documento, haz lo siguiente:
Borra la instancia:
gcloud CLI instances delete test-instanceUsa este comando para borrar el servicio de Cloud Run que implementaste en este instructivo:
Node.js
gcloud run services delete nodejs-spanner-functionPython
gcloud run services delete python-spanner-function
¿Qué sigue?
- Obtén más información sobre cómo escribir funciones de Cloud Run.
- Obtén más información sobre cómo implementar funciones de Cloud Run.
- Obtén más información para activar funciones de Cloud Run.