Compilación de una canalización de datos mediante Azure Data Factory, DevOps y aprendizaje automático

Azure DevOps Services

Empiece a crear una canalización de datos con la ingesta de datos, la transformación de datos y el entrenamiento del modelo.

Obtenga información sobre cómo obtener datos de un archivo CSV (valores separados por comas) y guardar los datos en Azure Blob Storage. Transforme los datos y guárdelos en un área de almacenamiento provisional. A continuación, entrene un modelo de Machine Learning mediante los datos transformados. Escriba el modelo en Blob Storage como un archivo pickle de Python.

Requisitos previos

Antes de comenzar, necesitará lo siguiente:

Aprovisionamiento de los recursos de Azure

  1. Inicie sesión en Azure Portal.

  2. En el menú, seleccione el botón Cloud Shell. Cuando se le solicite, seleccione la experiencia de Bash.

    Screenshot showing where to select Cloud Shell from the menu.

    Nota:

    Necesitará un recurso de Azure Storage para conservar los archivos que cree en Azure Cloud Shell. Al abrir Cloud Shell por primera vez, se le pedirá que cree un grupo de recursos, una cuenta de almacenamiento y un recurso compartido de Azure Files. Esta configuración se usa automáticamente para todas las sesiones de Cloud Shell futuras.

Selección de una región de Azure

Una región consiste en uno o varios centros de datos de Azure de una ubicación geográfica. Este de EE. UU., Oeste de EE. UU. y Europa del Norte son ejemplos de regiones. Todos los recursos de Azure, incluida una instancia de App Service, tienen una región asignada.

Para facilitar la ejecución de los comandos, empezaremos seleccionando una región predeterminada. Después de especificar la región predeterminada, los comandos posteriores la usan a menos que especifique otra.

  1. En Cloud Shell, ejecute el comando az account list-locations siguiente para enumerar las regiones que están disponibles en la suscripción de Azure.

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. En la columna Name de la salida, elija una región cercana. Por ejemplo, elija asiapacific o westus2.

  3. Ejecute az config para establecer la región predeterminada. En el ejemplo siguiente, reemplace <REGION> por el nombre de la región que eligió.

    az config set defaults.location=<REGION>
    

    En este ejemplo se establece westus2 como la región predeterminada.

    az config set defaults.location=westus2
    

Creación de variables de Bash

  1. En Cloud Shell, genere un número aleatorio. Usará este número para crear nombres únicos globales para determinados servicios en el paso siguiente.

    resourceSuffix=$RANDOM
    
  2. Cree nombres únicos globales para la cuenta de almacenamiento y el almacén de claves. Los siguientes comandos usan comillas dobles, que indican a Bash que interpole las variables mediante la sintaxis insertada.

    storageName="datacicd${resourceSuffix}"
    keyVault="keyvault${resourceSuffix}"
    
  3. Cree una variable de Bash más para almacenar los nombres y la región del grupo de recursos. En el ejemplo siguiente, reemplace <REGION> por la región que eligió para la región predeterminada.

    rgName='data-pipeline-cicd-rg'
    region='<REGION>'
    
  4. Cree nombres de variables para las instancias de Azure Data Factory y Azure Databricks.

    datafactorydev='data-factory-cicd-dev'
    datafactorytest='data-factory-cicd-test'
    databricksname='databricks-cicd-ws'
    

Creación de recursos de Azure

  1. Ejecute el siguiente comando az group create para crear un grupo de recursos mediante rgName.

    az group create --name $rgName
    
  2. Ejecute el siguiente comando az storage account create para crear una nueva cuenta de almacenamiento.

    az storage account create \
        --name $storageName \
        --resource-group $rgName \
        --sku Standard_RAGRS \
        --kind StorageV2
    
  3. Ejecute el siguiente comando az storage container create para crear dos contenedores, rawdata y prepareddata.

    az storage container create -n rawdata --account-name $storageName 
    az storage container create -n prepareddata --account-name $storageName 
    
  4. Ejecute el siguiente comando az keyvault create para crear un nuevo almacén de claves.

    az keyvault create \
        --name $keyVault \
        --resource-group $rgName
    
  5. Cree una nueva factoría de datos mediante la interfaz de usuario del portal o la CLI de Azure:

    • Nombre: data-factory-cicd-dev
    • Versión: V2
    • Grupos de recursos: data-pipeline-cicd-rg
    • Ubicación: su ubicación más cercana
    • Desactive la selección de Habilitar Git.
    1. Agregue la extensión Azure Data Factory.

      az extension add --name datafactory
      
    2. Ejecute el siguiente comando az datafactory create para crear una factoría de datos.

       az datafactory create \
           --name data-factory-cicd-dev \
           --resource-group $rgName
      
    3. Copie el identificador de suscripción. La factoría de datos usará este identificador más adelante.

  6. Cree una nueva factoría de datos mediante la interfaz de usuario del portal o la CLI de Azure. Usará esta factoría de datos para las pruebas.

    • Nombre: data-factory-cicd-test
    • Versión: V2
    • Grupos de recursos: data-pipeline-cicd-rg
    • Ubicación: su ubicación más cercana
    • Desactive la selección de Habilitar GIT.
    1. Ejecute el siguiente comando az datafactory create para crear una factoría de datos para las pruebas.

       az datafactory create \
           --name data-factory-cicd-test \
           --resource-group $rgName
      
    2. Copie el identificador de suscripción. La factoría de datos usará este identificador más adelante.

  7. Agregue un nuevo servicio de Azure Databricks:

    • Grupos de recursos: data-pipeline-cicd-rg
    • Nombre del área de trabajo: databricks-cicd-ws
    • Ubicación: su ubicación más cercana
    1. Agregue la extensión de Azure Databricks si aún no está instalada.

       az extension add --name databricks
      
    2. Ejecute el siguiente comando az databricks workspace create para crear una nueva área de trabajo.

      az databricks workspace create \
          --resource-group $rgName \
          --name databricks-cicd-ws  \
          --location eastus2  \
          --sku trial
      
    3. Copie el identificador de suscripción. El servicio Databricks usará este identificador más adelante.

Carga de datos en el contenedor de almacenamiento

  1. En el Azure Portal, abra la cuenta de almacenamiento en el grupo de recursos data-pipeline-cicd-rg.
  2. Vaya a Servicio de Blob>Contenedores.
  3. Abra el contenedor de prepareddata.
  4. Cargue el archivo sample.csv.

Configuración de Key Vault

Usará Azure Key Vault para almacenar toda la información de conexión de los servicios de Azure.

Creación de un token de acceso personal de Databricks

  1. En el Azure Portal, vaya a Databricks y abra el área de trabajo.
  2. En la interfaz de usuario de Azure Databricks, cree y copie un token de acceso personal.

Copia de la clave de cuenta y la cadena de conexión de la cuenta de almacenamiento

  1. Vaya a la cuenta de almacenamiento.
  2. Abra Claves de acceso.
  3. Copie la primera clave y la cadena de conexión.

Guardar valores en Key Vault

  1. Cree tres secretos:

    • databricks-token: your-databricks-pat
    • StorageKey: your-storage-key
    • StorageConnectString: your-storage-connection
  2. Ejecute el siguiente comando az keyvault secret set para agregar secretos al almacén de claves.

    az keyvault secret set --vault-name "$keyVault" --name "databricks-token" --value "your-databricks-pat"
    az keyvault secret set --vault-name "$keyVault" --name "StorageKey" --value "your-storage-key"
    az keyvault secret set --vault-name "$keyVault" --name "StorageConnectString" --value "your-storage-connection"
    

Importación de la solución de canalización de datos

  1. Inicie sesión en su organización de Azure DevOps y vaya al proyecto.
  2. Vaya a Repositorios e importe la versión bifurcada del repositorio de GitHub. Para obtener más información, consulte Importación de un repositorio de Git en el proyecto.

Agregar una conexión de servicio de Azure Resource Manager

  1. Creación de una conexión de servicio de Azure Resource Manager
  2. Seleccione Entidad de servicio (automática).
  3. Elija el grupo de recursos data-pipeline-cicd-rg.
  4. Asigne un nombre a la conexión de servicio azure_rm_connection.
  5. Seleccione Conceder permiso de acceso a todas las canalizaciones. Para seleccionar esta opción, necesitará el rol Administrador de conexiones de servicio.

Adición de variables de canalización

  1. Cree un nuevo grupo de variables denominado datapipeline-vg.

  2. Agregue la extensión de Azure DevOps si aún no está instalada.

    az extension add --name azure-devops 
    
  3. Inicie sesión en su organización de Azure DevOps.

    az devops login --org https://dev.azure.com/<yourorganizationname>
    
    az pipelines variable-group create --name datapipeline-vg -p <yourazuredevopsprojectname> --variables \
                                        "LOCATION=$region" \
                                        "RESOURCE_GROUP=$rgName" \
                                        "DATA_FACTORY_NAME=$datafactorydev" \
                                        "DATA_FACTORY_DEV_NAME=$datafactorydev" \
                                        "DATA_FACTORY_TEST_NAME=$datafactorytest" \
                                        "ADF_PIPELINE_NAME=DataPipeline" \
                                        "DATABRICKS_NAME=$databricksname" \
                                        "AZURE_RM_CONNECTION=azure_rm_connection" \
                                        "DATABRICKS_URL=<URL copied from Databricks in Azure portal>" \
                                        "STORAGE_ACCOUNT_NAME=$storageName" \
                                        "STORAGE_CONTAINER_NAME=rawdata"
    
  4. Cree un segundo grupo de variables denominado keys-vg. Este grupo extraerá variables de datos de Key Vault.

  5. Seleccione Vincular secretos desde una instancia de Azure Key Vault como variables. Para más información, consulte Vinculación de secretos desde un almacén de claves de Azure.

  6. Autorización de la suscripción de Azure.

  7. Elija todos los secretos disponibles para agregarlos como variables (databricks-token,StorageConnectString,StorageKey).

Configuración de Azure Databricks y Azure Data Factory

Siga los pasos de las secciones siguientes para configurar Azure Databricks y Azure Data Factory.

Creación de un ámbito de pruebas en Azure Databricks

  1. En Azure Portal, vaya a Almacén de claves>Propiedades.
  2. Copie el nombre DNS y el identificador de recurso.
  3. En el área de trabajo de Azure Databricks, crear un ámbito de secreto denominado testscope.

Adición de un nuevo clúster en Azure Databricks

  1. En el área de trabajo de Azure Databricks, vaya a Clústeres.
  2. Seleccione Create cluster (Crear clúster).
  3. Asigne un nombre al nuevo clúster y guárdelo.
  4. Seleccione el nombre del clúster.
  5. En la cadena de dirección URL, copie el contenido entre /clusters/ y /configuration. Por ejemplo, en la cadena clusters/0306-152107-daft561/configuration, se copiaría 0306-152107-daft561.
  6. Guarde esta cadena para usarla más adelante.

Configuración del repositorio de código en Azure Data Factory

  1. En Azure Data Factory, vaya a Creador y monitor. Para obtener más información, consulte Creación de una factoría de datos.
  2. Seleccione Configurar repositorio de código y, a continuación, conecte el repositorio.
    • Tipo de repositorio: Git de Azure DevOps
    • Organización de Azure DevOps: su cuenta activa
    • Nombre del proyecto: proyecto de canalización de datos de Azure DevOps
    • Nombre del repositorio de Git: usar existente.
      • Seleccione la rama principal para la colaboración.
      • Establezca /azure-data-pipeline/factorydata como carpeta raíz.
    • Rama en la que se va a importar el recurso: seleccione Usar existente y principal.
  1. En Azure portal, abra el almacén de claves.
  2. Seleccione Directivas de acceso.
  3. Seleccione Agregar directiva de acceso.
  4. En Configurar desde la plantilla, seleccione Administración de claves y secretos.
  5. En Seleccionar entidad de seguridad, busque el nombre de la factoría de datos de desarrollo y agréguelo.
  6. Seleccione Agregar para agregar las directivas de acceso.
  7. Repita estos pasos para agregar una directiva de acceso para la factoría de datos de prueba.

Actualización del servicio vinculado del almacén de claves en Azure Data Factory

  1. Vaya a Administrar>Servicios vinculados.
  2. Actualice el almacén de claves de Azure para conectarse a la suscripción.

Actualización del servicio vinculado de almacenamiento en Azure Data Factory

  1. Vaya a Administrar>Servicios vinculados.
  2. Actualice el valor de Azure Blob Storage para conectarse a la suscripción.

Actualización del servicio vinculado de Azure Databricks en Azure Data Factory

  1. Vaya a Administrar>Servicios vinculados.
  2. Actualice el valor de Azure Databricks para conectarse a la suscripción.
  3. En el identificador de clúster existente, escriba el valor del clúster que guardó anteriormente.

Prueba y publicación de la factoría de datos

  1. En Azure Data Factory, vaya a Editar.
  2. Abra DataPipeline.
  3. Seleccione Variables.
  4. Compruebe que storage_account_name hace referencia a la cuenta de almacenamiento en el Azure Portal. Actualice el valor predeterminado si es necesario. Guarde los cambios.
  5. Seleccione Validar para comprobar DataPipeline.
  6. Seleccione Publicar para publicar recursos de data-factory en la rama adf_publish del repositorio.

Ejecución de la canalización de CI/CD

Siga estos pasos para ejecutar la canalización de integración continua y entrega continua (CI/CD):

  1. Vaya a la página de Canalizaciones. A continuación, elija la acción para crear una canalización.
  2. Seleccione git de Azure Repos como ubicación del código fuente.
  3. Cuando aparezca la lista de repositorios, seleccione el que corresponda.
  4. Al configurar la canalización, seleccione Archivo YAML de Azure Pipelines existente. Elija el archivo YAML: /azure-data-pipeline/data_pipeline_ci_cd.yml.
  5. Ejecución de la canalización Si la canalización no se ha ejecutado antes, es posible que tenga que conceder permiso para acceder a un recurso durante la ejecución.

Limpieza de recursos

Si no va a seguir usando esta aplicación, elimine la canalización de datos siguiendo estos pasos:

  1. Elimine el grupo de recursos data-pipeline-cicd-rg.
  2. Elimine el proyecto de Azure DevOps.

Pasos siguientes