Aspectos básicos de la implementación de la plataforma

Completado

La ingeniería de plataformas es un enfoque multidisciplinar que combina la ingeniería de software, el diseño del sistema y la excelencia operativa para crear una infraestructura confiable y escalable para crear e implementar aplicaciones. En su núcleo, implica no solo crear plataformas sólidas, sino crear un entorno de autoservicio que potencie a los equipos de desarrollo al tiempo que garantiza la alineación con los objetivos empresariales. Una iniciativa de ingeniería de plataforma exitosa comienza con el equipo adecuado y una clara comprensión del espacio de problemas. Esta base permite el desarrollo de sistemas que simplifican las operaciones, reducen la fricción y permiten a los desarrolladores centrarse en la creación de aplicaciones en lugar de administrar la infraestructura.

Una vez implementado el equipo, el enfoque se desplaza a la automatización de áreas de mayor esfuerzo, identificando tareas manuales y repetitivas que se pueden automatizar para ahorrar tiempo y reducir los errores. Después de esto, es esencial un inventario de los recursos existentes, lo que permite a los equipos centralizar herramientas y servicios, lo que facilita la administración y la escala. El siguiente paso se conoce como caminos asfaltados brillantes, lo que implica la creación de flujos de trabajo y entornos estándar que garantizan la coherencia entre proyectos. Después, la implementación de entornos como servicio ayuda a simplificar aún más los procesos, lo que permite a los equipos poner en marcha rápidamente entornos a petición. En ese momento, el objetivo principal se convierte en la optimización de experiencias de desarrollo de autoservicio, lo que permite a los desarrolladores administrar sus flujos de trabajo de forma independiente, a la vez que garantizan que tienen las herramientas y el soporte necesario para el éxito. Este enfoque transforma la forma en que los equipos de desarrollo interactúan con la infraestructura, creando un entorno ágil y de alto rendimiento para crear y entregar aplicaciones.

Diagrama que muestra los trabajos de ingeniería de plataforma que se van a realizar.

Además de tener un plan de implementación claramente definido, en lugar de abordar la ingeniería de plataformas como un único concepto amplio, puede resultar útil dividirlo en cuatro áreas principales para facilitar el proceso de implementación:

  • Los sistemas de ingeniería, que incluye las herramientas y servicios que permiten el desarrollo, como CI/CD, administración de paquetes, entornos de programación basados en la nube, análisis de código y linters, así como asistentes de inteligencia artificial (AI), como GitHub Copilot.
  • La Plataforma de aplicaciones, que consta de una selección de servicios usados como bloques de creación de pilas de aplicaciones usadas habitualmente (por ejemplo, Azure Policy, Azure Key Vault, Azure Container Apps o Cosmos DB).
  • Las plantillas de aplicación, que proporcionan plantillas bien definidas y específicas de la organización para facilitar el aprovisionamiento de cargas de trabajo y alinearse con los procedimientos recomendados.
  • Las funcionalidades de autoservicio de desarrollador, que permiten a los desarrolladores administrar de forma autónoma sus flujos de trabajo, al tiempo que garantizan la gobernanza y el cumplimiento de los estándares de la organización.

La incorporación de estas áreas a la estrategia de implementación reduce el trabajo pesado de los desarrolladores, fomenta la innovación y crea una experiencia de desarrollo sin problemas.

Diagrama que muestra la estrategia de implementación, incluidos los sistemas de ingeniería, la plataforma de aplicaciones, las plantillas de aplicación y las funcionalidades de autoservicio del desarrollador.

Formar un equipo

En una organización de ingeniería de plataformas, fomentar la cultura adecuada es esencial para el éxito a largo plazo. La transición de una referencia cultural reactiva a proactiva es clave, donde los equipos de plataforma tienen la responsabilidad de crear y mantener herramientas para apoyar a la organización. Este cambio es fundamental para reducir los silos de conocimiento y las interrupciones operativas. El éxito de los esfuerzos de ingeniería de plataforma se alinea con la capacidad de inversión descrita en el modelo de funcionalidades de ingeniería de plataformas, lo que hace hincapié en la migración a través de fases de madurez de la organización, de provisional a optimización. En la fase provisional, las empresas reconocen la necesidad de ingeniería de plataformas, pero pueden carecer de alineación completa entre los equipos de liderazgo y desarrollo. A medida que las organizaciones maduran, los cambios de compra ejecutivos y culturales fomentan un entorno más colaborativo e innovador en el que los equipos de plataforma están capacitados para impulsar un cambio significativo, lo que permite a las organizaciones escalar de forma eficaz.

Un equipo de ingeniería de plataforma requiere un conjunto diverso de aptitudes técnicas y una mentalidad centrada en el producto para crear y escalar plataformas de desarrollo internas confiables, eficientes y seguras. Se espera que los ingenieros de plataforma sean expertos en varias áreas clave, incluida la orquestación de contenedores (por ejemplo, Kubernetes), las canalizaciones de CI/CD (por ejemplo, Acciones de GitHub, Azure Pipelines) y herramientas de supervisión (por ejemplo, Azure Monitor, Prometheus, Grafana). La experiencia en herramientas de infraestructura como código (IaC), como Terraform y Bicep, es fundamental para automatizar el aprovisionamiento de infraestructura. Además, los ingenieros de plataforma deben estar cómodos escribiendo código en lenguajes de scripting como Python, PowerShell o Bash para habilitar la automatización y la integración entre sistemas. Aunque el grupo de talentos para ingenieros de plataforma puede ser difícil de aprovechar, un equipo exitoso debe combinar experiencia de diversos antecedentes, como el desarrollo de software, la ingeniería de fiabilidad del sitio (SRE) y las operaciones de TI.

Automatización de las áreas de mayor esfuerzo

La automatización de áreas de mayor esfuerzo normalmente representa el primer paso para facilitar el camino a la habilitación de las funcionalidades de autoservicio para desarrolladores. Para implementarla, empiece por identificar procesos frecuentes, propensos a errores o intensivos en el trabajo, especialmente aquellos vinculados a operaciones manuales o del departamento de servicios. A continuación, evalúe factores como la frecuencia del proceso, la complejidad y la auditabilidad para priorizar los objetivos de automatización. La implementación de la infraestructura como código (IaC) en las canalizaciones de entrega continua (CD) no solo simplifica la implementación de aplicaciones, sino que también permite el aprovisionamiento dinámico de la infraestructura y las herramientas compartidas. Use plataformas flexibles de CI/CD, como Acciones de GitHub y Azure DevOps, o soluciones de GitOps como Flux y Argo CD para reducir los cuellos de botella y capacitar a los equipos.

Con el tiempo, la adopción del patrón "Todo como código" (EaC) crea un marco de automatización seguro y repetible, mediante repositorios de Git centralizados para plantillas y configuraciones de IaC (incluidas, por ejemplo, plantillas de Bicep y Azure Resource Manager, archivos de manifiesto de Terraform y gráficos de Helm). Estos repositorios, administrados por un equipo de operaciones, permiten a los desarrolladores enviar solicitudes de incorporación de cambios que se revisan y auditan de forma segura antes de combinarlas. Las mismas herramientas de CI/CD pueden aprovisionar y configurar cualquier infraestructura, herramientas o servicios, tanto específicos de la aplicación como compartidos. Este enfoque admite la escalabilidad, el autoservicio del desarrollador y la integración perfecta con los procesos de gobernanza, lo que garantiza que la ingeniería de plataformas se alinee con los objetivos de la organización al tiempo que fomenta la agilidad operativa.

El enfoque "Todo como código" gira en torno a la representación de casi cualquier recurso o proceso como un archivo en un repositorio de Git seguro. Las características de seguridad sólidas de Git (como el historial de confirmaciones, los controles de acceso, las solicitudes de incorporación de cambios y las protecciones de rama) garantizan la transparencia, habilitan revisiones colaborativas y aplican comprobaciones automatizadas antes de que se integren los cambios. Junto con los sistemas de CI/CD, esto crea un marco versátil, auditable y seguro para administrar la infraestructura, las herramientas y los procesos.

Inventario y centralización

A medida que las organizaciones crecen, el volumen y la complejidad de sus recursos técnicos se expanden, lo que suele dar lugar a duplicar esfuerzos, proyectos huérfanos y recursos desperdiciados. Centralizar el inventario y el seguimiento de recursos es un paso fundamental en la ingeniería de plataformas para abordar estos desafíos. Un sistema de inventario permite a los equipos realizar un seguimiento y administrar recursos como código, API, contenedores, máquinas virtuales (VM), permisos y mucho más. Este proceso no solo mejora la gobernanza, sino que también promueve la reutilización y mejora la detectabilidad, lo que permite a los equipos operar de forma más eficaz.

Los inventarios centralizados desempeñan un papel fundamental para mejorar la gobernanza mediante el etiquetado y la organización de los recursos. El etiquetado adecuado garantiza que los recursos están asociados a sus respectivos propietarios o equipos, lo que facilita la administración de los ciclos de vida y comprende el posible impacto de los cambios. La detectabilidad mejorada es otra ventaja clave, ya que reduce la expansión técnica al ayudar a los equipos a encontrar y reutilizar los recursos existentes, lo que evita que se haga el doble de esfuerzo innecesariamente. Además, la centralización de inventarios ayuda a las organizaciones a optimizar los recursos mediante la identificación y limpieza de recursos obsoletos o innecesarios, lo que conduce a reducir los residuos y a aumentar el ahorro de costes.

Varias herramientas admiten el inventario y el seguimiento de activos, cada uno de los cuales se centran en diferentes aspectos del ecosistema técnico. Por ejemplo, Azure Deployment Environments (ADE) proporcionan una manera de realizar un seguimiento de la infraestructura compleja creada a través de infraestructura como código (IaC). Del mismo modo, el Centro de API de Azure permite a los desarrolladores detectar y administrar las API de forma eficaz. Los registros de paquetes, como paquetes de GitHub o Azure Artifacts, ofrecen un valor adicional al mejorar la seguridad de la cadena de suministro y administrar paquetes y SDK aprobados.

Para mejorar aún más las ventajas de los sistemas de inventario, las organizaciones pueden establecer vínculos relacionales entre recursos para crear una vista más completa de su ecosistema. Por ejemplo, asignar las relaciones entre una definición de API, su repositorio de código, entornos asociados y directivas de gobernanza permiten a los equipos administrar recursos con mayor precisión.

Establece caminos pavimentados

En la ingeniería de plataformas, la analogía de "camino asfaltado" transmite el equilibrio entre fomentar la innovación y proporcionar orientación estandarizada. Inicialmente, los equipos pueden tomar rutas variadas e informales para lograr sus objetivos, experimentando con diferentes herramientas y flujos de trabajo. Con el tiempo, los equipos de plataforma observan los enfoques más eficaces y ampliamente adoptados y los convierten en "caminos asfaltado": flujos de trabajo optimizados que son eficientes, fáciles de usar y atractivos para que los equipos los adopten.

Este proceso, que a menudo se describe como "caminos asfaltados brillantes", implica identificar patrones comunes en los flujos de trabajo del equipo y transformarlos en soluciones estandarizadas y escalables. Estas rutas de acceso integran sin problemas los requisitos de seguridad, procedimientos recomendados de arquitectura y cumplimiento, lo que ofrece una experiencia fluida y confiable. Los desarrolladores se benefician de una carga cognitiva reducida, API coherentes para la integración, funcionalidades modulares que se pueden combinar según sea necesario y un rendimiento predecible que se alinea con los objetivos operativos.

El modelo de funcionalidades de ingeniería de plataformas desempeña un papel fundamental en este proceso, lo que ayuda a las organizaciones a determinar cuándo pasar de rutas informales a las asfaltadas. Identifica áreas que requieren normalización y proporciona información sobre cómo escalar estas prácticas de forma eficaz. Este enfoque estructurado garantiza que la innovación no se ahogue al tiempo que se mantiene el foco en la calidad, el cumplimiento y el rendimiento.

El enfoque de los caminos asfaltados brillantes fomenta los procedimientos recomendados sin ser excesivamente prescriptivos. Admite contribuciones de la comunidad, lo que permite a los equipos colaborar y dar forma a la plataforma, a la vez que conserva la flexibilidad de los casos de uso únicos. Al equilibrar la innovación y la estandarización, esta metodología fomenta un entorno en el que los equipos pueden destacar, a la vez que garantiza que se cumplan los requisitos de la organización de forma coherente.

Diagrama en el que se muestra el camino asfaltado brillante con CI y CD no admitidos.

Diagrama en el que se muestra el camino asfaltado brillante con CI y CD en desuso.

Implementación de entornos como servicio

La implementación de entornos como servicio está diseñada para habilitar un aprovisionamiento de infraestructura seguro, estandarizado y automatizado. Un principio clave de este enfoque es conservar las identidades y secretos de aprovisionamiento de una manera que impide que los desarrolladores accedan directamente a ellas. Esto aplica la gobernanza a la vez que garantiza que las actualizaciones de infraestructura permanezcan seguras. Por ejemplo, Azure Deployment Environments (ADE) ejemplifica este modelo al admitir la separación de roles y centralizar la administración de plantillas de IaC.

Con ADE, los ingenieros de plataforma y los equipos de operaciones crean y mantienen un catálogo de plantillas para tipos de entorno específicos. Estas plantillas, enriquecidas con opciones preconfiguradas, integran identidades administradas y controlan el acceso en función de los roles. A continuación, los desarrolladores pueden usar canalizaciones de CI/CD para aprovisionar la infraestructura mediante herramientas como la CLI de Azure o la Azure Developer CLI, sin necesidad de acceso directo a credenciales confidenciales o a la suscripción subyacente. Esta separación garantiza el cumplimiento y la seguridad al tiempo que se conserva la productividad del desarrollador.

Diagrama que muestra el flujo de trabajo del ingeniero de plataforma con catálogo del Centro de desarrollo, asignaciones de tipos de entorno, canalizaciones de portal e implementación automatizadas.

Incluso si ADE no está en uso, se pueden aplicar los mismos principios de forma más amplia, con contenido de infraestructura como código (IaC) procedente de ubicaciones seguras, inmutables y administración de secretos automatizadas y aisladas. Al habilitar estas prácticas, la ingeniería de plataformas permite a los equipos implementar entornos coherentes al tiempo que mantiene la gobernanza de la organización y la eficacia operativa.

Optimización de la experiencia de desarrollador de autoservicio

Una experiencia sin problemas para desarrolladores de autoservicio es fundamental para el éxito de la ingeniería de plataformas, pero lograr esto a menudo requiere reunir a los usuarios donde están. Todos los roles (desarrolladores, operaciones y otros) giran en torno a herramientas y entornos específicos que definen sus flujos de trabajo. Para que se adopten las nuevas experiencias, es importante alinearse con estos “centros de gravedad” existentes. Un enfoque pragmático implica planear varias interfaces de usuario adaptadas a las herramientas que ya están en uso, lo que permite a los equipos empezar con mejoras sencillas, demostrar su valor y evolucionar hacia soluciones más sofisticadas a medida que surjan necesidades.

En lugar de crear experiencias completamente nuevas, considere la posibilidad de mejorar e integrar las herramientas existentes. Las plataformas como los editores, los entornos de desarrollo integrado (IDE), los conjuntos de DevOps, las herramientas de la CLI y los entornos de poco código suelen tener modelos de extensibilidad que permiten la personalización y la expansión con una sobrecarga mínima. Este enfoque reduce el mantenimiento, aplica experiencias de usuario conocidas y acelera la adopción. Por ejemplo, las extensiones de IDE basadas en web, como las compiladas para VS Code o vscode.dev, proporcionan un punto de partida flexible compatible con web que se puede escalar a entornos de desarrollo locales. Del mismo modo, las interfaces de ChatOps en herramientas como Microsoft Teams o Slack ofrecen formas intuitivas de desencadenar flujos de trabajo de automatización e integrarse con plataformas de CI/CD.

Para las organizaciones que necesitan una interfaz centralizada, invertir en un portal para desarrolladores personalizado puede proporcionar ventajas a largo plazo, pero requiere una planeación cuidadosa y recursos. Soluciones como Backstage.io, un kit de herramientas desarrollado inicialmente por Spotify, ofrecen portales altamente personalizables que pueden integrar complementos y herramientas de terceros, creando un centro dinámico centrado en el desarrollador. Tanto si empieza con soluciones ligeras como Power Pages o crea un portal completo, el objetivo es ofrecer experiencias escalables y fáciles de usar que permitan a los desarrolladores alinearse con las necesidades de la organización.