Archiviare i dati sui dispositivi perimetrali con l'archiviazione BLOB di Azure in IoT Edge

Si applica a:Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS è di fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Archiviazione BLOB di Azure in IoT Edge fornisce una soluzione di archiviazione BLOB in blocchi e di accodamento BLOB all'perimetro. Un modulo di archiviazione BLOB nel dispositivo IoT Edge si comporta come un servizio BLOB di Azure, ad eccezione dei BLOB archiviati localmente nel dispositivo IoT Edge. È possibile accedere ai BLOB usando gli stessi metodi o chiamate API BLOB di Archiviazione di Azure a cui si è già usati. Questo articolo illustra i concetti correlati alle Archiviazione BLOB di Azure nel contenitore IoT Edge che esegue un servizio BLOB nel dispositivo IoT Edge.

Questo modulo è utile negli scenari:

  • Dove i dati devono essere archiviati in locale fino a quando non possono essere elaborati o trasferiti nel cloud. Questi dati possono essere video, immagini, dati finanziari, dati ospedalieri o altri dati non strutturati.
  • Quando i dispositivi si trovano in un luogo con connettività limitata.
  • Quando si desidera elaborare in modo efficiente i dati in locale per ottenere l'accesso a bassa latenza ai dati, in modo che sia possibile rispondere alle emergenze il più rapidamente possibile.
  • Quando si vogliono ridurre i costi di larghezza di banda ed evitare il trasferimento di terabyte di dati al cloud. È possibile elaborare i dati in locale e inviare solo i dati elaborati al cloud.

Questo modulo include le funzionalità deviceToCloudUpload e deviceAutoDelete .

La funzionalità deviceToCloudUpload è una funzionalità configurabile. Questa funzione carica automaticamente i dati dall'archiviazione BLOB locale in Azure con supporto di connettività Internet intermittente. Consente di:

  • Attivare/disattivare la funzionalità deviceToCloudUpload.
  • Scegliere l'ordine in cui i dati vengono copiati in Azure, ad esempio NewestFirst o OldestFirst.
  • Specificare l'account di Archiviazione di Azure in cui si vogliono caricare i dati.
  • Specificare i contenitori da caricare in Azure. Questo modulo consente di specificare sia il nome del contenitore di origine che di quello di destinazione.
  • Scegliere la possibilità di eliminare immediatamente i BLOB, al termine del caricamento nell'archiviazione cloud
  • Eseguire il caricamento blob completo (usando Put Blob l'operazione) e bloccare il caricamento a livello di blocco (usando Put Blockle operazioni e Put Block List Append Block ).

Questo modulo usa il caricamento a livello di blocco, quando il BLOB è costituito da blocchi. Ecco alcuni scenari comuni:

  • L'applicazione aggiorna alcuni blocchi di un BLOB in blocchi caricato in precedenza o aggiunge nuovi blocchi a un BLOB di accodamento. Questo modulo carica solo i blocchi aggiornati e non l'intero BLOB.
  • Il modulo sta caricando i BLOB e la connessione Internet si interrompe. Quando la connettività viene ripristinata, carica solo i blocchi rimanenti e non l'intero BLOB.

Se si verifica una terminazione imprevista del processo (ad esempio un'interruzione dell'alimentazione) durante un caricamento BLOB, tutti i blocchi dovuti al caricamento vengono caricati di nuovo quando il modulo torna online.

deviceAutoDelete è una funzionalità configurabile. Questa funzione elimina automaticamente i BLOB dall'archiviazione locale quando scade la durata specificata (misurata in minuti). Consente di:

  • Attivare/disattivare la funzionalità deviceAutoDelete.
  • Specificare il tempo in minuti (deleteAfterMinutes) dopo il quale i BLOB vengono eliminati automaticamente.
  • Scegliere di conservare il BLOB mentre è in corso il caricamento se il valore deleteAfterMinutes scade.

Prerequisiti

Un dispositivo Azure IoT Edge:

Risorse cloud:

Un hub IoT di livello Standard in Azure.

Proprietà deviceToCloudUpload e deviceAutoDelete

Usare le proprietà desiderate del modulo per impostare deviceToCloudUploadProperties e deviceAutoDeleteProperties. Le proprietà desiderate possono essere impostate durante la distribuzione o cambiate in seguito modificando il modulo gemello senza la necessità di ripetere la distribuzione. È consigliabile controllare la presenza di "Modulo gemello" per reported configuration configurationValidation e per assicurarsi che i valori vengano propagati correttamente.

deviceToCloudUploadProperties

Il nome di questa impostazione è deviceToCloudUploadProperties. Se si usa il simulatore IoT Edge, impostare i valori sulle variabili di ambiente correlate per queste proprietà, che è possibile trovare nella sezione di spiegazione.

Proprietà Valori possibili Spiegazione
uploadOn true, false Impostare su false per impostazione predefinita. Se si vuole attivare la funzionalità, impostare questo campo su true.

Variabile di ambiente: deviceToCloudUploadProperties__uploadOn={false,true}
uploadOrder NewestFirst, OldestFirst Consente di scegliere l'ordine in cui i dati vengono copiati in Azure. Impostare su OldestFirst per impostazione predefinita. L'ordine è determinato dall'ora dell'ultima modifica del BLOB.

Variabile di ambiente: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst}
cloudStorageConnectionString "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>"è un stringa di connessione che consente di specificare l'account di archiviazione a cui si desidera caricare i dati. Specificare Azure Storage Account Name, Azure Storage Account Key, End point suffix. Aggiungere EndpointSuffix appropriato di Azure in cui vengono caricati i dati, varia per Azure globale, Azure per enti pubblici e Microsoft Azure Stack.

È possibile scegliere di specificare la stringa di connessione con firma di accesso condiviso di Archiviazione di Azure qui. È tuttavia necessario aggiornare questa proprietà alla scadenza. Le autorizzazioni di firma di accesso condiviso possono includere la creazione dell'accesso per i contenitori e la creazione, la scrittura e l'aggiunta dell'accesso per i BLOB.

Variabile di ambiente: deviceToCloudUploadProperties__cloudStorageConnectionString=<connection string>
storageContainersForUpload "<source container name1>": {"target": "<target container name>"},

"<source container name1>": {"target": "%h-%d-%m-%c"},

"<source container name1>": {"target": "%d-%c"}
Consente di specificare i nomi dei contenitori da caricare in Azure. Questo modulo consente di specificare sia il nome del contenitore di origine che di quello di destinazione. Se non si specifica il nome del contenitore di destinazione, viene assegnato automaticamente un nome di contenitore, <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>ad esempio . È possibile creare stringhe modello per il nome del contenitore di destinazione. Vedere la colonna dei valori possibili.
* %h -> nome hub IoT (3-50 caratteri).
* %d -> ID dispositivo IoT Edge (1-129 caratteri).
* %m -> Nome modulo (1-64 caratteri).
* %c -> Nome contenitore origine (3-63 caratteri).

La dimensione massima del nome del contenitore è di 63 caratteri. Il nome viene assegnato automaticamente al nome del contenitore di destinazione se la dimensione del contenitore supera i 63 caratteri. In questo caso, il nome viene tagliato in ogni sezione (IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName) a 15 caratteri.

Variabile di ambiente: deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName>
deleteAfterUpload true, false Impostare su false per impostazione predefinita. Se impostato su true, i dati vengono eliminati automaticamente al termine del caricamento nell'archiviazione cloud.

ATTENZIONE: se si usano BLOB di accodamento, questa impostazione elimina i BLOB di accodamento dall'archiviazione locale dopo un caricamento riuscito e le future operazioni di accodamento a tali BLOB avranno esito negativo. Usare questa impostazione con cautela. Non abilitare questa impostazione se l'applicazione esegue operazioni di accodamento non frequenti o non supporta operazioni di accodamento continue

Variabile di ambiente: deviceToCloudUploadProperties__deleteAfterUpload={false,true}.

deviceAutoDeleteProperties

Il nome di questa impostazione è deviceAutoDeleteProperties. Se si usa il simulatore IoT Edge, impostare i valori sulle variabili di ambiente correlate per queste proprietà, che è possibile trovare nella sezione di spiegazione.

Proprietà Valori possibili Spiegazione
deleteOn true, false Impostare su false per impostazione predefinita. Se si vuole attivare la funzionalità, impostare questo campo su true.

Variabile di ambiente: deviceAutoDeleteProperties__deleteOn={false,true}
deleteAfterMinutes <minutes> Specificare il tempo in minuti. Il modulo elimina automaticamente i BLOB dall'archiviazione locale alla scadenza di questo valore. I minuti massimi correnti consentiti sono 35791.

Variabile di ambiente: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading true, false Per impostazione predefinita, è impostato su truee mantiene il BLOB durante il caricamento nell'archiviazione cloud se deleteAfterMinutes scade. È possibile impostarlo su false e elimina i dati non appena deleteAfterMinutes scade. Nota: affinché questa proprietà funzioni uploadOn deve essere impostata su true.

ATTENZIONE: se si usano BLOB di accodamento, questa impostazione elimina i BLOB di accodamento dall'archivio locale alla scadenza del valore e le future operazioni di accodamento a tali BLOB hanno esito negativo. Assicurarsi che il valore di scadenza sia sufficientemente grande per la frequenza prevista di operazioni di accodamento eseguite dall'applicazione.

Variabile di ambiente: deviceAutoDeleteProperties__retainWhileUploading={false,true}

Uso della condivisione SMB come risorsa di archiviazione locale

È possibile fornire la condivisione SMB come percorso di archiviazione locale quando si distribuisce il contenitore Windows di questo modulo nell'host Windows.

Assicurarsi che la condivisione SMB e il dispositivo IoT si trovino in domini reciprocamente attendibili.

È possibile eseguire il comando di PowerShell per eseguire New-SmbGlobalMapping il mapping della condivisione SMB in locale nel dispositivo IoT che esegue Windows.

I passaggi di configurazione:

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath <remote SMB path> -Credential $creds -LocalPath <Any available drive letter>

Ad esempio:

$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:

Questo comando usa le credenziali per l'autenticazione con il server SMB remoto. Eseguire quindi il mapping del percorso di condivisione remota a G: lettera di unità (può essere qualsiasi altra lettera di unità disponibile). Il dispositivo IoT ha ora il volume di dati mappato a un percorso nell'unità G: .

Assicurarsi che l'utente nel dispositivo IoT possa leggere/scrivere nella condivisione SMB remota.

Per la distribuzione il valore di <storage mount> può essere G:/ContainerData:C:/BlobRoot.

Concessione dell'accesso alla directory all'utente del contenitore in Linux

Se si usa il montaggio del volume per l'archiviazione nelle opzioni di creazione per i contenitori Linux, non è necessario eseguire passaggi aggiuntivi, ma se si usa bind mount, questi passaggi sono necessari per eseguire correttamente il servizio.

Seguendo il principio dei privilegi minimi per limitare i diritti di accesso per gli utenti alle autorizzazioni minime necessarie per eseguire il proprio lavoro, questo modulo include un utente (nome: absie, ID: 11000) e un gruppo di utenti (nome: absie, ID: 11000). Se il contenitore viene avviato come radice (l'utente predefinito è root), il servizio viene avviato come utente con privilegi limitati.

Questo comportamento rende la configurazione delle autorizzazioni nel percorso host è fondamentale per il corretto funzionamento del servizio, altrimenti il servizio si arresta in modo anomalo con errori di accesso negato. Il percorso usato nell'associazione di directory deve essere accessibile dall'utente del contenitore ,ad esempio absie 11000. È possibile concedere all'utente del contenitore l'accesso alla directory eseguendo questi comandi nell'host:

sudo chown -R 11000:11000 <blob-dir>
sudo chmod -R 700 <blob-dir>

Ad esempio:

sudo chown -R 11000:11000 /srv/containerdata
sudo chmod -R 700 /srv/containerdata

Se è necessario eseguire il servizio come utente diverso da absie, è possibile specificare l'ID utente personalizzato in createOptions nella proprietà "User" nel manifesto della distribuzione. In questo caso, usare l'ID 0gruppo radice o predefinito .

"createOptions": {
  "User": "<custom user ID>:0"
}

Concedere ora all'utente del contenitore l'accesso alla directory

sudo chown -R <user ID>:<group ID> <blob-dir>
sudo chmod -R 700 <blob-dir>

Configurare i file di log

Il livello di log di output predefinito è 'Info'. Per modificare il livello del log di output, impostare la LogLevel variabile di ambiente per questo modulo nel manifesto della distribuzione. LogLevel accetta i valori seguenti:

  • Critico
  • Errore
  • Avviso
  • Informazioni
  • Debug

Per informazioni sulla configurazione dei file di log per il modulo, vedere queste procedure consigliate per la produzione.

Connettere il modulo di archiviazione BLOB

È possibile usare il nome dell'account e la chiave dell'account configurati per il modulo per accedere all'archiviazione BLOB nel dispositivo IoT Edge.

Specificare il dispositivo IoT Edge come endpoint BLOB per qualsiasi richiesta di archiviazione effettuata. È possibile Creare una stringa di connessione per un endpoint di archiviazione esplicita usando le informazioni del dispositivo IoT Edge e il nome dell'account che è stato configurato.

  • Per i moduli distribuiti nello stesso dispositivo in cui è in esecuzione Archiviazione BLOB di Azure nel modulo IoT Edge, l'endpoint BLOB è: http://<module name>:11002/<account name>.
  • Per i moduli o le applicazioni in esecuzione in un dispositivo diverso, è necessario scegliere l'endpoint appropriato per la rete. A seconda della configurazione di rete, scegliere un formato di endpoint tale che il traffico dei dati dal modulo esterno o dall'applicazione possa raggiungere il dispositivo che esegue Archiviazione BLOB di Azure nel modulo IoT Edge. L'endpoint BLOB per questo scenario è uno dei seguenti:
    • http://<device IP >:11002/<account name>
    • http://<IoT Edge device hostname>:11002/<account name>
    • http://<fully qualified domain name>:11002/<account name>

Importante

Azure IoT Edge fa distinzione tra maiuscole e minuscole quando si effettuano chiamate ai moduli e Storage SDK per impostazione predefinita. La modifica del nome in minuscolo consente di assicurarsi che le connessioni al Archiviazione BLOB di Azure nel modulo IoT Edge non vengano interrotte.

esempi di avvio rapido di Archiviazione BLOB di Azure

La documentazione di Archiviazione BLOB di Azure include codice di esempio di avvio rapido in diversi linguaggi. È possibile eseguire questi esempi per testare Archiviazione BLOB di Azure in IoT Edge modificando l'endpoint BLOB per connettersi al modulo di archiviazione BLOB locale.

Gli esempi di avvio rapido seguenti usano linguaggi supportati anche da IoT Edge, quindi è possibile distribuirli come moduli IoT Edge insieme al modulo di archiviazione BLOB:

  • .NET
    • Il Archiviazione BLOB di Azure nel modulo IoT Edge v1.4.0 e versioni precedenti sono compatibili con WindowsAzure.Storage 9.3.3 SDK e v1.4.1 supporta anche Azure.Storage.Blobs 12.8.0 SDK.
  • Python
    • Le versioni precedenti alla versione 2.1 di Python SDK presentano un problema noto per cui il modulo non restituisce l'ora di creazione del BLOB. A causa di questo problema, alcuni metodi come i BLOB di elenco non funzionano. Come soluzione alternativa, impostare in modo esplicito la versione dell'API nel client BLOB su '2017-04-17'. Esempio: block_blob_service._X_MS_VERSION = '2017-04-17'
    • Esempio di BLOB di accodamento
  • Node.JS
  • JS/HTML
  • Ruby
  • Go
  • PHP

Connettersi all'archiviazione locale con Azure Storage Explorer

È possibile usare Archiviazione di Azure Explorer per connettersi all'account di archiviazione locale.

  1. Scaricare e installare Azure Storage Explorer

  2. La versione più recente di Archiviazione di Azure Explorer usa una versione più recente dell'API di archiviazione non supportata dal modulo di archiviazione BLOB. Avviare Azure Storage Explorer. Selezionare il menu Modifica. Verificare che sia selezionata l'opzione Target Azure Stack Hub APIs (API dell'hub di Azure Stack di destinazione). In caso contrario, selezionare Hub di Azure Stack di destinazione. Riavviare Archiviazione di Azure Explorer per rendere effettiva la modifica. Questa configurazione è necessaria per la compatibilità con l'ambiente IoT Edge.

  3. Connettersi a Archiviazione di Azure usando un stringa di connessione

  4. Specificare la stringa di connessione: DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;

  5. Eseguire i passaggi per connettersi.

  6. Creare un contenitore all'interno dell'account di archiviazione locale

  7. Avviare il caricamento di file come BLOB in blocchi o BLOB di accodamento.

    Nota

    Questo modulo non supporta i BLOB di pagine.

  8. È possibile scegliere di connettere gli account di archiviazione di Azure anche in Storage Explorer. Questa configurazione offre una singola visualizzazione sia per l'account di archiviazione locale che per l'account di archiviazione di Azure

Operazioni di archiviazione supportate

I moduli di archiviazione BLOB in IoT Edge usano gli SDK di archiviazione di Azure e sono coerenti con la versione 2017-04-17 dell'API di archiviazione di Azure per gli endpoint di BLOB in blocchi.

Poiché non tutte le operazioni di Archiviazione BLOB di Azure sono supportate da Archiviazione BLOB di Azure in IoT Edge, questa sezione elenca lo stato di ognuno.

Conto

Supportato:

  • Elencare i contenitori

Non supportato:

  • Ottenere e impostare le proprietà del servizio BLOB
  • Richiedere un BLOB preliminare
  • Ottenere le statistiche del servizio BLOB
  • Ottenere le informazioni sull'account

Contenitori

Supportato:

  • Creare ed eliminare un contenitore
  • Ottenere i metadati ele proprietà del contenitore
  • Elencare i BLOB
  • Ottenere e impostare il contenitore ACL
  • Impostare i metadati del contenitore

Non supportato:

  • Contenitore di lease

BLOB

Supportato:

  • Inserire, ottenere ed eliminare BLOB
  • Ottenere e impostare le proprietà BLOB
  • Ottenere e impostare i metadati BLOB

Non supportato:

  • Lease del BLOB
  • Snapshot di BLOB
  • Copiare e interrompere la copia di BLOB
  • Annullare l'eliminazione di BLOB
  • Impostare il livello di BLOB

BLOB in blocchi

Supportato:

  • Inserire il blocco
  • Inserire e ottenere l'elenco di blocchi

Non supportato:

  • Inserire il blocco dall'URL

BLOB di accodamento

Supportato:

  • Blocco di accodamento

Non supportato:

  • Aggiungi blocco dall'URL

Integrazione di Griglia di eventi in IoT Edge

Attenzione

L'integrazione con Griglia di eventi in IoT Edge è in anteprima

Questo Archiviazione BLOB di Azure nel modulo IoT Edge offre ora l'integrazione con Griglia di eventi in IoT Edge. Per informazioni dettagliate su questa integrazione, vedere l'esercitazione per distribuire i moduli, pubblicare eventi e verificare il recapito degli eventi.

Note sulla versione

Di seguito sono riportate le note sulla versione nell'hub Docker per questo modulo. È possibile trovare altre informazioni relative alle correzioni di bug e alla correzione nelle note sulla versione di una versione specifica.

Passaggi successivi

Informazioni su come distribuire Archiviazione BLOB di Azure in IoT Edge

Rimanere aggiornati con gli aggiornamenti e gli annunci recenti nella pagina delle note sulla versione di IoT Edge nella Archiviazione BLOB di Azure.