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

El código para este tutorial lo encuentra en el siguiente repositorio de GitHub: GCP Cloud Functions.

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

Listar heroes:

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

Detalle héroe:

Endpoint

/

Descripción

Retorna la información del héroe asociado al identificador especificado

Método

GET

Retorno

application/json. Con un diccionario que representa la información de una entrega.

Parámetros del Endpoint

id: Identificador del héroe que se desea consultar.

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

En la terminal ejecute el siguiente comando para verificar que el ID de proyecto corresponde con el se la consola de google cloud:

user@192 ~ % gcloud config get-value project

Para habilitar el servicio de Cloud Functions, debe ingresar a la consola de Google Cloud y dirigirse a Cloud Functions:

A continuación debería ver un diálogo en el que se le indica que Cloud Functions está siendo preparado:

El proceso toma alrededor de 30 segundos. Una vez termine el proceso, continúe a la siguiente sección

Para poder realizar la publicación de las funciones, necesitaremos activar el API de Cloud Build. El API de Cloud en general hace referencia a todos aquellos servicios provistos por Google Cloud Platform para la automatización de los flujos de trabajo. En particular la que necesitamos se encarga de realizar la compilación de los artefactos de código (entre otras cosas). Si desea obtener más información puede revisar el siguiente enlace API de Cloud Build

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, necesitaremos habilitar la funcionalidad de compilación y ejecución de las funciones serverless. Para ello nos dirigimos a la barra de búsqueda y escribimos "Cloud Build 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 Build 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 publicación de las funciones.

En esta sección vamos a publicar las dos funciones disponibles en el tutorial:

Implementación de la función listar

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-listar --entry-point listar_heroes --runtime python39 --trigger-http --allow-unauthenticated --memory 128MB --region us-central1 --timeout 60 --min-instances 0 --max-instances 1

A continuación se muestra la explicación de los parámetros de configuración utilizados:

Parámetro

Utilidad

--entry-point

Esto establece la función que será llamada cuando la función sea invocada, además de definir el path de consumo con el que la podremos llamar.

--runtime

Esto nos permite establecer en qué está desarrollada la función y qué tecnología será utilizada para la ejecución. En nuestro caso utilizaremos python en la versión 3.9. Sin embargo, existen otras versiones y compiladores disponibles.

--trigger-http

Los tags que inician con "trigger" nos permiten definir el tipo de activador que invocará la función. En este caso establecemos que el activador va a ser una petición REST.

--allow-unauthenticated

Este tag permite que la función se pueda consumir de manera pública y que no requiera ningún esquema de autenticación.

--memory

Establece la cantidad de memoria que puede utilizar la función. Solo se permite la configuración de los siguientes valores: 128MB, 256MB, 512MB, 1024MB, 2048MB, 4096MB, y 8192MB.

--region

Especifica la región en la que será publicada la función. Si desea ver las regiones disponibles, puede ver el siguiente enlace: Regiones y zonas.

--timeout

Establece el máximo tiempo de espera que se tendrá para crear una función y atender la solicitud del activador.

--min-instances

Establece la cantidad mínima de instancias que se tendrán de la función. Normalmente este valor es cero para ahorrar costos. Sin embargo se puede establecer en un valor mañor para evitar problemas de tiempo de espera cuando se realizan llamados entre periodos prolongados de tiempos.

--max-instances

Establece la máxima cantidad de funciones que se pueden crear. Esto es muy útil cuando se realiza la definición de la carga del servicio. Tener presente que si las peticiones superan este valor, se pueden llegar a presentar problemas de timeout

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

Puede acceder al servicio de Google Cloud Functions en el menú de su consola:

Y podremos ver la función publicada.

Si seleccionamos el nombre de la función, se nos mostrará el panel de administración. En este podemos encontrar las métricas generales para hacer seguimiento a las operaciones que se realizan. Además, podremos modificar las variables de entorno, configurar permisos, ver el log operativo, entre otras opciones.

Si nos dirigimos a la sección "ACTIVADOR" y seleccionamos el enlace en el navegador deberíamos poder ver el resultado del llamado a la función.

Implementación de la función detalle

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

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

user@192 ~ % cd detalle

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

user@192 ~ % gcloud functions deploy funcion-heroes-detalle --entry-point dar_heroe --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.

Prueba utilizando la herramienta de GCP.

Finalmente cuando tengamos la función creada podemos realizar una prueba para verificar su correcto funcionamiento. Para ello nos vamos a la función y en las acciones seleccionamos "Probar función"

A continuación se nos mostrará una vista en donde podremos realizar diferentes pruebas para verificar el funcionamiento de la Cloud Function. Una vez estemos en la vista presionaremos el botón "Probar la función" ubicado en la parte inferior de la vista y deberíamos ver una respuesta exitosa con la información del listado de héroes.

Prueba utilizando cliente externo.

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 listar

¡É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&utm_medium=cpc&utm_term=gcp%20cloud%20functions&utm_campaign=latam-north-cloud-monitoring&utm_content=none&gclid=EAIaIQobChMImufEsKSD9QIV88uGCh0dnQCzEAAYASAAEgI1BPD_BwE&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&_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