devops

Construye un espacio de trabajo gobernado en Databricks con Pulumi

Fuente: pulumi.com 6 min de lectura

Compartir

Construye un espacio de trabajo gobernado en Databricks con Pulumi

Estás leyendo un resumen. El contenido completo está en pulumi.com.

Los equipos de plataforma responsables de Databricks a menudo se encuentran configurando manualmente clústeres y cuadernos para cada nuevo equipo de ciencia de datos. Esta carga manual conduce a políticas de clúster inconsistentes, costos descontrolados debido a instancias sobredimensionadas y brechas de seguridad en las operaciones del espacio de trabajo. Sin una forma estandarizada de aprovisionar recursos locales de espacio de trabajo, las plataformas de datos se convierten en una colección fragmentada de entornos personalizados que son imposibles de gobernar a gran escala. A medida que el uso de Databricks crece en la empresa, la falta de una línea base de espacio de trabajo gobernada se convierte en un gran riesgo operativo. Las políticas inconsistentes llevan a facturación impredecible y fallos de auditoría. Estandarizar tu entorno Databricks con Pulumi asegura que cada espacio de trabajo comience con los controles de costos correctos, políticas de clúster, cuadernos y trabajos automatizados, permitiendo que tus equipos de datos se muevan más rápido sin comprometer la gobernanza. Lo que construirás En esta publicación, aprenderás a aprovisionar una línea base de espacio de trabajo Databricks gobernado utilizando Pulumi. Construirás: Políticas de clúster para hacer cumplir los tipos de instancias y controles de costos. Cuadernos de trabajo para estandarizar ubicaciones de carga de trabajo. Alcances de secreto y permisos para hacer que el acceso sea revisable. Trabajos automatizados que se ejecutan en cómputo con políticas restringidas. Al final, tendrás una configuración de espacio de trabajo reproducible que podrás implementar en cualquier nuevo entorno Databricks. El límite de gestión de Databricks Al gestionar Databricks con Pulumi, comprende el límite entre recursos a nivel de cuenta y a nivel de espacio de trabajo. A nivel de cuenta: Crear requisitos previos en la nube como VPCs, subredes, roles IAM y grupos de recursos de Azure utiliza el proveedor de nube para tu plataforma objetivo. En AWS y GCP, la creación de espacios de trabajo de Databricks y la identidad a nivel de cuenta utilizan las API de cuenta del proveedor de Databricks, como databricks.MwsWorkspaces; en Azure, el espacio de trabajo en sí se gestiona comúnmente con azure-native. A nivel de espacio de trabajo: Gestionar clústeres, trabajos, cuadernos, permisos y alcances de secreto dentro de un espacio de trabajo específico. Este ejemplo utiliza el proveedor @pulumi/databricks contra una URL de espacio de trabajo de Azure Databricks, y el mismo patrón de recursos de espacio de trabajo se aplica una vez que tu proveedor está configurado para el espacio de trabajo objetivo. Para este tutorial, asumiremos que tienes un espacio de trabajo Databricks existente y deseas gestionar los recursos dentro de él. Configuración de credenciales con Pulumi ESC Antes de escribir código, necesitamos configurar nuestras credenciales. Pulumi ESC (Entornos, Secretos y Configuración) gestiona esto de manera segura. Puedes crear un entorno que mapee las credenciales de Databricks en la configuración de Pulumi para el proveedor de Databricks: valores: databricks: host: "https://adb-123456789.0.azuredatabricks.net" token: fn::secret: databricks-token pulumiConfig: databricks:host: ${databricks.host} databricks:token: ${databricks.token} Una vez configurado, importa este entorno en tu pila de Pulumi. El proveedor de Databricks lee valores de configuración como databricks:host y databricks:token sin requerir secretos estáticos en la configuración de la pila. Definiendo tu infraestructura de datos El siguiente programa de Pulumi en TypeScript configura políticas de clúster separadas para cómputo interactivo y de trabajos, un clúster compartido gobernado, un alcance de secreto, permisos explícitos, un cuaderno y un trabajo programado que se ejecuta en computación restringida por políticas. import * as databricks from "@pulumi/databricks"; const interactivePolicy = new databricks.ClusterPolicy("interactive-fair-use", { name: "Política de Uso Justo Interactivo", definition: JSON.stringify({ "dbus_per_hour": { "type": "range", "maxValue": 10, }, "autotermination_minutes": { "type": "fixed", "value": 20, "hidden": true, }, }), }); const jobPolicy = new databricks.ClusterPolicy("job-fair-use", { name: "Política de Uso Justo para Trabajos", definition: JSON.stringify({ "dbus_per_hour": { "type": "range", "maxValue": 10, }, }), }); const sharedCluster = new databricks.Cluster("shared-cluster", { clusterName: "Clúster de Ingeniería Compartido", sparkVersion: "17.3.x-scala2.13", nodeTypeId: "Standard_DS3_v2", autoterminationMinutes: 20, numWorkers: 2, policyId: interactivePolicy.id, }); const clusterPermissions = new databricks.Permissions("shared-cluster-permissions", { clusterId: sharedCluster.id, accessControls: [{ groupName: "data-engineers", permissionLevel: "CAN_RESTART", }, { groupName: "analysts", permissionLevel: "CAN_ATTACH_TO", }], }); const secretScope = new databricks.SecretScope("etl-secrets", { name: "etl-secrets", }); const secretScopeAcl = new databricks.SecretAcl("etl-secrets-readers", { scope: secretScope.name, principal: "data-engineers", permission: "READ", }); const etlNotebook = new databricks.Notebook("etl-notebook", { path: "/Shared/ETL/NightlyProcess", language: "PYTHON", contentBase64: Buffer.from("print('Running ETL process...')").toString("base64"), }); const job = new databricks.Job("nightly-etl", { name: "Trabajo ETL Nocturno", tasks: [{ taskKey: "etl-task", newCluster: { numWorkers: 2, sparkVersion: "17.3.x-scala2.13", nodeTypeId: "Standard_DS3_v2", policyId: jobPolicy.id, }, notebookTask: { notebookPath: etlNotebook.path, }, }], schedule: { quartzCronExpression: "0 0 2 * * ?", timezoneId: "UTC", }, }); Esta línea base cubre los recursos que un equipo de plataforma necesita estandarizar primero: Política de clúster interactivo: limita el consumo de DBU y aplica la auto-terminación para cómputo interactivo compartido. Política de clúster de trabajos: limita el consumo de DBU para cómputo temporal de trabajos sin aplicar configuraciones de auto-terminación interactivas. Clúster compartido: ofrece a los equipos un objetivo de cómputo interactivo gobernado. Alcance de secreto y ACL: hace que el acceso a secretos ETL sea revisable. Permisos de clúster: asigna acceso a nivel de grupo al clúster compartido. Cuaderno: almacena el artefacto de carga de trabajo en el espacio de trabajo. Trabajo: programa el cuaderno en cómputo restringido por políticas. Validación Después de ejecutar pulumi up, puedes validar tu línea base de Databricks: UI de Databricks: Navega a la sección "Compute" y verifica que existan las políticas de uso justo interactivas y de trabajos, con la auto-terminación fija solo en la política interactiva. Verificación del clúster: Confirma que el clúster compartido haga referencia a la política interactiva y use el tipo de nodo esperado. Verificación de permisos: Confirma que los permisos del clúster y del alcance de secreto coincidan con los grupos de Databricks previstos. Verificación del cuaderno: Confirma que /Shared/ETL/NightlyProcess exista en el espacio de trabajo. Verificación del trabajo: Ve a la sección "Workflows" y confirma que el "Trabajo ETL Nocturno" esté programado y haga referencia al cuaderno. Gestionar tu espacio de trabajo Databricks como código le da a cada equipo una línea base gobernada y consciente de los costos. Usa pilas de Pulumi para implementar las mismas políticas de clúster, permisos, alcance de secreto, cuaderno y patrón de trabajo en múltiples espacios de trabajo con una configuración específica del entorno. # Desplegar en desarrollo pulumi stack select dev pulumi up # Promover a producción pulumi stack select prod pulumi up Esto mantiene los trabajos ETL de producción, políticas de clúster, alcances de secreto y asignaciones de permisos alineados con el desarrollo, mientras que cada pila se vincula a su propio espacio de trabajo Databricks y entorno ESC. Conclusión A continuación, conecta esta línea base de espacio de trabajo a tu canal de CI/CD y promuévela a través de pilas de Pulumi para que los trabajos de Databricks, políticas de clúster y permisos sigan el mismo camino de revisión que el código de aplicación. Comienza con la documentación del proveedor de Databricks y Pulumi ESC para el manejo de credenciales.

Artículos relacionados