Platzi
Platzi

Suscríbete a Expert y aprende de tecnología al mejor precio anual.

Antes:$249
$209
Currency
Antes:$249
Ahorras:$40
COMIENZA AHORA
0

Google Cloud Functions - Serverless

<h1>Google Cloud Functions - Serverless</h1>

Opciones de cómputo en Google Cloud Platform.

IaaS - Infraestructura como servicios. Ejemplificadas con las máquinas virtuales. Nos da más flexibilidad y una mayor carga administrativa.

Carga administrativa: sistema operativo, actualizaciones, balancear las cargas, control de usuarios, recursos.

Flexibilidad: instalaciones, versiones, qué quiero actualizar. Tengo una flexibilidad absoluta.

Progresivamente encontramos utilidades como los contenedores que disminuyen la carga administrativa, como Kubernetes Engine, luego avanzamos a Cloud Run y App Engine, cada servicio tiene sus ventajas y sus desventajas según la necesidad del negocio.

Al final, encontramos Serverless. Despliego unidades atómicas de código. Google me ayuda a completar las funciones.

What is Serverless?

Es una manera de desplegar y usar servicios de cómputo, mejora la agilidad y productividad, también es un modelo económico. Ahorro de costos, aprovisionamiento adecuado.

Why Serverless?

  • Fácil: reducida carga operativa
  • Ágil: ciclos de desarrollo más rápidos.
  • Económico: reduce costos operativos.
  • Escalabilidad: en función de la demanda.

Cuando se elige una tecnología se deben hacer las preguntas necesarias para validar su propósito en el caso de uso, como satisfacer las necesidades, retos de negocio, retos tecnológicos.

<h3>Functions as a Service</h3>

La expresión más popular de Serverless son funciones. Son un pequeño bloque de código que cumple una tarea específica.

  • Exponer: responder a llamados vía HTTP(S)
  • Integrar a la plataforma: respondiendo a eventos internos.
  • Modelo económico y flexible: pagas por los recursos asignados a tu función por cada ejecución.

Projects - Google Cloud Platform

El proyecto es la unidad general sobre la cual se engloba y se manejan recursos en GCP. Se puede customizar el panel principal, para mostrar los datos que quiera conocer.

<h3>Cloud SDK: Command Line Interface - Installing Google Cloud SDK</h3>

Quickstart for Debian and Ubuntu

<h4>gcloud functions - manage Google Cloud Functions</h4>

gcloud functions deploy - create or update a Google Cloud Function

gcloud functions deploy NAME --runtime RUNTIME 
<h3>Events and Triggers</h3>
  • HTTP
  • Cloud Storage
  • Cloud Pub/Sub
  • Cloud Firestore (evolución natural de Cloud Datastore)
  • Firebase
    • Realtime Database, Storage, Analytics, Auth.
    • Firebase functions: tienen una dependencia a Firebase.
  • Stackdriver
    • Logging vía Pub/Sub (notificaciones que se puedan envía vía Pub/Sub).
<h4>gcloud functions event-types - list types of events that can be a trigger for a Google Cloud Function</h4>
gcloud functions event-types list

Cuando se despliega una función se debe declarar el trigger asociado.

TriggerCommands
HTTP--trigger-http
Pub/Sub--trigger-topic TOPIC_NAME
Others--trigger-event EVENT_TYPE<br />--trigger-resource RESOURCE
gcloud functions event-types list
<h4>Según el runtime, las funciones de segundo plano reciben:</h4>
RuntimeArgs
Python(data, context)
Node.js(data, context, callback)
Go(ctx, event)
<h4>Según el runtime, las funciones HTTP reciben:</h4>
RuntimeArgs
Python(request) Flask
Node.js(request, response) Express
Go(http.ResponseWriter, *http.Request)

Nota: mientras menos atómica sea una función, más tiempo tardará en desplegarse.


Cloud Identity and Access Management (IAM)

Es una colección de funciones y servicios que permite restringir y monitorizar los accesos dentro de la plataforma.

  • Mecanismo para:
    • Determinar quién hace qué en los recursos de la plataforma.
    • Gestionar roles de cuentas de Google.
  • Existen diferentes roles:
    • Primitivos
      • Owner, Editor, Viewer
    • Predefinidos
      • Acciones acotadas a recursos y tareas específicas
    • Personalizadas
      • Combinación de recursos predefinidos
<h3>Understanding service accounts</h3>

Algunas veces, hay tareas que se ejecutan por GCP, ante la respuesta de un evento. Un servicio ejecutando, en ese caso, existe otro recurso en el contexto de IAM, llamadas cuentas de servicio.

  • Cuenta para autenticación
    • No vinculada a cuentas personales
    • Pensada para escenarios server-to-server
  • Roles gestionados vía IAM
    • Principio del mínimo privilegio
  • Generación de claves para consume de servicios
    • Puede tener múltiples claves
    • Claves independientes

La cuenta de servicio predeterminada tiene permisos bastante amplios. La función puede ser editada, permitiendo modificar la cuenta de servicio.

IAM - Service accounts (aquí puedo crear o modificar mis cuentas de servicio). Así se puede limitar y controlar el funcionamiento de las funciones usando IAM and Service account. Una función debe tener los mínimos permisos necesarios.


Scalability

Es uno de los elementos que se promueven en los servicios de nube. Google Cloud Platform nos dice que sus servicios son escalable, son elásticos.

  • Google es quién se encarga de la escalabilidad, aumentando el número de instancias según la demanda de nuestras funciones.

  • Una función no puede atender más de una petición concurrentemente, así que levanta una instancia más.

    Las instancias de las funciones solamente pueden atender una solicitud, no tienen una concurrencia. Una vez se termina de responder a una solicitud, esa instancia queda lista para seguir recibiendo peticiones, si después de un tiempo determinado una solicitud, no encuentra quién la pueda atender, se marca el timeout.

    • Se puede configurar el tiempo máximo de respuesta.

    Si una instancia no está recibiendo peticiones en un periodo determinado, Google destruirá esa instancia.

Se pueden aplicar distintas variantes de escalabilidad a una función.

<h3>Horizontal Scalability</h3>

Se habla de escalamiento horizontal cuando se generan replicas de las misma unidades.

<h3>Vertical Scalability</h3>

Al contrario del escalamiento horizontal, se generan instancias con más recursos. Un ajuste en las funciones, sería aumentar la memoria RAM según la necesidad de velocidad del proceso ejecutado.

Nota: todas las funciones cada vez que se ejecutan generan logs.


Supervision

Cuando hablamos de supervisión, nos referimos a las métricas, valores o alertas. Información de lo que está ocurriendo en la plataforma. Confiabilidad - Desempeño. Por ejemplo, los valores visualizados en los logs llevan al discernimiento de aumentar la capacidad de nuestros servicios.

“Aquello que no se mide no se puede mejorar”

<h3>Site Reliability Engineering</h3>

SRE es (una manera de trabajar):

  • La implementación de Google para DevOps
  • Orientada a la disponibilidad y confiabilidad de un sistema.
  • Sustentada en cuantificaciones
    • Service Level Indicator (Intern)
    • Service Level Objective (Intern)
    • Service Level Agreement (Extern - User)

Trabajar orientados a productos que necesitan ser confiables, necesitan ser sustentados en SRE.

Ejemplo: un indicador de número de respuestas exitosas al usuario.

La supervisión es el pilar de la confiabilidad de un producto.

Tenemos que tener la capacidad de respuesta a los incidentes. Necesitamos estudiar: ¿Qué pasó? ¿Cómo pasó? Aplicar mecanismos para que no se vuelva a presentar.

<h3>Stackdriver</h3>

Es una colección de servicios.

  • Logging: registra actividad predefinida y personalizada.
  • Metrics: reporta métricas predefinidas y personalizadas.
  • Tracing: registra y reporta latencia de las peticiones.
  • Debugging: depuración, en vivo, de las aplicaciones.
  • Profiling: análisis de desempeño de servicios.
  • Error reporting: reporte concentrado de errores.

Cloud locations

¿Cómo puede establecerse la comunicación entre múltiples servicios de GCP? Usando los servicios de red o comunicación.

  • Herramientas para Firewall.

  • Herramientas para balancear las cargas.

  • Herramientas para rechazar o aceptar cierto tráfico según la fuente.

  • DNS.

  • CDN.

  • Utilerías para reservar las IP.

  • Herramientas para establecer canales (VPN), tuneles para interconexión.

Importa por dónde está viajando la información. Google tiene su propia red privada, e intentará todo lo posible por mantener la información en su propia red.

<h3>Conectores VPC</h3>

Un servicio para conectar sus funciones a una VPC.

  • Accede vía IP privadas a los recursos.
  • La comunicación es unidireccional, de la función hacia la VPC.
  • Un conector puede ser compartido por varias funciones.
<h3>Configuring Serverless VPC Access</h3>

Los servicios de red mejoran la latencia y habilitan la comunicación o visualización de otros recursos dentro de una red privada.


Cloud Run

Se encuentra en la mitad del espectro entre las distintas funciones de cómputo, porque facilita cierta flexibilidad y ofrece características de Serverless.

<h3>Containers</h3>

Una forma de desplegar aplicaciones.

  • Basada en el aislamiento de recursos.
  • Ofreciendo consistencia y portabilidad.
  • Basado en especificaciones y configuraciones.
  • Encapsulando y generando artefactos desplegables.

Los contenedores son resultado de agrupar y utilizar distintas opciones. Por ejemplo, los contenedores en Linux son el resultado de la combinación de estos recursos: processes, namespaces, cgroups, union file systems.

Processes: es un recurso manejado por el sistema operativo que tiene su propia memoria virtual y tiene un esquema de vida efímero, pueden ser creados o destruidos según las reglas.

Namespaces: los processes se combinan con los namespaces para determinar que elementos son visibles, IP, árbol de directorio. Definir mi alcance y mis recursos.

Cgroups: los cgroups me permite definir recursos como: ¿cuánta CPU, cuánta memoria, capacidades de entrada y salida?

Union file system: mecanismo que permite ir construyendo el contenedor a través de capas donde se definen las capas y se manejan las relaciones con sus bibliotecas.

Un contenedor es una unidad más portable entre entornos, es más fácil de desplegar fácilmente.

“Kubernetes (K8s) es una plataforma de código abierto para automatizar la implementación, el escalado y la administración en contenedores.” Una herramienta que permite manejar cargas de trabajo complejas, usando un orquestador como Kubernetes.

Un servicio para manejar los clusters donde se desplegaran las aplicaciones, no crea nodos, administra los nodos aprovisionados.

KubernetesServerless
EscalabilidadNo*
Cold startNo*
FlexibilidadAbundanteEscasa
PortabilidadNo*
Pago por usoNo*

*depende


Knative

“Kubernetes-based platform to build, deploy, and manage modern serverless workloads.” GCP

“Building Blocks that Simplify How You Deploy and Run Functions atop Kubernetes and Istio. On Any Cloud” Knative

Es una herramienta para desplegar y manejar cargas de trabajo basados en Kubernetes. Permite construir bloques de manera simplificada construir aplicaciones. Knative se puede comprender como dos componentes:

Servicing:

  • Mecanismo que atiende y distribuye las peticiones entre los múltiples servicios, y sus revisiones.
  • Usa Istio.
  • Permite que sea funcional, aunque haya escalamiento a cero.

Eventing:

  • Mecanismo que permite consumir y producir eventos según la especificación de Cloud Events.
  • Sigue los principios básicos de Pub/Sub.

Modelo de Pub/Sub con Knative.


Knative es conocido en GCP como Cloud Run. Dentro de la nube existen dos versiones:

<h3>Managed service</h3>
  • Gestionado por Google Cloud
  • Listo para usarse
  • Ellos despliegan y mantienen saludables y activas las instancias.
  • Manejan escalabilidad
  • Actualizaciones provistas por el proveedor

Google se encarga de todas las tareas repetitivas.

<h3>Cloud Run for Anthos</h3>
  • Gestionado ‘manualmente’
  • Despliegue y gestión del cluster de Kubernetes
  • Responsabilidad de actualizaciones
  • La escalabilidad recae parcialmente en nosotros
  • Recomendable cuando ya tienes inversiones hechas en Kubernetes

Es otra oferta para soluciones híbridas o multicloud.

<h3>Scalability</h3>
  • Una de las mejores características de Knative/Cloud Run.
  • Puede escalar a cero o puede seguir recibiendo peticiones.
  • Hay escalamiento vertical y horizontal.
<h4>Configuración de mínimos y máximos</h4>
  • Memoria (desde 128[MB] hasta 2[GB])
  • Instancias (desde 0 hasta 1000 cloud run - desde 0* hasta 1000 cloud run for anthos)
  • Peticiones por contenedor (default 80)
  • Timeout de peticiones (default 300[s])

Se puede customizar las revisiones según la necesidad.

<h3>Supervision</h3>
  • Google captura la salida estándar y la refleja en los logs.
  • Podemos usar la Logging API de Google Cloud para hacer nuestros registros personalizados.
<h4>Kubernetes - Supervision</h4>
  • GKE tiene un modo Legacy de supervisión. Procuremos no usarlo.
    • La nueva versión da más información de los objectos un clúster y su estado.
  • Para contenedores en Kubernetes Engine (GKE) tenemos
    • fluent.d para recolectar datos de logs.
    • prometheus exportar datos de métricas.
    • nomenclatura mejor estandarizada
<h4>Supervisamos para propiciar</h4>
  • Disponibilidad, que esté ahí cuando se quiera usar.
  • Desempeño adecuado, aseguramos, oportunamente, los recursos necesarios.
  • Escalabilidad, que se adapte a la demanda.

CI/CD on Google Cloud

  • Continuous Integration: validar que los cambios ‘no rompen’ lo existente, a través de pruebas.
  • Continuous Delivery: construir artefactos con nuevas funcionalidades, se pueden entregar nuevas funcionalidades.
  • Continuous Deployment: ‘disponibilizar’ artefactos con nuevas funcionalidades, herramientas de apoyo para desplegar.

La clave está en “Continuous”, sin un agente humano. Esquemas automáticos, repetibles y auditables. Estos procesos deben ser documentados y automatizados.

<h3>Cloud Build</h3>

Es una herramienta para construcción de artefactos.

  • Capacidades de despliegue.
    • GKE
    • App Engine
    • Compute Engine
    • Cloud Functions
  • Posibilidades de testing
  • Tareas de consistencia, ejecuta pasos repetibles. “Steps” Son una colección de instrucciones.
  • Integraciones y triggers
    • Cloud Source repositories
    • GitHub
    • BitBucket
    • Spinnaker vía Pub/Sub
  • Optimizaciones
    • Caché
    • Local container images
    • Google Network
  • Serverless
<h3>Cloud Source Repositories</h3>

Gestión de repositorios, equivalente a otro gestor de código como GitHub, o GitLab.

  • Repositorios privados de código
  • git
  • Integraciones
    • Cloud Build
    • Debugging
    • Pub/Sub
  • Replicación de repositorios
    • BitBucket
    • GitHub
  • Serverless
<h3>Container Registry</h3>

Equivalente a Docker Hub en Google.

  • Repositorio privado de contenedores, control de accesos
  • Soporte nativo de Docker
  • Análisis de vulnerabilidades, actualizable.
  • Integraciones
    • Cloud Build
    • Pub/Sub
  • Almacenamiento regional
  • Serverless

Personalizaciones e integraciones

Servicios Serverless.

  • Cloud Scheduler, ejecutar con una periodicidad.
  • Cloud Task, ejecuta tareas asíncronas.
  • Firebase/Cloud Functions.
  • Cloud SQL, persistencia de datos administrada. Se pueden desplegar instancias de bases de datos relacionales.

<h5>Pricing</h5>
<h5>Resumen</h5>
  • Serverless
  • Supervision - Scalability
  • Site Reliability Engineering (DevOps)
  • Containers - Knative - Kubernetes (Serverless) Cloud Run

El modelo de negocio determina las herramientas que se deben usar. Trabajo de escritorio, preguntas, ventajas y desventajas, así se decide el Stack.


<h6>References</h6>

Quickstart for Debian and Ubuntu

Escribe tu comentario
+ 2