1 of 22

Google Cloud Functions

con

Zig Mandel

Google Developer Expert

linkedin.com/in/zigmandel

2 of 22

Que es un Cloud function?

  • Similar a AWS Lambda y Azure Functions
  • Sin necesidad de servidores asignados o entornos de ejecución
  • Auto Scaling
  • Integrado a eventos de Google Cloud
  • JavaScript con node.js

3 of 22

Casos de uso típicos

  • Responder peticiones HTTP(S).
  • Recibir eventos “push” de múltiples fuentes de Google Cloud
  • Integrarse (por un webhook) a otros servicios dentro o fuera de Google.
  • Combinarlo con Firebase hosting para una web app completa (full stack).
  • Scripts que para administrar infraestructura, que normalmente lo harías con gsutil y un script en una instancia unix.

4 of 22

Eventos Push - “Triggers”

Cloud Functions nativamente soporta recibir eventos de varios servicios de Google Cloud:

  • Realtime Firebase DB triggers: cuando hay actividad en nodos de la bd
  • Authentication triggers: cuando hay eventos de login con Firebase en tu app
  • Analytics triggers: Realtime triggers de eventos de Firebase Analytics
  • Cloud Storage triggers: cuando hay actividad en Cloud Storage (archivo subido, etc)
  • Cloud Pub/Sub triggers: cuando un topic tiene un nuevo mensaje

5 of 22

Auto Scaling - comparaciones

Google ofrece otros servicios para correr codigo “sin servidores”.

Cloud Functions ofrece 5 potencias de CPU (200MHz a 2.4 GHz) y RAM (128MB a 2048MB). App engine es más flexible respecto a posibles configuraciones, tipos de instancias, warmup, cache.

Cloud Function: máximo de 400 llamadas concurrentes por función.

App engine: 80 llamadas concurrentes por instancia, en hasta 20 instancias (en flexible environment) dando un total de 1600 llamadas concurrentes por proyecto (pero con instancias de muy baja potencia). node.js soportado pero solo en el “flexible environment”.

Container Engine: máximo de 2000 nodes por cluster.

Compute Engine: ?

Apps Script: Tiene límites bajos de uso, pero es muy facil de utilizar, en especial para llamar a APIs de Google.

6 of 22

Auto Scaling - más comparaciones

Cloud functions tiene límites por función, mientras que en Appengine es por instancia.

Es importante pues en App engine por defecto tienes 8 hilos compartiendo recursos como RAM de la instancia. Para poder llegar a los 1600 concurrent requests habría que subir “max_concurrent_requests” de 8 a 80, lo cual limita bastante el RAM de cada hilo.

7 of 22

Uso Firebase o Google Cloud console?

Esto es confuso pues Google tiene dos sitios completamente separados para usar Cloud Functions, cada uno con su documentación.

Ambos finalmente corren igual y el código se escribe igual (node.js), pero tienen diferentes herramientas para deploy.

Una vez deployada un cloud function por un método no es posible usar el otro método en el mismo proyecto.

Desde Firebase tienes más funcionalidad como acceso a la BD de Firebase, herramientas especiales de deploy, y custom domains (sino es cloudfunctions.net).

Desde Google Console tienes integración con Source Control pudiendo asi trabajar 100% cloud.

8 of 22

Documentación

Google Cloud Functions:

https://cloud.google.com/functions/docs/

Firebase Cloud Functions:

https://firebase.google.com/docs/functions/

9 of 22

Tiempos de respuesta

  • Cloud function: 9 minutos
  • App Engine standard frontend instance: 1 minuto
  • Apps script backend: 5 minutos
  • AWS Lambda: 5 minutos
  • Azure Functions: 5 minutos

10 of 22

Functions en otras nubes

  • AWS Lambda existe mucho antes que Google Cloud Functions
  • Google Cloud Functions aun esta en Beta
  • AWS Lambda soporta además Java Python, C#
  • Azure Functions soporta además C#

11 of 22

Custom Domains

  • Con Firebase Hosting es posible rutear a un cloud function.
  • Útil por ejemplo si tienes un app frontend en firebase hosting y el backend en cloud functions, manteniéndolo bajo same-origin.
  • Recientemente App Engine ya permite custom domains con SSL sin necesidad de amarrarlo a GSuite.

12 of 22

Environment

https://firebase.google.com/docs/functions/config-env

Permite guardar variables de configuración de forma segura y ordenada en vez de tenerlas directamente en el código.

13 of 22

Logging

Los logs del código como console.log(“hola”) automáticamente van a Cloud Logging y se integran con StackDriver logs y alertas.

Muy práctico para configurar el envío de correo al admin cuando algún cloud function tenga un log con nivel de Warning o más, o como un log histórico de la aplicación para análisis futuro.

14 of 22

Reporte de errores

Permite capturar en Stackdriver errores de aplicación

Por ejemplo un excepcion: throw new Error(“goodbye world”);

15 of 22

Vista de métricas

Tiene estadisticas basicas de uso de recursos (no tanto como App Engine)

16 of 22

Emulador local

https://firebase.google.com/docs/functions/local-emulator

Permite emular tus funciones y/o hosting para pruebas rápidas.

17 of 22

Unit Testing

https://firebase.google.com/docs/functions/unit-testing

Alli encontraras tutoriales para cada tipo de prueba como:

  • Llamar localmente a una función HTTP(S)
  • Falsear escrituras a la Base de Datos
  • Falsear Triggers

18 of 22

Dependencias

https://firebase.google.com/docs/functions/handle-dependencies

Se usa la funcionalidad nativa de node.js con npm, en un archivo package.json

19 of 22

Ejemplos Github

20 of 22

Casos de Uso

21 of 22

Demo

Consola Firebase: https://console.firebase.google.com/

addMessage makeUppercase demo

22 of 22

Gracias!

Zig Mandel

Google Developer Expert

linkedin.com/in/zigmandel