Instructivo Data Ops
Instructivo Data Ops
Instructivo Data Ops
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
1. GLOSARIO
Término Traducción/Definición
ARM Templates Documentos en formato JSON que definen la infraestructura y la configuración de diversos
recursos en los proyectos.
Azure CLI Interfaz de Línea de Comandos que permite crear y manejar recursos de Azure.
Azure DevOps Herramienta que permite llevar a cabo la gestión del ciclo de vida de desarrollo de aplicaciones.
Azure Pipelines Es un término en inglés que se refiere a una tubería informática, es generada con los pasos de
tareas específicas que se crean como una automatización.
Cloning Generar una copia local de un repositorio.
Data Factory Servicio en la nube de Azure creado para procesos de extracción, transformación y carga (ETL) y
de integración de datos.
DataOps Metodología automatizada utilizada por equipos de analítica para mejorar la calidad y reducir el
tiempo de ciclo de análisis de datos.
Despliegue Continuo (Continuous Delivery por sus siglas en inglés) Vendría a ser el siguiente paso luego de la
(CD) integración continua, consiste en liberar de forma automática una nueva versión del producto
que se está desarrollando.
Forking Desarrollar un proyecto tomando como base una plantilla, proyecto o repositorio ya existente.
Infraestructura como El proceso de utilizar archivos de configuración (código) para la definición y aprovisionamiento de
Código (IaC) la infraestructura, en lugar de realizar la configuración manualmente.
Integración continua (Continuous Integration por sus siglas en inglés) Es una práctica de ingeniería de software con la
(CI) que los desarrolladores pueden combinar los cambios realizados en el código de un proyecto de
manera periódica, en un repositorio central y agregando estándares de calidad y seguridad.
Git Git es un sistema distribuido de control de versiones para código fuente. Mediante esta
herramienta se puede hacer seguimiento a los cambios y realizar una colaboración más
organizada por parte de los desarrolladores.
Nube La tecnología de Nube (Cloud Computing) es un tipo de arquitectura informática que permite
almacenar y acceder a datos y programas a través de Internet en lugar del disco duro de nuestra
computadora. También es conocida como Servicios en la Nube, Nube de Cómputo, Informática
en la Nube o simplemente “La Nube”.
Pipeline Conjunto de procesos automatizados y de tareas que se ejecutan secuencialmente para obtener
un resultado deseado.
Powershell Es una Interfaz de Línea de Comandos (CLI) de Microsoft que permite automatizar tareas y realizar
configuración de recursos.
Seguimiento El seguimiento es un análisis sistemático de todos los procesos en su conjunto con el fin de evaluar
un resultado.
Synapse Es un servicio de Analítica de Azure que permite la integración de diversas fuentes de datos para
realizar consultas de Inteligencia de Negocios.
1
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
2. OBJETIVO
El Objetivo de este documento es presentar el Instructivo para la realización de cualquier proyecto que utilice DataOps.
Se presentarán recomendaciones de buenas prácticas de ingeniería para la realización de estos proyectos, así como un
paso a paso para realizar un nuevo proyecto a partir de una plantilla ya existente.
3. CONDICIONES GENERALES
Para que un proyecto pueda realmente cumplir con las prácticas de DevOps, se deben cumplir algunos estándares que
garanticen la calidad y la estabilidad de todo el proceso de desarrollo y paso a producción. En el caso de los proyectos de
DataOps, se busca que estos cumplan con un modelo de prácticas que permita un despliegue rápido y automatizado
acorde con sus necesidades. Estas prácticas están divididas en 3 fases. Cada una de estas fases será realizada por un
equipo diferente:
• En la primera fase, el equipo de cloud realizará la creación y configuración inicial de los recursos en la nube.
• En la segunda fase, el equipo de DevOps creará el repositorio y el pipeline en Azure DevOps.
• En la tercera fase, el equipo encargado del proyecto ejecutará los pipelines y continuará el desarrollo del proyecto.
2
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
https://dev.azure.com/ecopetrolad/AzureVirtualDatacenter/_git/AzureVirtualDatacenterPS1?path=%2FREADME.md&_
a=preview
A este repositorio sólo tiene acceso el equipo de Plataformas de la operación de la VDI de Ecopetrol.
4. INSTRUCTIVO CLOUD
Para el instructivo de cloud el Pipeline de Despliegue Deploy-AzureProject.CD crea y despliega Grupos de Seguridad,
Grupos de Recursos, Service Principals y Service Connections para los diversos ambientes de Azure.
Las acciones descritas en este numeral las debe ejecutar el equipo de la Plataformas de la Operación de la VDI.
Este paso consiste en la creación de un archivo de tipo JSON en el que se especificarán los detalles de los recursos. Primero,
es necesario clonar el repositorio
https://dev.azure.com/ecopetrolad/AzureVirtualDatacenter/_git/AzureVirtualDatacenterPS1?path=%2F&version=GBma
in
Nota: Si el proyecto es un proyecto de migración, es necesario elegir el alias correctamente para ser el mismo que será
utilizado para el storage account.
3
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Nota: Si es un proyecto de migración, es necesario mover los storage accounts para los nuevos grupos de recursos de los
ambientes de DEV, QA y PROD después de hacer la ejecución del CD pipeline.
5. INSTRUCTIVO DEVOPS
Para comenzar, se definirán primero unas prácticas de Ingeniería que se deben adoptar a la hora de comenzar la
creación de un proyecto de DataOps. Estas prácticas permitirán la correcta organización del proyecto y servirán
como estándar para los equipos que usen DataOps.
El diseño de Flujo de trabajo de GIT que se propone es “Scaled-Trunk Based Development”. Este Flujo de
Trabajo consiste en utilizar una rama fija como el “trunk”. En esta rama estará lo principal del proyecto.
Además, Se utilizan ramas de corta duración - conocidas también como short-lived branches - para el
desarrollo de características y corrección de errores. Estas ramas idealmente deben tener duración de 1 o 2
días máximo. De esta manera, en el “trunk” siempre estará el código que se va desarrollando y se sacan ramas
temporales para ir agregando funcionalidades. Esas ramas cortas después se unen al trunk por medio de
merge. La siguiente figura representa a mayor detalle el proceso:
- Es una forma simple de comunicar el equipo cuales son las tareas que están siendo desarrolladas.
- Es una forma de asegurar que las ramas no se conviertan en ramas de larga duración, porque las tareas
solo van a ser completadas cuando los merges son hechos en la rama main.
- Comunicar la naturaleza de los cambios a los demás integrantes del equipo, el público o cualquier otro
interesado.
- Hacer más fácil a otras personas contribuir al proyecto, permitiendo explorar una historia de los
commits más estructurada.
- Facilitar el proceso de troubleshooting, por hacer con que el proceso de identificación de un commit
(o un conjunto de commits) que introdujo un error sea más simple a través del uso de prefijos que
traen el contexto de los commits.
3. Prefijos:
Se usarán los siguientes prefijos para los diversos commits:
6
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
5.2 Introducción
Este instructivo presenta un paso a paso para ejecutar un Script que configurará un Proyecto de DataOps con todos sus
recursos asociados a partir de un proyecto plantilla. Este Script ejecutará los siguientes pasos:
5.3 Prerrequisitos
Para utilizar el template para crear un proyecto de DataOps, se debe utilizar primero una clonación del proyecto como se
muestra en la siguiente figura:
7
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Este patrón indica que se debe partir de un template y hacerle clone por medio de un script. A partir del clone, se podrán
realizar otras configuraciones adicionales como la creación de los recursos y se podrá comenzar a trabajar a partir de un
proyecto ya estructurado.
Además, para la ejecución del Script es necesario contar con los siguientes permisos:
8
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
También es necesario configurar algunos roles para el Service Principal. Los roles requeridos son Contributor y User Access
Administrator.
Además, se requiere generar 2 Service Connections, una para el ambiente DevTest y la otra para el ambiente de
Producción. Es importante que en la configuración de los Service Connections, se habilite el permiso para acceder a todos
los pipelines. Esto se muestra en la siguiente figura:
Como se explicó al inicio de esta sección, un script (.\scripts\operations\Add-Domain.ps1) está disponible para
automatizar la creación de un nuevo repositorio por medio de un archivo de configuración. Ese Script Creará los
siguientes recursos Azure:
• Un nuevo repositorio
- Políticas de build y pull requests
• Pipelines DevOps
- CI de Infraestructura como código
- CD de infraestructura como código
- CI de Azure Data Factory
- CD de Azure Data Factory
9
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
- CI de Synapse
- CD de Synapse
• Un pull request con los cambios de código específicos para cada dominio.
IMPORTANTE: Antes de realizar estos pasos, se debe haber ejecutado el pipeline Deploy-AzureProject. Esto evitará
que se deban crear archivos de configuración manualmente para la ejecución de este pipeline.
Para utilizar el script, es necesario modificar el archivo de configuración (config.template.json) el cual se encuentra
dentro de la carpeta (./scripts/configs). Para más información sobre el archivo de configuración necesario para el
script Add-Domain.ps1, por favor revisar el siguiente enlace:
https://dev.azure.com/ecopetrolad/AzureVirtualDatacenter/_git/AzureVirtualDatacenterPS1?path=%2Fdocs%
2Fdataops%2Fadd-domain.config.md&version=GBmain
https://ecopetrolad@dev.azure.com/ecopetrolad/AzureVirtualDatacenter/_git/AzureVirtualDatacenterPS1
En una consola tipo Git Bash ejecutar los siguientes comandos, reemplazando <url> por la url del repositorio:
cd AzureVirtualDataCenterPS1
10
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
2. Descargar los artefactos generados por el pipeline Deploy-AzureProject y cópielos dentro del repositorio que
acaba de clonar, bajo el directorio configs/dataops/:
El Artifact que se genera es un documento tipo json que representará la configuración necesaria para los
pasos posteriores.
11
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Imagen 12: Directorio al que se debe mover el archivo json generado por el pipeline
3. Generar un nuevo Commit y Push de los cambios en una nueva rama git (a partir de main)
12
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
6. Entrar al nuevo repositorio y obtenga las aprobaciones necesarias para completar el Pull Request.
7. Una vez que el Pull Request esta completado, esperar a que el pipeline de IaC-CD finalice hasta alcanzar la
etapa de producción.
8. Configurar los ambientes con las aprobaciones y comprobaciones (Gates) que se necesitan dependiendo del
proyecto siguiendo este enlace:
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-
devops#approvals
13
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Synapse es un recurso transversal, y no es generado a través de los pipelines de automatización porque ya existe. Al ser
un recurso compartido, cuando un proyecto nuevo es desplegado, es necesario asignar permisos al service principal y al
Azure Data Factory de leer y escribir en la base de datos de Synapse.
El pipeline "Grant-Permissions-Synapse.CD" tendrá que ser ejecutado manualmente después de que un nuevo proyecto
con su infraestructura haya sido creado exitosamente. El parámetro que recibe (Domain Name) es el nombre del
proyecto que acaba de ser generado, y se le darán los permisos para que lea y escriba en la base de datos de Synapse.
14
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Este pipeline obtiene los datos de la instancia de Azure Data Factory, el service principal del proyecto de Azure DevOps
(Azure Service Connection) y los datos de Synapse a través de diferentes tareas:
15
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Imagen 19: Script para obtener las variables del Service Principal
5. Invocar a la instancia de base de datos de Synapse para agregar al usuario. Este paso se repite para
Azure Data Factory, y para el service principal.
La invitación a la base de datos de Synapse se hace a través del siguiente script de Powershell:
16
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
Con los pasos anteriores, ya se tiene un proyecto base para comenzar a desarrollar un proyecto en DataOps. Sin
embargo, en el caso de que ya se tenga un dominio existente, es necesario realizar el instructivo 6.1 para migrar ese
dominio.
El anterior Instructivo está diseñado para proyectos de DataOps en los que se tenga que crear un nuevo dominio. En el
caso de que ya se cuente con un dominio existente, se debe realizar una migración del historial de GIT de un repositorio
de Azure Data Factory. (Este paso es opcional y solo se debe hacer si ya se tiene un dominio).
Para poder migrar una rama que ya existe (Long-lived) dentro de un proyecto a un repositorio de git dedicado, es
necesario ejecutar una secuencia de pasos que permita no solo migrar los archivos, pero también el historial de cambios.
Requerimientos
• PowerShell
• Un fork del repositorio template
• Autenticación Git (https://docs.microsoft.com/en-us/azure/devops/repos/git/auth-overview?view=azure-
devops)
1. Clonar el repositorio compartido donde tiene la rama (long-lived) de Data Factory, actualmente llamado
DmDataFactoryDev:
3. Crear una rama temporal dentro del repositorio que se utilizará para la migración:
4. Agregar el nuevo repositorio que se ha creado utilizando el patrón de fork (ya sea a través del
Pipeline "Add Domain" de Azure DevOps o ejecutando manualmente el script Add-Domain.ps1)
como nuevo [remote] bajo el nombre Project (https://git-scm.com/book/en/v2/Git-Basics-
Working-with-Remotes ) (por ejemplo, https://../BI/DMCadenaSuministro):
5. Crear un directorio llamado data-factory. Luego mover todos los archivos del repositorio git original de
Data Factory a este directorio. Finalmente realizar commit de los cambios:
6. Combinar (merge) el nuevo repositorio (actualmente como un remote llamado project/main) con los
cambios de la rama long-lived del repositorio original hacia el branch de migración, aceptando todos los
cambios que originalmente se realizaron en el template:
7. Realizar Push de todos los cambios locales a una nueva rama (llamada en este ejemplo
DM_CADENA_SUMINISTROS_MIGRATION) en el nuevo repositorio:
18
INSTRUCTIVO GENERACIÓN DE INFRAESTRUCTURA Y PIPELINES EN DATAOPS
GESTIÓN DE INFORMACIÓN
VICEPRESIDENCIA DIGITAL
CÓDIGO Elaborado Versión:
G-01 03/06/2021 1
10. Probablemente se quiera mantener la rama antigua (que está bloqueada) por un tiempo. Una vez
que la migración haya sido exitosa y ya se pueda continuar con el proceso de desarrollo sin
problemas, se puede eliminar esta rama original.
7. RELACIÓN DE VERSIONES
RELACIÓN DE VERSIONES
19