Creazione e utilizzo di file di risorse

Un'attività di Azure Batch spesso richiede un tipo di dati da elaborare. I file di risorse rappresentano il modo per fornire questi dati alla macchina virtuale in Batch tramite un'attività. Tutti i tipi di attività supportano i file di risorse: attività, attività di avvio, attività di preparazione del processo, attività di rilascio del processo e così via. Questo articolo illustra alcuni metodi comuni per creare file di risorse e inserirli in una macchina virtuale.

I file di risorse inseriscono i dati in una macchina virtuale in Batch, ma il tipo di dati e il modo in cui vengono usati sono flessibili. Esistono tuttavia alcuni casi d'uso comuni:

  • Effettuare il provisioning di file comuni in ogni macchina virtuale usando i file di risorse in un'attività di avvio.
  • Effettuare il provisioning dei dati di input da elaborare dalle attività.

I file comuni potrebbero ad esempio essere file in un'attività di avvio usati per installare le applicazioni eseguite dalle attività. I dati di input potrebbero essere immagini o dati video non elaborati o qualsiasi informazione da elaborare tramite Batch.

Tipi di file di risorse

Sono disponibili alcune opzioni diverse per generare file di risorse, ognuno con i propri metodi. Il processo di creazione per i file di risorse varia a seconda della posizione in cui vengono archiviati i dati originali e se devono essere creati più file.

  • Archiviazione'URL del contenitore: genera file di risorse da qualsiasi contenitore di archiviazione in Azure.
  • Archiviazione nome del contenitore: genera i file di risorse dal nome di un contenitore nell'account di archiviazione di Azure collegato all'account Batch (l'account di archiviazione automatica).
  • Singolo file di risorse dall'endpoint Web: genera un singolo file di risorse da qualsiasi URL HTTP valido.

URL contenitore di archiviazione

Se si usa un URL del contenitore di archiviazione, con le autorizzazioni corrette, è possibile accedere ai file in un contenitore di archiviazione in Azure.

In questo esempio C# i file sono già stati caricati in un contenitore di archiviazione di Azure come archiviazione BLOB. Per accedere ai dati necessari per creare un file di risorse, è prima di tutto necessario ottenere l'accesso al contenitore di archiviazione. Questa operazione può essere eseguita in diversi modi.

Firma di accesso condiviso

Creare un URI di firma di accesso condiviso (SAS) con le autorizzazioni corrette per accedere al contenitore di archiviazione. Impostare l'ora di scadenza e le autorizzazioni per la firma di accesso condiviso. In questo caso, non viene specificata alcuna ora di inizio, quindi la firma di accesso condiviso diventa valida immediatamente e scade due ore dopo la generazione.

SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
{
    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
    Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
};

Nota

Per l'accesso al contenitore è necessario disporre di entrambe le autorizzazioni Read e List, mentre con l'accesso al BLOB è necessaria solo l'autorizzazione Read.

Una volta configurate le autorizzazioni, creare il token SAS e formattare l'URL SAS per accedere al contenitore di archiviazione. Usando l'URL di firma di accesso condiviso formattato per il contenitore di archiviazione, generare un file di risorse con From Archiviazione ContainerUrl.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

string sasToken = container.GetSharedAccessSignature(sasConstraints);
string containerSasUrl = String.Format("{0}{1}", container.Uri, sasToken);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl);

Se lo si desidera, è possibile usare la proprietà blobPrefix per limitare i download solo ai BLOB il cui nome inizia con un prefisso specificato:

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl, blobPrefix = yourPrefix);

Identità gestita

Creare un'identità gestita assegnata dall'utente e assegnarla al ruolo per il Storage Blob Data Reader contenitore Archiviazione di Azure. Assegnare quindi l'identità gestita al pool in modo che le macchine virtuali possano accedere all'identità. Infine, è possibile accedere ai file nel contenitore specificando l'identità da usare per Batch.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(container.Uri, identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name" });

Accesso pubblico

Un'alternativa alla generazione di un URL di firma di accesso condiviso o all'uso di un'identità gestita consiste nell'abilitare l'accesso in lettura pubblico anonimo a un contenitore e ai relativi BLOB nell'archiviazione BLOB di Azure. Ciò permette di concedere l'accesso in sola lettura a queste risorse senza condividere la chiave dell'account e senza richiedere una firma di accesso condiviso (SAS). L'accesso pubblico viene in genere usato per gli scenari in cui si vuole che determinati BLOB siano sempre disponibili per l'accesso in lettura anonimo. Se questo scenario si adatta alla soluzione, vedere Configurare l'accesso in lettura pubblico anonimo per contenitori e BLOB per altre informazioni sulla gestione dell'accesso ai dati BLOB.

Archiviazione nome del contenitore (archiviazione automatica)

Anziché configurare e creare un URL di firma di accesso condiviso, è possibile usare il nome del contenitore di archiviazione di Azure per accedere ai dati BLOB. Il contenitore di archiviazione usato deve trovarsi nell'account di archiviazione di Azure collegato all'account Batch, talvolta definito account di archiviazione automatica. L'uso del contenitore di archiviazione automatica consente di ignorare la configurazione e la creazione di un URL SAS per accedere a un contenitore di archiviazione. Specificare invece il nome del contenitore di archiviazione nell'account di archiviazione collegato.

Se non si ha già un account di archiviazione automatica, vedere la procedura descritta in Creare un account Batch per informazioni dettagliate su come creare e collegare un account di archiviazione.

Nell'esempio seguente viene usato Auto Archiviazione Container per generare il file dai dati nell'account di archiviazione automatica.

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);

Come per un URL del contenitore di archiviazione, è possibile usare la proprietà blobPrefix per specificare quali BLOB verranno scaricati:

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName, blobPrefix = yourPrefix);

Singolo file di risorse dall'endpoint Web

Per creare un singolo file di risorse, è possibile specificare un URL HTTP valido contenente i dati di input. L'URL viene fornito all'API Batch, quindi i dati vengono usati per creare un file di risorse. Questo metodo può essere usato se i dati per creare il file di risorse si trovano in Archiviazione di Azure o in qualsiasi altro percorso Web, ad esempio un endpoint GitHub.

L'esempio seguente usa FromUrl per recuperare il file da una stringa contenente un URL valido, quindi genera un file di risorse da usare dall'attività. Non sono necessarie credenziali per questo scenario. Le credenziali sono necessarie se si usa l'archiviazione BLOB, a meno che non sia abilitato l'accesso in lettura pubblico nel contenitore BLOB.

ResourceFile inputFile = ResourceFile.FromUrl(yourURL, filePath);

È anche possibile usare una stringa definita come URL (o una combinazione di stringhe che, insieme, creare l'URL completo per il file).

ResourceFile inputFile = ResourceFile.FromUrl(yourDomain + yourFile, filePath);

Se il file si trova in Archiviazione di Azure, è possibile usare un'identità gestita anziché generare una firma di accesso condiviso per il file di risorse.

ResourceFile inputFile = ResourceFile.FromUrl(yourURLFromAzureStorage, 
    identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name"},
    filePath: filepath
);

Nota

L'autenticazione dell'identità gestita funziona solo con i file in Archiviazione di Azure. L'identità nanaged richiede l'assegnazione Storage Blob Data Reader di ruolo per il contenitore in cui si trova il file e deve anche essere assegnata al pool di Batch.

Suggerimenti

Le attività di Azure Batch possono usare i file in molti modi, motivo per cui Batch offre varie opzioni per la gestione dei file nelle attività. Gli scenari seguenti non sono concepiti per essere completi, ma riguardano alcune situazioni comuni e forniscono raccomandazioni.

Molti file di risorse

Se i file di attività comuni vengono condivisi tra molte attività nel processo Batch, è possibile usare un pacchetto dell'applicazione per contenere tali file. I pacchetti dell'applicazione offrono l'ottimizzazione per la velocità di download e i dati nei pacchetti dell'applicazione vengono memorizzati nella cache tra le attività. Con i pacchetti dell'applicazione non è necessario gestire manualmente diversi file di risorse né generare URL SAS per accedere ai file in Archiviazione di Azure. Batch interagisce in background con Archiviazione di Azure per archiviare e distribuire i pacchetti dell'applicazione nei nodi di calcolo. Se i file di attività non cambiano spesso, i pacchetti dell'applicazione possono essere adatti alla soluzione.

Viceversa, se le attività hanno molti file univoci per tale attività, i file di risorse sono probabilmente l'opzione migliore. Le attività che usano file univoci spesso devono essere aggiornate o sostituite, che non è altrettanto facile da fare con il contenuto del pacchetto dell'applicazione. I file di risorse offrono maggiore flessibilità per l'aggiornamento, l'aggiunta o la modifica di singoli file.

Numero di file di risorse per attività

Quando un'attività specifica un numero elevato di file di risorse, Batch potrebbe rifiutare l'attività come troppo grande. Questo dipende dalla lunghezza totale dei nomi file o degli URL (nonché dal riferimento all'identità) per tutti i file aggiunti all'attività. È preferibile mantenere l'attività di piccole dimensioni riducendo al minimo il numero di file di risorse presenti in essa.

Se non è possibile ridurre al minimo il numero di file necessari per l'attività, ottimizzare l'attività creando un unico file di risorse che fa riferimento a un contenitore di archiviazione dei file di risorse. A tale scopo, inserire i file di risorse in un contenitore Archiviazione di Azure e usare uno dei metodi descritti in precedenza per generare i file di risorse in base alle esigenze.

Passaggi successivi