Mi camino hacia la certificación de Google Cloud Architect

Debido al gran auge que está teniendo el universo cloud, y para poder desempeñar de una manera más óptima mi trabajo en Paradigma Digital, los últimos meses he invertido mi tiempo en la plataforma de Google, Google Cloud Platform (GCP), y he conseguido certificarme como Professional Google Cloud Architect, no siendo éste un camino sencillo. Nada sencillo.

Una de las razones por las que este viaje me ha parecido complicado, además de por la dificultad técnica, es porque Google no provee de ningún tipo de temario al que agarrarse durante la preparación, ni tampoco existen exámenes de prueba que sirvan para validar si los conocimientos adquiridos son suficientes o no.

En este sentido, el único material oficial de Google lo podréis encontrar en su propia documentación: el, en mi opinión, demasiado abstracto plan de estudios y el mini-examen de prueba.

Por estos motivos he decidido escribir un post sobre ello, para intentar ayudar a quien persiga este mismo objetivo, contando qué he estudiado exactamente, los recursos que he utilizado, cómo me he organizado, y qué conceptos considero que son claves dominar con vistas a superar el examen.

¡Empecemos!

Fase 1

Tal y como me recomendó mi compañero Álvaro Linares (Chamo), aconsejo que los primeros pasos a dar en el camino a la certificación sean los cursos de las habituales plataformas de formación. Quizá esta sea la fase en la que invertí más tiempo, ya que simplemente el ver los vídeos conlleva un buen número de horas (recomiendo verlos a 1.25x o 1.5x cuando se pueda), y además, el de Coursera tiene bastantes labs interesantes a completar. Los cursos que recomiendo son:

Google Certified Professional – Cloud Architect de Linux Academy:

Se trata de una serie de tres cursos (el enlace es al primero) bastante enfocados a pasar el  examen, con un contenido muy bien explicado en todos ellos:

  • El primer curso es una buena introducción a la plataforma.
  • En el segundo se adentra un poco más de detalle en algunos elementos (no tanto como para que sea suficiente de cara al examen).
  • Y en el tercero se centra en recoger una serie de recomendaciones a nivel general, tanto de diseño de arquitectura como con vista a aprobar el examen. En mi opinión merece bastante la pena.

Architecting with Google Cloud Platform de Coursera:

Se trata de una de las especializaciones de Coursera, compuesta por un total de seis cursos. Aunque pueda dar la impresión que se solapa con el anterior, considero que son bastantes complementarios por la sencilla razón de que esta especialización consigue profundizar en mucha de la temática a cubrir, sin estar especialmente enfocado en el examen, pero con bastante buen criterio a la hora de abordar los contenidos, a mi parecer.

Además, contiene un conjunto de labs que aportan mucho al conocimiento de la plataforma, bajo mi punto de vista, y que recomiendo no saltarse aunque pueda resultar tentador, porque no son necesarios para aprobar la especialización ;-)

Google Cloud Platform Certification – Cloud Architect (GCP) de Udemy

Este es otro curso de las mismas características que los anteriores. Yo no lo hice porque consideré que se solapaba demasiado con los que ya había hecho; así que opté por comprar éste otro de sólo exámenes.

De todas formas, lo incluyo aquí porque considero que es otra opción que puede ser interesante a cubrir.

Fase 2

En esta segunda fase de estudio me centré en profundizar en cada una de las temáticas vistas en los anteriores cursos, pero por mi cuenta y utilizando la documentación de GCP. Para ello, me organicé el trabajo de una manera muy parecida a la que lo hace el curso anterior de Coursera, y fui sacando mis propias conclusiones y material a revisar.

En esta fase invertí menos tiempo que en la fase anterior, aunque también me supuso bastante esfuerzo debido a que a la vez fui agrupando conceptos, construyendo mis propios apuntes, etc.

A continuación he listado las diferentes temáticas en las que trabajé, lo que considero imprescindible dominar con solvencia de cara al examen, y algunos enlaces que considero interesantes:

1. Virtual Networking – Redes

En este apartado es necesario tener claro los diferentes tipos de conexión entre redes (VPN, Interconnect, etc), qué aplicar en cada caso y cómo dar solución a diferentes escenarios de soluciones híbridas.

Además, también es importante realizar alguna práctica interconectando redes mediante VPN y aplicando las dos políticas de routing. Algunos enlaces interesantes en este apartado son:

  • Infraestructura de Google: importante conocer la topología de las redes de Google, los tipos de nodos que tienen y el cometido de cada uno de ellos.
  • Árbol de decisión de interconexión: en este artículo destaco el árbol de decisión a la hora de elegir tipo de conectividad. Muy a tener en cuenta y muy útil para el repaso de última hora.
  • Cloud Interconnect y Cloud VPN: importante conocer las ventajas e implicaciones de estos tipos de conexiones a la hora de diseñar soluciones híbridas: costes, velocidad de conexión, tipo de direccionamiento (público/privado), etc.
  • Direct Peering y Carrier Peering: otro tipo de conectividad con las redes de Google desde los centro empresariales tradicionales, y no exclusivas a solo GCP.
  • CDN Interconnect: muy interesante conocer este componente y saberlo utilizar en los diseños de arquitectura que puedan plantearse.
  • Virtual Private Cloud (VPC): imprescindible tener claro los conceptos acerca de estas redes virtuales: visibilidad y conectividad de sus instancias con otras en el exterior, configuración de rutas y firewalls, tipos de redes, relación con proyectos, organizaciones, regiones y zonas, etc.
  • VPC Peering: interesante conocer las posibilidades de interconexión de los tipos de redes anteriores.
  • Firewalls: imprescindible tener dominio de este componente. Muchas preguntas y soluciones implican estar familiarizado con la configuración y posible problemática de estos elementos.

2. Compute Engine – Máquinas virtuales

Las máquinas virtuales son la base de todos los servicios de GCP. Por esto que es imprescindible dominarlas, conocer sus características, qué se puede realizar con ellas, (como por ejemplo qué cambios admiten en caliente o paradas), o los tipos de facturación y descuentos existentes.

Ahí van algunos enlaces interesantes para complementar los conceptos anteriores:

  • Compute Engine: página de documentación de entrada y resumen de sus principales características.
  • Preemptible instances: tipo de máquina virtual más económica que la habitual, y que puede ser muy útil en los diseños de arquitectura donde proceda, como aquellos con carga de trabajos batch, por ejemplo. Importante conocerlas y dominar sus ventajas y limitaciones.
  • Troubleshooting SSH: artículo interesante a la hora de abordar preguntas relacionadas con conectividades SSH.

3. IAM

Ni qué decir tiene que dominar los conceptos de seguridad es básico a la hora de poder superar el examen.

Conocer la diferencias entre los principales roles, cómo se puede realizar la gestión de los usuarios de la plataforma, o cómo securizar las distintas soluciones a implementar, son conceptos clave dentro de este apartado. Ahí va el listado:

  • IAM: página de entrada a la documentación sobre seguridad en GCP. Es clave conocer los diferentes actores que participan y los conceptos generales que se comentan aquí.
  • Listado general de roles: no hace falta memorizarlos, ni mucho menos; pero es conveniente echarle una ojeada para entender cómo se suelen estructurar.
  • Roles de facturación: especial énfasis en los roles relacionados con conceptos de facturación, ya que suelen intervenir en muchos de los casos de uso que estuve viendo en mi preparación.
  • Service Account: es fundamental conocer este tipo de actor en GCP, sus características y qué debemos tener en cuenta para su securización. Importante también realizar algún lab en el que intervenga este tipo de cuenta.
  • Security Scanner: considero que sólo es necesario conocer de qué se trata este producto, sin entrar en mucho más detalle.
  • Auditoría: es un plus conocer los distintos tipos de logs de auditoría que existen en GCP, así como sus periodos de retención en el sistema.
  • Cloud Identity Aware Proxy (IAP): al igual que otros productos, considero que basta con conocer este producto a grandes rasgos, y saber cuándo podría aplicar en las soluciones a diseñar. Poco más.
  • Google Cloud Directory Sync: especialmente importante en muchas de las arquitecturas híbridas que he consultado para la gestión y sincronización de usuarios entre los entornos on premise y cloud.
  • Autenticación: interesante el apartado de API Key, no abordado en otros artículos de la documentación.

4. Storage – Almacenamiento

Sin duda una de las temáticas más recurrentes en el examen y que intervienen en multitud de preguntas. Además de tener claro a nivel técnico cada una de las opciones de almacenamiento que tenemos disponible en la plataforma, es muy importante saber cuándo utilizarlas desde un punto de vista funcional, según el caso de uso planteado.

Además, también es interesante dominar cómo mapear las diferentes opciones actuales de almacenamiento con su análogo cloud,y nociones básicas de cómo adaptar nuestro modelo de datos a la solución de almacenamiento seleccionada.

  • Opciones de almacenamiento: muy buen artículo de documentación a revisar, tanto por su árbol de decisión como por la tabla de posibles opciones de almacenamiento y sus  casos de uso. Es imprescindible tener en la cabeza lo que se plantea en esta entrada.
  • Clases de Cloud Storage: un clásico en las preguntas relacionadas con la opciones de almacenamiento. Buena tabla resumen y descripciones muy claras.
  • Analogía con sistemas actuales: como he comentado antes, es muy importante tener en cuenta el posible mapeo de los sistemas persistentes actuales con las opciones de almacenamiento cloud. Este aspecto aplica a todos los diseños de arquitectura donde está implícito un plan de migración de los sistemas on premise hacia arquitecturas cloud.
  • Transfer service: al igual que algún servicio anterior, este producto es importante conocerlo, saber sus limitaciones y posibles casos de uso, pero sin profundizar en su detalle. Es importante saber distinguir cuando deberíamos utilizarlo en planteamientos de arquitectura que impliquen migración de datos hacia el cloud de Google.
  • Datastore: una de las opciones NoSQL de GCP. Fundamental conocer sus características y casos de uso.
  • Cloud SQL: servicio de PostgreSQL y MySQL en GCP. Al igual que el caso anterior, es muy útil conocer sus características y casos de uso.
  • Spanner: opción de almacenamiento relacional con escalado horizontal global. Aunque no es una opción demasiado económica, es imprescindible tenerla en cuenta para los casos de uso donde pueda aplicarse frente a las otras opciones de persistencia relacionales.
  • Big TableDiseño de TimeSeries: opción dentro de la categoría NoSQL, aunque, en este caso esté más orientada a soluciones basadas en clave-valor, de baja latencia y gran cantidad de datos de almacenamiento. Especialmente interesante saber cómo hacer el modelado de datos (vertical vs horizontal) en uno de sus casos de uso más típico: la persistencia de eventos temporales (time series).
  • Big Query: data warehouse y herramienta de análisis masivo de datos mediante sintaxis SQL de la plataforma. Imprescindible tenerlo en cuenta como capa de almacenamiento para muchos diseños de arquitectura que me he encontrado en la documentación.

5. Monitorización

Otro de los puntos clave de GCP. Es bastante importante dominar los distintos productos involucrados en este aspecto, concretamente:

  • Las diferencias entre cada uno de ellos.
  • En qué caso debemos utilizar uno u otro.
  • Cómo los diferentes elementos de la plataforma se integran con estos productos.
  • Lenguajes soportados. No hace falta memorizarlos, solo que nos suene familiar. Además, este aspecto es algo que creo que evoluciona con bastante periodicidad.
  • Nociones básicas de funcionamiento y configuración.

Estos son los enlaces a cada uno de los productos relacionados con la monitorización:

6. Balanceo y autoescalado

En este apartado es importante conocer los balanceadores disponibles en la plataforma, así como estar familiarizados con las políticas de autoescalado y cómo éstas son calculadas para crecer o decrecer el número de instancias.

  • Balanceo y autoescalado: punto de entrada a la documentación sobre balanceadores, autoescalado y grupo de instancias. Como he comentado antes, considero que este punto es de vital importancia complementarlo con un conjunto labs que nos permita ver estos componentes en marcha, para poder entender bien cómo funcionan las políticas de autoescalado, los diferentes tipos de balanceadores existentes, etc.

7. Recursos, Deployment Manager y Automatización

Aquí he agrupado todo lo que tiene que ver con los distintos recursos de la plataforma y la automatización de su gestión.

De este modo en este apartado destacaría que es importante distinguir qué recursos tenemos disponibles en la plataforma, cuáles de ellos son globales/regionales/zonales, y cómo podemos automatizar los despliegues en la plataforma vía plantillas (Jinja2/Python) y archivos de configuración (yaml).

Los enlaces a destacar en cuanto a los recursos son:  

Y la documentación relacionada con la automatización de los despliegues (Deployment Manager) es:

8. Managed Services – Servicios gestionados

Por último, en este apartado he incluido todos aquellos servicios gestionados que nos ofrece la plataforma y que están construidos sobre los pilares vistos en las otras secciones: App Engine, Container Engine, Functions, Pub/Sub, etc.

En líneas generales, para poder pasar el examen se puede decir que no es necesario conocer en profundidad ninguno de estos componentes, pero sí es esencial saber trabajar con ellos a un nivel básico, y, sobre todo, saber aplicarlos en los diseños de arquitectura que puedan plantearse.

A continuación los enlaces que me parecieron más interesantes revisar a la hora de cubrir estos aspectos:

  • Tabla usos soluciones Compute: buena tabla de repaso a la hora de seleccionar una de las tres opciones de computación, con las características de cada uno y sus casos de uso más habituales.
  • Árbol decisión soluciones Compute: al hilo del anterior enlace, árbol de decisión para elegir la opción de computación adecuada en cada caso. Uno de mis imprescindibles en los repasos.
  • Google Container Engine: punto de entrada a la documentación de Kubernetes en GCP.
  • Google Container Engine: Node Pools: de la documentación anterior, considero especialmente importante dominar los conceptos relacionados (configuración, características, etc) con los pools de nodos (node pools) asociados.  
  • App Engine: Standard, App Engine: Flexible y App Engine: Standard vs Flexible: Fundamental conocer este servicio en profundidad, así como las diferencias entre sus dos modalidades (por ejemplo: preferencia por la modalidad standard si no tenemos carga regular de trabajo y/o necesitamos escalado a 0 de nuestra aplicación), los posibles casos de uso que pueden aplicarse y los métodos de facturación de cada uno de ellos.
  • Task Queues: opción muy recurrente en los diseños basados en App Engine. Posible alternativa a los pub/sub en estos diseños para coordinar “microservicios”.
  • Prevención ataques Ddos: muy interesante este artículo de buenas prácticas a la hora de prevenir nuestras arquitecturas cloud contra estos tipos de ataques.
  • Cloud Endpoints: capa ligera de API Management de la plataforma. Basta con conocer de su existencia y sus características básicas. Pasa lo mismo con su ‘hermano mayor’ en el mundo del API Management: apigee.
  • Pub/Sub: producto recurrente en todas las soluciones donde haya asincronía y tratamiento masivo de eventos.
  • Dataproc: servicio gestionado de Hadoop en la nube. Considero que sólo es necesario conocer de su existencia, sus posibles casos de uso y poco más.
  • Dataflow: parecido a lo anterior, conocerlo y poco más. Producto ETL para trabajos en streaming y batch de la plataforma GCP.

Fase 3

En este último apartado he recopilado lo que considero que es importante estudiar en la recta final antes del examen. Esta fase fue la que menos tiempo me llevó y en la que estuve centrado en mis dos últimas semanas de preparación, aproximadamente. A destacar:

Soluciones de arquitectura

La documentación de Google es bastante extensa, y bastante buena. Y una de las cosas que encontré de especial utilidad es la parte de ella que habla de soluciones ya implementadas mediante Google Cloud Platform en distintos sectores de negocio.

Además, da la excelente casualidad que algunos de estos casos de negocio coinciden en su naturaleza con los propuestos para el examen, por los que los considero de doble utilidad.

Este es el listado de soluciones de arquitectura que, en mi opinión, merece más la pena revisar, aunque recomiendo revisar el máximo número de soluciones posible:

Prácticas

Por supuesto, toda experiencia real trabajando con la plataforma es muy útil, o en su defecto, todo que se pueda practicar mediante los labs disponibles:

  • Codelabs: conjunto de tutoriales con los que coger experiencia práctica con la plataforma.
  • Qwiklabs: en el caso de haber realizado la especialización de Coursera, aquí se puede encontrar el conjunto de labs incluidos en los distintos cursos. Especialmente interesantes, bajo mi opinión, los relacionados con la manipulación de cloud storage, y los relacionados con  balanceadores (Network/HTTP) y un/managed instances groups.

Documentación de repaso final

También hacer hincapié en que, de cara al examen, considero muy importante repasar todo el contenido estudiado, como es lógico. Sobre todo si tenemos en cuenta que la materia es bastante extensa (como se ha podido comprobar en secciones anteriores).

Personalmente, y aunque esto puede variar dependiendo de las capacidades o el expertise de cada uno, yo encontré bastante útil la siguiente documentación como material de repaso ‘de último minuto:

  • Slides del la especialización de Coursera.
  • Exámenes de prueba de Google Cloud Architect y Google Cloud Engineer.
  • Soluciones de arquitectura propuestas por Google (sección anterior).
  • Slides del tercer (y último) curso de Linux Academy.
  • Mis propios apuntes que me fui construyendo a medida de que estudiaba.

Y, por supuesto:

¿Cómo es el examen?

El examen consta de 50 preguntas tipo tests, algunas con respuesta única y otras de multirespuesta (te indican el número de respuestas válidas en todo caso).  Te conceden dos horas para hacerlo, tiempo que considero más que suficiente. Es más, creo que el tiempo para hacer el examen es el menor de los problemas para superarlo.

En cuanto a la tipología de las preguntas, al menos en mi caso, no se parecieron demasiado a los otros exámenes que hice en los distintos cursos que comentaba anteriormente, ni los que hice de Coursera y Linux Academy, ni los de Udemy (éste), aunque considero que son muy útiles en el proceso de formación.

Recuerdo que me encontré con todo tipo de preguntas: de código de bastante bajo nivel, de conocimiento concreto de algunas tecnologías de la plataforma, de diseño de arquitectura de bastante alto nivel, etc.

Además, tal y como te comentan en propia documentación, muchas de las preguntas (no sé decir exactamente cuántas, pero fueron un número importante) están basadas en los casos de estudio que plantean, así que, aunque permiten ver los casos prácticos durante el examen, es importante llevarlos bien preparados y con una solución prediseñada en la cabeza el día del examen.

Por lo demás, es como otro examen de certificación, con la salvedad de que no se puede realizar desde casa (a diferencia de otros como MongoDB o Spring Enterprise), sólo desde alguno de sus centros homologados, y que no se sabe cuantas preguntas respondidas correctamente se necesitan para superarlo (yo al menos lo desconozco).

¿Realmente merece la pena?

Aunque pueda parecer mucho trabajo, puedo decir que realmente merece la pena por todo lo que he aprendido. Además, hay que tener en cuenta que las arquitecturas cloud están cada vez más de moda. Esto no es ningún secreto. Y lo están por razones como las siguientes:

  • Capacidad de cambiar los gastos iniciales de inversión en nuestros sistemas por gastos operacionales (Operational expenses vs Capital expenses). Es decir, aplicar la filosofía del pay as you go al mundo del software.
  • Poder centrar nuestros esfuerzos en el desarrollo de nuestro negocio, que es lo que realmente nos genera beneficios, y no en la implantación y mantenimiento de toda la infraestructura que lo rodea.
  • Escalabilidad de 0 hasta virtualmente el infinito de nuestros sistemas, dependiendo de las necesidades en cada momento.
  • Presencia regional o global, dependiendo de la naturaleza de nuestros usuarios.
  • Poder delegar la gestión de la seguridad de nuestros sistemas en la plataforma y sus ingenieros, en lugar de tener que invertir en securizar nuestros entornos con nuestros propios medios.
  • En definitiva, y como consecuencia de todo lo anterior, mejora el time to market y costes de nuestros productos. Además, seremos más flexibles, por lo que nos podremos adaptar más rápidamente a los nuevos cambios y necesidades que nos puedan ir surgiendo con el paso del tiempo.

Conclusiones

Por último, me gustaría decir también que, en cualquier caso, esto no es una guía de cómo sacarse la certificación, aunque lo pueda parecer en un primer momento, ni garantiza absolutamente nada en ningún sentido, sino que sólo describe lo que me ha funcionado a mí, personalmente, en el camino hacia la certificación: cómo me he organizado y cómo me he preparado, nada más.

Además, y aquí hago un poco de spoiler, en el examen se cubren algunos conceptos que no son exclusivos de la plataforma, y que no se cubren de manera explícita en la documentación de Google (que yo sepa), como pueden ser conceptos de ALM, cuestiones de diseños de arquitectura de alto nivel, o buenas prácticas, por ejemplo.

Es por esto que considero que, además de estudiar y practicar todo lo que sea posible, obviamente, si se cuenta con experiencia como Arquitecto y/o Devops en otros proyectos, mejor que mejor.

Espero que este artículo resulte de utilidad y ayude a conseguir la certificación a todo aquel que se lo proponga, así, que, por último, sólo decir a estos valientes:

¡Ánimo y mucha suerte!

Ingeniero Informático con más de diez años de experiencia en el sector del desarrollo de software. Actualmente trabajo como Arquitecto Técnico dentro del departamento de Arquitectura de Paradigma Digital, ayudando en la elaboración del diseño técnico de los proyectos y el I+D. Mis principales intereses profesionales son aquellos relacionados con la calidad del software, desarrollo e investigación de nuevas tecnologías.

Ver toda la actividad de Jesús Medinilla