Cambiare il percorso BLOB da quello predefinito (anteprima privata)Change a blob path from the default path (private preview)

L'articolo descrive come impostare una funzione di Azure per rinominare un percorso di file BLOB predefinito.This article describes how to set up an Azure function to rename a default blob file path.

PrerequisitiPrerequisites

È necessario disporre di una definizione del processo configurata correttamente in una risorsa dati ibrida all'interno di un gruppo di risorse.Ensure that you have a job definition that has been correctly configured in a hybrid data resource within a resource group.

Creare una funzione di AzureCreate an Azure function

Per creare una funzione di Azure, seguire questa procedura:To create an Azure function, do the following:

  1. Accedere al portale di Azure.Go to the Azure portal.

  2. Nella parte superiore del riquadro sinistro fare clic su Nuovo.At the top of the left pane, click New.

  3. Digitare App per le funzioni nella casella Cerca e quindi premere INVIO.In the Search box, type Function App, and then press Enter.

    Digitare "App per le funzioni" nella casella Cerca

  4. Fare clic su App per le funzioni nell'elenco Risultati.In the Results list, click Function App.

    Selezionare la risorsa app per le funzioni nell'elenco dei risultati

    Verrà visualizzata la finestra App per le funzioni.The Function App window opens.

  5. Fare clic su Crea.Click Create.

    Pulsante "Crea" della finestra App per le funzioni

  6. Nel pannello di configurazione App per le funzioni seguire questa procedura:On the Function App configuration blade, do the following:

    a.a. Nella casella Nome app digitare il nome dell'app.In the App name box, type the app name.

    b.b. Nella casella Sottoscrizione digitare il nome della sottoscrizione.In the Subscription box, type the name of the subscription.

    c.c. In Gruppo di risorse fare clic su Crea nuovo e quindi digitare il nome del gruppo di risorse.Under Resource Group, click Create new, and then type the name of the resource group.

    d.d. Nella casella Piano di hosting digitare Piano a consumo.In the Hosting Plan box, type Consumption Plan.

    e.e. Nella casella Percorso digitare il percorso.In the Location box, type the location.

    f.f. In Account di archiviazione selezionare un account di archiviazione esistente o crearne uno nuovo.Under Storage account, select an existing storage account or create a new storage account. Un account di archiviazione viene usato internamente per la funzione.A storage account is used internally for the function.

    Immettere i dati per la configurazione della nuova app per le funzioni

  7. Fare clic su Crea.Click Create.
    Verrà creata l'app per le funzioni.The function app is created.

  8. Nel riquadro sinistro fare clic su Altri servizi e quindi seguire questa procedura:In the left pane, click More services, and then do the following:

    a.a. Nella casella Filtro digitare Servizi app.In the Filter box, type App services.

    b.b. Fare clic su Servizi app.Click App Services.

    Collegamento "Altri servizi" nel riquadro sinistro

  9. Nell'elenco dei servizi app fare clic sul nome dell'app per le funzioni.In the list of app services, click the name of the function app.
    Verrà visualizzata la pagina dell'app per le funzioni.The function app page opens.

  10. Nel riquadro sinistro fare clic su Nuova funzione e quindi seguire questa procedura:In the left pane, click New Function, and then do the following:

    a.a. Nell'elenco Linguaggio selezionare C#.In the Language list, select C#.

    b.b. Nella matrice di riquadri di modello selezionare QueueTrigger-CSharp.In the array of template tiles, select QueueTrigger-CSharp.

    c.c. Nella casella Assegnare un nome alla funzione digitare un nome per la funzione.In the Name your function box, type a name for your function.

    d.d. Nella casella Nome coda digitare in nome della definizione del processo di trasformazione dei dati.In the Queue name box, type your data-transformation job definition name.

    e.e. In Connessione dell'account di archiviazione fare clic su Nuova e quindi selezionare l'account che corrisponde al processo di trasformazione dei dati.Under Storage account connection, click new, and then select the account that corresponds to the data-transformation job.
    Prendere nota del nome della connessione.Make a note of the connection name. Questo nome è necessario in seguito nella funzione di Azure.The name is required later in the Azure function.

    Creare una nuova funzione C#

    f.f. Fare clic su Crea.Click Create.
    Verrà visualizzata la finestra Funzione.The Function window opens.

  11. Nella finestra Funzione eseguire il file con estensione csx e quindi seguire questa procedura:In the Function window, run .csx file, and then do the following:

    a.a. Incollare il codice seguente:Paste the following code:

    using System;
    using System.Configuration;
    using Microsoft.WindowsAzure.Storage.Blob;
    using Microsoft.WindowsAzure.Storage.Queue;
    using Microsoft.WindowsAzure.Storage;
    using System.Collections.Generic;
    using System.Linq;
    
    public static void Run(QueueItem myQueueItem, TraceWriter log)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["STORAGE_CONNECTIONNAME"]);
    
        string storageAccUriEndswith = "windows.net/";
        string uri = myQueueItem.TargetLocation.Replace("%20", " ");
        log.Info($"Blob Uri: {uri}");
    
        // Remove storage account uri string
        uri = uri.Substring(uri.IndexOf(storageAccUriEndswith) + storageAccUriEndswith.Length);
    
        string containerName = uri.Substring(0, uri.IndexOf("/")); 
    
        // Remove container name string
        uri = uri.Substring(containerName.Length + 1);
    
        // Current blob path
        string blobName = uri; 
    
        string volumeName = uri.Substring(containerName.Length + 1);
        volumeName = uri.Substring(0, uri.IndexOf("/"));
    
        // Remove volume name string
        uri = uri.Substring(volumeName.Length + 1);
    
        string newContainerName = uri.Substring(0, uri.IndexOf("/")).ToLower();
        string newBlobName = uri.Substring(newContainerName.Length + 1);
    
        log.Info($"Container name: {containerName}");
        log.Info($"Volume name: {volumeName}");
        log.Info($"New container name: {newContainerName}");
    
        log.Info($"Blob name: {blobName}");
        log.Info($"New blob name: {newBlobName}");
    
        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    
        // Container reference
        CloudBlobContainer container = blobClient.GetContainerReference(containerName);
        CloudBlobContainer newContainer = blobClient.GetContainerReference(newContainerName);
        newContainer.CreateIfNotExists();
    
        if(!container.Exists())
        {
            log.Info($"Container - {containerName} not exists");
            return;
        }
    
        if(!newContainer.Exists())
        {
            log.Info($"Container - {newContainerName} not exists");
            return;
        }
    
        CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
        if (!blob.Exists())
        {
            // Skip to copy the blob to new container, if source blob doesn't exist
            log.Info($"The specified blob does not exist.");
            log.Info($"Blob Uri: {blob.Uri}");
            return;
        }
    
        CloudBlockBlob blobCopy = newContainer.GetBlockBlobReference(newBlobName);
        if (!blobCopy.Exists())
        {
            blobCopy.StartCopy(blob);
            // Delete old blob, after copy to new container
            blob.DeleteIfExists();
            log.Info($"Blob file path renamed completed successfully");
        }
        else
        {
            log.Info($"Blob file path renamed already done");
            // Delete old blob, if already exists.
            blob.DeleteIfExists();
        }
    }
    
    public class QueueItem
    {
        public string SourceLocation {get;set;}
        public long SizeInBytes {get;set;}
        public string Status {get;set;}
        public string JobID {get;set;}
        public string TargetLocation {get; set;}
    }
    

    b.b. Sostituire STORAGE_CONNECTIONNAME nella riga 11 con il nome della connessione all'account di archiviazione (vedere il punto 8c).Replace STORAGE_CONNECTIONNAME on line 11 with your storage account connection (refer point 8c).

    c.c. Nella parte superiore sinistra fare clic su Salva.At the top left, click Save.

    Salvare la funzione

  12. Per completare la funzione, aggiungere un altro file seguendo questa procedura:To complete the function, add one more file by doing the following:

    a.a. Fare clic su Visualizza file.Click View files.

    Collegamento "Visualizza file"

    b.b. Fare clic su Aggiungi.Click Add.

    c.c. Digitare project.json e quindi premere INVIO.Type project.json, and then press Enter.

    d.d. Incollare il codice seguente nel file project.json:In the project.json file, paste the following code:

    {
    "frameworks": {
        "net46":{
        "dependencies": {
            "windowsazure.storage": "8.1.1"
        }
        }
    }
    }
    

    e.e. Fare clic su Salva.Click Save.

È stata creata una funzione di Azure.You have created an Azure function. Questa funzione viene attivata ogni volta che il processo di trasformazione dei dati genera un nuovo BLOB.This function is triggered each time a new blob is generated by the data-transformation job.

Passaggi successiviNext steps

Usare l'interfaccia utente di StorSimple Data Manager per la trasformazione dei datiUse StorSimple Data Manager UI to transform your data