Usare modelli per creare entità di Azure Data Factory

Panoramica

Durante l'uso di Azure Data Factory per le esigenze di integrazione dei dati, può essere necessario riusare lo stesso modello in ambienti diversi o implementare ripetutamente la stessa attività all'interno di una soluzione. I modelli consentono di implementare e gestire questi scenari in modo semplificato. I modelli di Azure Data Factory rappresentano la soluzione ideale per gli scenari che implicano riusabilità e ripetizione.

Si consideri la situazione in cui un'organizzazione ha 10 impianti di produzione a livello globale. I log provenienti da ogni impianto vengono archiviati in un database SQL Server locale separato. La società vuole compilare un unico data warehouse nel cloud per l'analisi ad hoc. Vuole inoltre sfruttare la stessa logica, ma configurazioni diverse per gli ambienti di sviluppo, test e produzione.

In questo caso, è necessario ripetere un'attività all'interno dello stesso ambiente, ma con valori diversi nelle 10 data factory per ogni impianto di produzione. In effetti, l'elemento della ripetizione è presente. La creazione di modelli consente l'astrazione di questo flusso generico (ovvero di pipeline con le stesse attività in ogni data factory), ma usa un file dei parametri separato per ogni impianto di produzione.

L'organizzazione vuole inoltre distribuire le 10 data factory più volte in ambienti diversi, pertanto i modelli possono sfruttare questa riusabilità utilizzando file dei parametri separati per gli ambienti di sviluppo, test e produzione.

Creazione di modelli con Azure Resource Manager

I modelli di Azure Resource Manager rappresentano un'ottima soluzione per la creazione di modelli in Azure Data Factory. I modelli di Resource Manager consentono di definire l'infrastruttura e la configurazione della soluzione di Azure tramite un file JSON. Poiché i modelli di Azure Resource Manager funzionano con tutti i servizi di Azure o con la maggior parte di essi, Resource Manager può essere ampiamente usato per gestire facilmente tutte le risorse degli asset di Azure. Per informazioni generali sui modelli di Azure Resource Manager, vedere Creazione di modelli di Gestione risorse di Azure.

Esercitazioni

Per istruzioni dettagliate sulla creazione di entità di Data Factory tramite i modelli di Resource Manager, vedere le esercitazioni seguenti:

Modelli di data factory in GitHub

Vedere i modelli di avvio rapido di Azure in GitHub elencati di seguito:

È possibile condividere i modelli di Azure Data Factory in Modelli di avvio rapido di Azure. Durante lo sviluppo di modelli che possono essere condivisi tramite questo repository, consultare la guida alla collaborazione.

Le sezioni seguenti includono informazioni dettagliate sulla definizione delle risorse di Data Factory in un modello di Resource Manager.

Definizione delle risorse di Data Factory nei modelli

Il modello principale per la definizione di una data factory è il seguente:

"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": { ...
},
"variables": { ...
},
"resources": [
{
    "name": "[parameters('dataFactoryName')]",
    "apiVersion": "[variables('apiVersion')]",
    "type": "Microsoft.DataFactory/datafactories",
    "location": "westus",
    "resources": [
    { "type": "linkedservices",
        ...
    },
    {"type": "datasets",
        ...
    },
    {"type": "dataPipelines",
        ...
    }
}

Definire una data factory

È possibile definire una data factory nel modello di Resource Manager come illustrato nell'esempio seguente:

"resources": [
{
    "name": "[variables('<mydataFactoryName>')]",
    "apiVersion": "2015-10-01",
    "type": "Microsoft.DataFactory/datafactories",
    "location": "East US"
}

Il valore dataFactoryName viene definito in "variables" come segue:

"dataFactoryName": "[concat('<myDataFactoryName>', uniqueString(resourceGroup().id))]",

Definire servizi collegati

"type": "linkedservices",
"name": "[variables('<LinkedServiceName>')]",
"apiVersion": "2015-10-01",
"dependsOn": [ "[variables('<dataFactoryName>')]" ],
"properties": {
    ...
}

Per informazioni dettagliate sulle proprietà JSON per il servizio collegato specifico da distribuire, vedere Servizio collegato Archiviazione o Servizi collegati di calcolo. Il parametro "dependsOn" specifica il nome della data factory corrispondente. Un esempio di definizione di un servizio collegato per Archiviazione di Azure è illustrato nella definizione JSON seguente:

Definire i set di dati

"type": "datasets",
"name": "[variables('<myDatasetName>')]",
"dependsOn": [
    "[variables('<dataFactoryName>')]",
    "[variables('<myDatasetLinkedServiceName>')]"
],
"apiVersion": "2015-10-01",
"properties": {
    ...
}

Per informazioni dettagliate sulle proprietà JSON per il tipo di set di dati specifico da distribuire, vedere Archivi dati e formati supportati. Il parametro "dependsOn" specifica il nome della data factory e del servizio collegato di archiviazione corrispondenti. Un esempio di definizione di un tipo di set di dati per l'archivio BLOB di Azure è illustrato nella definizione JSON seguente:

"type": "datasets",
"name": "[variables('storageDataset')]",
"dependsOn": [
    "[variables('dataFactoryName')]",
    "[variables('storageLinkedServiceName')]"
],
"apiVersion": "2015-10-01",
"properties": {
"type": "AzureBlob",
"linkedServiceName": "[variables('storageLinkedServiceName')]",
"typeProperties": {
    "folderPath": "[concat(parameters('sourceBlobContainer'), '/')]",
    "fileName": "[parameters('sourceBlobName')]",
    "format": {
        "type": "TextFormat"
    }
},
"availability": {
    "frequency": "Hour",
    "interval": 1
}

Definire pipeline

"type": "dataPipelines",
"name": "[variables('<mypipelineName>')]",
"dependsOn": [
    "[variables('<dataFactoryName>')]",
    "[variables('<inputDatasetLinkedServiceName>')]",
    "[variables('<outputDatasetLinkedServiceName>')]",
    "[variables('<inputDataset>')]",
    "[variables('<outputDataset>')]"
],
"apiVersion": "2015-10-01",
"properties": {
    activities: {
        ...
    }
}

Per informazioni dettagliate sulle proprietà JSON per la definizione di attività e pipeline specifiche da distribuire, vedere la sezione relativa alla definizione di pipeline. Il parametro "dependsOn" specifica il nome della data factory e di tutti i servizi collegati o dei set di dati corrispondenti. Un esempio di pipeline che copia i dati dall'archivio BLOB di Azure al database SQL di Azure è illustrato nel frammento di codice JSON seguente:

"type": "datapipelines",
"name": "[variables('pipelineName')]",
"dependsOn": [
    "[variables('dataFactoryName')]",
    "[variables('azureStorageLinkedServiceName')]",
    "[variables('azureSqlLinkedServiceName')]",
    "[variables('blobInputDatasetName')]",
    "[variables('sqlOutputDatasetName')]"
],
"apiVersion": "2015-10-01",
"properties": {
    "activities": [
    {
        "name": "CopyFromAzureBlobToAzureSQL",
        "description": "Copy data frm Azure blob to Azure SQL",
        "type": "Copy",
        "inputs": [
            {
                "name": "[variables('blobInputDatasetName')]"
            }
        ],
        "outputs": [
            {
                "name": "[variables('sqlOutputDatasetName')]"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "BlobSource"
            },
            "sink": {
                "type": "SqlSink",
                "sqlWriterCleanupScript": "$$Text.Format('DELETE FROM {0}', 'emp')"
            },
            "translator": {
                "type": "TabularTranslator",
                "columnMappings": "Column0:FirstName,Column1:LastName"
            }
        },
        "Policy": {
            "concurrency": 1,
            "executionPriorityOrder": "NewestFirst",
            "retry": 3,
            "timeout": "01:00:00"
        }
    }
    ],
    "start": "2016-10-03T00:00:00Z",
    "end": "2016-10-04T00:00:00Z"
}

Uso di parametri nel modello di Data Factory

Per le procedure consigliate sull'uso dei parametri, vedere l'articolo Procedure consigliate per la creazione di modelli di Azure Resource Manager. In generale l'utilizzo dei parametri deve essere ridotto al minimo, soprattutto se è possibile usare variabili anziché parametri. Specificare i parametri solo negli scenari seguenti:

  • Le impostazioni variano a seconda dell'ambiente, ad esempio di sviluppo, test e produzione
  • Segreti (password)

Se è necessario eseguire il pull di segreti dall'Insieme di credenziali delle chiavi di Azure quando si distribuiscono entità di Azure Data Factory tramite modelli, specificare l'insieme di credenziali delle chiavi e il nome del segreto come illustrato nell'esempio seguente:

"parameters": {
    "storageAccountKey": {
        "reference": {
            "keyVault": {
                "id":"/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.KeyVault/vaults/<keyVaultName>",
             },
            "secretName": "<secretName>"
           },
       },
       ...
}
Nota

Attualmente l'esportazione di modelli per le data factory esistenti non è ancora supportata, ma è in via di realizzazione.