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. Contar con 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. Para este tutorial es de suma importancia que haya concluido de manera exitosa los tutoriales de despliegue de funciones como servicio, y funciones con storage (almacenamiento de archivos).

El código de la aplicación lo encuentra en el siguiente repositorio de GitHub gcp-das-storage

En el repositorio va a encontrar la siguiente función. En la carpeta "procesar-creacion-heroe" y cuenta con la siguiente definición del servicio.

/

Descripción

Retorna la entrada recibida por parámetro y deja un registro en la operación

Método

POST

Retorno

application/json, con la información recibirá en el body.

Body de la petición

application/json, no necesita una entrada concreta o específica.

Dinámica del ejercicio.

En este ejercicio se realizará la publicación de una sola función que se activará cuando se cree un nuevo archivo en el servicio de Cloud Storage. El comportamiento que se espera simular es la ejecución de la función cuando ocurra un evento de creación. En este tipo de esquemas se tiene la ventaja de que el o los agentes que se encargan de disparar el evento (en nuestro caso la creación del archivo) son agnósticos a la función en sí, por lo que solo definiremos la interacción de estos dos elementos en el sistema. A continuación se ilustran los componentes que interactúan y la dinámica de la ejecución para este taller:

Componentes involucrados

Diagrama de secuencia de la ejecución

Si verifica el código del archivo main.py en la carpeta del proyecto, encontrará que el código solo cuenta con una función que no hace uso de librerías de terceros. Lo que implica que nuestra función es independiente de la plataforma de ejecución, y será la plataforma la encargada de su llamado y no la función la encargada de escuchar los cambios en la plataforma.

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 el 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

Este tutorial seguiremos trabajando con el bucket de almacenamiento que se creó en el taller "Funciones y storage" de gcp. En este se debió crear un servicio de almacenamiento con un nombre elegido por el estudiante. En caso de no haber completado este taller, le recomendamos por favor realizarlo.

Dentro del repositorio, abra la terminal y diríjase a la carpeta de la función procesar-creacion-heroe.

user@192 ~ % cd procesar-creacion-heroe

Una vez allí, vamos a realizar la publicación de la función. Para ello debemos ejecutar el siguiente comando, ajustando el nombre del bucket sobre el que se ejecutará el evento:

user@192 ~ % gcloud functions deploy funcion-bienvenida-heroe-crear --entry-point load --runtime python39 --trigger-resource <nombre_bucket> --trigger-event google.storage.object.finalize --memory 128M --region us-central1 --timeout 60 --min-instances 0 --max-instances 1

La mayoría de los parámetros de configuración se mostraron en el tutorial "Despliegue de funciones como servicio". Sin embargo, ahora tenemos dos parámetro diferentes a los ilustrados en aquel tutorial. A diferencia del anterior, en donde el trigger era una solicitud http, en este caso note que se utiliza como trigger un evento asociado a un recurso. A continuación se explican los nuevos parámetros.

Parámetro

Utilidad

--trigger-resource

Nos permite definir el recurso sobre el que se realiza la observación para ejecutar a la función. Este comando debe ir asociado con el parámetro --trigger-event

--trigger-event

Esto permite establecer el tipo de evento que estaremos monitoreando y que cuando se ejecute activará la función. Si desea ver una lista de posibles eventos, puede ejecutar el siguiente comando:

gcloud functions event-types list

Actualmente contamos con cuatro distintos tipos de eventos que se pueden configurar sobre el servicio de Cloud Storage. A continuación se describen estos eventos

  1. Archivar: El evento se dispara ante cambios de control de versiones. Por ejemplo cuando se crea una nueva versión o se elimina un archivo.
  2. Borrar: Como su nombre indica, el evento se dispara ante la eliminación de algún elemento.
  3. Finalizar/Crear: Este evento se dispara cuando se puede crear de manera exitosa la escritura de un nuevo elemento.
  4. Actualizar Metadatos: Como su nombre indica, el evento se ejecuta cuando ocurre alguna modificación de los metadatos del objeto.

En nuestro caso configuraremos el evento "Finalizar/Crear". De esta manera la función se activará solo cuando reconozca un nuevo archivo en el bucket.

Luego de ejecutar un llamado de prueba a la función function-heroes-storage-crear que creó en el tutorial de Funciones y Storage, se creará un nuevo héroe que a su vez genera un archivo que desencadenará el llamado a nuestra nueva función.

Posteriormente a esto, nos dirigimos a la opción "Cloud Function" en el menú de navegación y en la lista de funciones disponibles seleccionamos la función que hemos creado previamente. Luego la seleccionamos para entrar al panel de administración.

Una vez nos encontremos en el panel de administración, nos dirigimos a la sección "REGISTROS". Entre los registros debemos poder ver el listado de los llamados a la función y registros informativos generados. En este caso deberemos ver un conjunto de registros con la información del archivo que hemos cargado y los registros generados por la ejecución de la nueva función.

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

[1] Google. (s. f.). What is Cloud Storage? | Google Cloud. Google Cloud. https://cloud.google.com/storage/docs/introduction

[2] ​​Cloud Storage Tutorial | Cloud Functions Documentation | Google Cloud. (s. f.). Google Cloud. https://cloud.google.com/functions/docs/tutorials/storage#object_metadata_update