Objetivos

Al finalizar el tutorial el estudiante estará en capacidad de:

Requisitos para desarrollar el tutorial

En particular se utilizarán los siguientes recursos:

  1. Contar con una cuenta activa en Google Cloud y con recursos para la creación de servicios. Además, contar con un proyecto creado en el que deberá crear la función. En caso de no tenerlo, a continuación se encuentra el manual para crearlos y/o administrarlos: Crea y administra proyectos | Documentación de Resource Manager | Google Cloud
  2. Instalación y configuración para desarrollo en Python. En caso de no tenerlo instalado o correctamente configurado, a continuación se muestra el manual de instalación y configuración: Configura un entorno de desarrollo de Python | Google Cloud
  3. Contar con un editor o IDE para manipular de manera correcta el código. Se recomienda trabajar con Visual Studio Code, pero puede usar el editor de su preferencia. A continuación se muestran los pasos de instalación de Visual Studio Code: Visual Studio Code - Code Editing. Redefined
  4. gcloud SDK para acceder a los servicios del proveedor Google Cloud Platform a partir de la consola. En caso de no tenerla instalada puede consultar el siguiente manual de instalación: Instalación de SDK de Cloud | Google Cloud
  5. Concluir de manera exitosa el tutorial de despliegue de funciones como servicio.

El código de la aplicación lo encuentra en el siguiente repositorio de GitHub: gcp_faas_datastore

La aplicación es una pequeña API en Python y Flask con tres endpoints.

Crear héroes:

Endpoint

/

Descripción

Crea un archivo con la información del héroe especificada

Método

POST

Retorno

application/json, con la información de un pedido.

Cuerpo de la petición

Objeto JSON con la información del nuevo héroe a crear

Listar héroes:

Endpoint

/

Descripción

Retorna la lista completa de heroes con los detalles de estos

Método

GET

Retorno

application/json, con la información de un pedido.

Parámetros del Endpoint

Ninguno

Debe verificar que el proyecto objetivo se encuentra seleccionado tanto el de la consola de google cloud como en la consola local de su computador.

En google cloud asegúrese de tener seleccionado el proyecto al entrar a console.cloud.google.com

Para poder utilizar el servicio de Datastore, es necesario habilitar el API. El API nos permitirá crear y administrar el servicio de base de datos NoSQL que podemos utilizar con el servicio de Datastore. Particularmente con este servicio podemos crear y administrar bases de datos NoSQL de alta disponibilidad, autoescalable y que además garantiza todas las propiedades ACID para cada transacción realizada. Es un servicio muy práctico para desarrollo web y aplicaciones IOT. Si desea conocer más sobre las características de este servicio, puede consultar el siguiente enlace: Datastore

Para realizar la activación, debemos dirigirnos a la biblioteca de APIs que nos ofrece Google. Para ellos, nos dirigimos al menú de navegación y buscaremos la opción "API y servicios". Luego seleccionaremos la opción "Biblioteca"

Está opción nos dirigirá a la página de búsqueda de la biblioteca de API de google. En ella podremos encontrar los distintos servicios ofrecidos en GCP y con los que nos podemos integrar. Para nuestro caso, buscaremos el API "Cloud Datastore API".

Luego de esto se nos mostrarán todas las coincidencias para la búsqueda que hemos realizado. Entre las primeras opciones debemos buscar y seleccionar una con el nombre "Cloud Datastore API" como se muestra en la siguiente imagen:

A continuación, nos redirigirá a una nueva pestaña en donde nos permitirá realizar la habilitación del API. Debemos presionar el botón "HABILITAR" para realizar posteriormente la creación de entidades y elementos en este servicio de base de datos.

Una vez habilitada la API, debemos crear y configurar el servicio donde almacenaremos los datos. Para esto nos dirigimos al menú de navegación y buscaremos la opción "Datastore".

Una vez seleccionado, se nos mostrarán dos posibles modos de configuración. El modo nativo, que hace alusión a la segunda versión del servicio de almacenamiento. Esta versión es conocida como "Modo Firestore". El segundo modo es el modo datastore, que en principio es la primera versión del servicio, pero que actualmente aprovecha algunas de las funcionalidades de Firestore pero integradas al esquema tradicional. Si quiere ver la comparativa entre ambos modos, puede revisar el siguiente enlace: Descripción general de datastore

Para nuestro caso, utilizaremos el modo Datastore para efectos prácticos del taller. Para configurarlo debemos seleccionar el botón "SELECCIONAR MODO DATASTORE"

Una vez seleccionada esta opción, nos pedirá elegir la ubicación en donde tendremos el servicio. Acá nos permitirá elegir entre una ubicación multiregional o regional según el nivel de disponibilidad que se necesite. Para este tutorial seleccionaremos una ubicación regional. Puede elegir la ubicación que desee, aunque se recomienda que sea en Estados Unidos para evitar problemas con alta latencia. Nosotros elegiremos us-east1. Y finalmente presionaremos el botón "CREAR BASE DE DATOS"

Al finalizar encontrará que su base de datos ha sido habilitada en la región seleccionada y que es posible agregar entidades.

Antes de desplegar las funciones revisemos previamente un poco el código de una de ellas.

Abra el código de la función crear

Termine de revisar la función y revise igualmente la función listar en la cuál hacemos consultas de los objetos de la entidad "Heroe".

A continuación pasaremos a publicar dos funciones que se conectarán al servicio de Datastore creado previamente.

Dentro del repositorio, abra la terminal y diríjase a la carpeta de la función crear.

user@192 ~ % cd crear

Una vez allí, ejecute el siguiente comando para desplegar la función.

user@192 ~ % gcloud functions deploy funcion-heroes-datastore-crear --entry-point crear --runtime python39 --trigger-http --allow-unauthenticated --memory 128MB --region us-central1 --timeout 60 --min-instances 0 --max-instances 1

La mayoría de los parámetros de configuración que utilizaremos son del tutorial "Despliegue de funciones como servicio". Si tiene duda de la configuración mostrada, puede hacer revisión de ese tutorial.

Si la publicación se realiza de manera exitosa entonces se nos mostrará un mensaje como el siguiente:

Y podremos ver la función publicada.

Luego de realizar la publicación de la función crear, debemos realizar la publicación de la función listar. Para ello seguiremos un proceso similar al anterior.

Dentro del repositorio, abra la terminal y diríjase a la carpeta de la función listar.

user@192 ~ % cd listar

Una vez allí, ejecute el siguiente comando para desplegar la función:

user@192 ~ % gcloud functions deploy funcion-heroes-datastore-listar --entry-point listar --runtime python39 --trigger-http --allow-unauthenticated --memory 128MB --region us-central1 --timeout 60 --min-instances 0 --max-instances 1

En la consola deberíamos ver un mensaje similar al anterior. Además, si vamos a cloud function, veremos que ahora tenemos publicadas dos funciones.

Para verificar la correcta configuración de la función y la configuración, puede realizar el consumo de la función a través de un cliente de consumo REST. A continuación mostraremos cómo puede realizar las distintas pruebas utilizando Postman.

Para poder realizar la prueba de las funciones, deberá importar la colección de Postman que se encuentra en la carpeta collections que se encuentra dentro del repositorio. Una vez la tenga importada, deberá configurar las variables para que pueda realizar las pruebas.

Para ello iremos a las opciones de la colección que acabamos de importar, seleccionaremos la opción "editar"

Luego en la pestaña "Variables", encontrará dos variables que debe configurar para la realización de la prueba.

Variable

Descripción

id_proyect

Se establece el valor del identificador del proyecto en el que se encuentra trabajando y en donde realizó la publicación de las funciones. Recuerde que lo puede obtener en el panel principal del proyecto o ejecutando el comando de validación del proyecto (ver sección Validación del proyecto).

region

Se debe establecer el valor de la región en donde se encuentra publicada la función. Eso lo puede obtener de función en la pestaña de "Detalles" o directamente del valor configurado en el parámetro --region de las opciones de despliegue. (Si no realizó ningún cambio al comando de publicación, la región será us-central1)

Una vez establecido los valores, presione la opción "Save".

Luego de esto, ya puede realizar peticiones a ambas funciones y debería obtener respuestas positivas.

Función crear:

Cada héroe que se creó va a generar una nueva entidad en Datastore.

Diríjase a la consola de Data Store en GCP y encontrará que se están almacenando cada uno de los objetos enviados con el tipo "Heroe", que como vimos estaba definido en el código de esa forma.

Función listar:

Debe poder obtener la información de todos los héroes que se tengan creados.

Para eliminar las funciones de su servicio, puede hacer uso del siguiente comando, donde FUNCTION_NAME es el nombre de la función que desea eliminar.

user@192 ~ % gcloud functions delete <FUNCTION_NAME>

¡Éxitos en el desarrollo del tutorial y nos vemos en una próxima oportunidad!

[1] Google Cloud Functions monitoring and troubleshooting | Dynatrace. (2021, 7 de septiembre). Dynatrace. https://www.dynatrace.com/monitoring/technologies/google-cloud-monitoring/google-cloud-functions/?utm_source=google&amp;utm_medium=cpc&amp;utm_term=gcp%20cloud%20functions&amp;utm_campaign=latam-north-cloud-monitoring&amp;utm_content=none&amp;gclid=EAIaIQobChMImufEsKSD9QIV88uGCh0dnQCzEAAYASAAEgI1BPD_BwE&amp;gclsrc=aw.ds

[2] Cloud Functions | Google Cloud. (s. f.). Google Cloud. https://cloud.google.com/functions

[3] Google Cloud Functions y Firebase | Firebase Documentation. (s. f.). Firebase. https://firebase.google.com/docs/functions/functions-and-firebase?hl=es#:~:text=Google%20Cloud%20Functions%20es%20la,y%20el%20equipo%20de%20Firebase.

[4] Plataforma de CI/CD sin servidores de Cloud Build | Cloud Build | Google Cloud. (s. f.). Google Cloud. https://cloud.google.com/build?hl=es_419&amp;_ga=2.136207985.-1334249875.1640946770

[5] Implementa desde Cloud Console | Documentación de Cloud Functions | Google Cloud. (s. f.). Google Cloud. https://cloud.google.com/functions/docs/deploying/console?hl=es-419

[6] "Firestore in Datastore mode documentation | Cloud Datastore Documentation | Google Cloud". Google Cloud. https://cloud.google.com/datastore/docs (accedido el 18 de febrero de 2022).

[7] "Datastore Overview | Cloud Datastore Documentation | Google Cloud". Google Cloud. https://cloud.google.com/datastore/docs/concepts/overview (accedido el 18 de febrero de 2022).