Share via


Lagra data på gränsen med Azure Blob Storage på IoT Edge

Gäller för:Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Azure Blob Storage på IoT Edge tillhandahåller en blockblob - och tilläggsbloblagringslösning vid gränsen. En bloblagringsmodul på din IoT Edge-enhet fungerar som en Azure-blobtjänst, förutom att blobarna lagras lokalt på din IoT Edge-enhet. Du kan komma åt dina blobar med samma Azure Storage SDK-metoder eller blob-API-anrop som du redan är van vid. Den här artikeln beskriver begrepp som rör Azure Blob Storage på IoT Edge-containern som kör en blobtjänst på din IoT Edge-enhet.

Den här modulen är användbar i scenarier:

  • Där data måste lagras lokalt tills de kan bearbetas eller överföras till molnet. Dessa data kan vara videor, bilder, ekonomidata, sjukhusdata eller andra ostrukturerade data.
  • När enheter finns på en plats med begränsad anslutning.
  • När du effektivt vill bearbeta data lokalt för att få åtkomst till data med låg svarstid, så att du kan reagera på nödsituationer så snabbt som möjligt.
  • När du vill minska bandbreddskostnaderna och undvika att överföra terabyte data till molnet. Du kan bearbeta data lokalt och endast skicka bearbetade data till molnet.

Den här modulen levereras med deviceToCloudUpload - och deviceAutoDelete-funktioner .

Funktionen deviceToCloudUpload är en konfigurerbar funktion. Den här funktionen överför automatiskt data från din lokala bloblagring till Azure med tillfälligt stöd för Internetanslutning. Det gör att du kan:

  • Aktivera/inaktivera funktionen deviceToCloudUpload.
  • Välj i vilken ordning data kopieras till Azure som NewestFirst eller OldestFirst.
  • Ange det Azure Storage-konto som du vill att dina data ska laddas upp till.
  • Ange de containrar som du vill ladda upp till Azure. Med den här modulen kan du ange både käll- och målcontainernamn.
  • Välj möjligheten att ta bort blobarna omedelbart när uppladdningen till molnlagringen är klar
  • Utför fullständig blobuppladdning (med hjälp av Put Blob åtgärd) och blocknivåuppladdning (med hjälp av Put Blockoch Put Block ListAppend Block åtgärder).

Den här modulen använder uppladdning på blocknivå när din blob består av block. Här följer några vanliga scenarier:

  • Programmet uppdaterar vissa block i en tidigare uppladdad blockblob eller lägger till nya block i en tilläggsblob, den här modulen laddar bara upp de uppdaterade blocken och inte hela bloben.
  • Modulen laddar upp blob och Internetanslutningen försvinner, när anslutningen är tillbaka igen laddar den bara upp de återstående blocken och inte hela bloben.

Om en oväntad processavslutning (t.ex. strömavbrott) inträffar under en blobuppladdning laddas alla block som ska laddas upp igen när modulen är online igen.

deviceAutoDelete är en konfigurerbar funktion. Den här funktionen tar automatiskt bort dina blobar från den lokala lagringen när den angivna varaktigheten (mätt i minuter) upphör att gälla. Det gör att du kan:

  • Aktivera/inaktivera funktionen deviceAutoDelete.
  • Ange den tid i minuter (deleteAfterMinutes) varefter blobarna tas bort automatiskt.
  • Välj möjligheten att behålla bloben medan den laddas upp om värdet deleteAfterMinutes upphör att gälla.

Förutsättningar

En Azure IoT Edge-enhet:

Molnresurser:

En IoT Hub på standardnivå i Azure.

deviceToCloudUpload och deviceAutoDelete-egenskaper

Använd modulens önskade egenskaper för att ange deviceToCloudUploadProperties och deviceAutoDeleteProperties. Önskade egenskaper kan anges under distributionen eller ändras senare genom att redigera modultvillingen utan att behöva distribuera om. Vi rekommenderar att du kontrollerar "Modultvillingen" för reported configuration och configurationValidation att se till att värdena sprids korrekt.

deviceToCloudUploadProperties

Namnet på den här inställningen är deviceToCloudUploadProperties. Om du använder IoT Edge-simulatorn anger du värdena till relaterade miljövariabler för dessa egenskaper, som du hittar i förklaringsavsnittet.

Property Möjliga värden Förklaring
uploadOn SANT, FALSKT Ange till false som standard. Om du vill aktivera funktionen anger du fältet till true.

Miljövariabel: deviceToCloudUploadProperties__uploadOn={false,true}
uploadOrder NewestFirst, OldestFirst Gör att du kan välja i vilken ordning data kopieras till Azure. Ange till OldestFirst som standard. Ordningen bestäms av den senaste ändrade tiden för Blob.

Miljövariabel: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst}
cloudStorage Anslut ionString "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>"är en anslutningssträng som gör att du kan ange det lagringskonto som du vill att dina data ska laddas upp till. Ange Azure Storage Account Name, Azure Storage Account Key, End point suffix. Lägg till lämpligt EndpointSuffix för Azure där data laddas upp, det varierar för Global Azure, Government Azure och Microsoft Azure Stack.

Du kan välja att ange Azure Storage SAS-anslutningssträng här. Men du måste uppdatera den här egenskapen när den upphör att gälla. SAS-behörigheter kan omfatta skapa åtkomst för containrar och skapa, skriva och lägga till åtkomst för blobar.

Miljövariabel: 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"}
Gör att du kan ange de containernamn som du vill ladda upp till Azure. Med den här modulen kan du ange både käll- och målcontainernamn. Om du inte anger målcontainerns namn tilldelas det automatiskt ett containernamn, <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>till exempel . Du kan skapa mallsträngar för målcontainerns namn, kolla in kolumnen möjliga värden.
* %h –> IoT Hub-namn (3–50 tecken).
* %d –> IoT Edge-enhets-ID (1 till 129 tecken).
* %m –> Modulnamn (1 till 64 tecken).
* %c –> Källcontainernamn (3 till 63 tecken).

Containernamnets maximala storlek är 63 tecken. Namnet tilldelas automatiskt målcontainerns namn om containerns storlek överstiger 63 tecken. I det här fallet trimmas namnet i varje avsnitt (IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName) till 15 tecken.

Miljövariabel: deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName>
deleteAfterUpload SANT, FALSKT Ange till false som standard. När de är inställda på truetas data bort automatiskt när uppladdningen till molnlagringen är klar.

VARNING! Om du använder tilläggsblobar tar den här inställningen bort tilläggsblobar från lokal lagring efter en lyckad uppladdning, och eventuella framtida åtgärder för att lägga till blockering till dessa blobar misslyckas. Använd den här inställningen med försiktighet. Aktivera inte den här inställningen om programmet utför ovanliga tilläggsåtgärder eller inte stöder kontinuerliga tilläggsåtgärder

Miljövariabel: deviceToCloudUploadProperties__deleteAfterUpload={false,true}.

deviceAutoDeleteProperties

Namnet på den här inställningen är deviceAutoDeleteProperties. Om du använder IoT Edge-simulatorn anger du värdena till relaterade miljövariabler för dessa egenskaper, som du hittar i förklaringsavsnittet.

Property Möjliga värden Förklaring
deleteOn SANT, FALSKT Ange till false som standard. Om du vill aktivera funktionen anger du fältet till true.

Miljövariabel: deviceAutoDeleteProperties__deleteOn={false,true}
deleteAfterMinutes <minutes> Ange tid i minuter. Modulen tar automatiskt bort dina blobar från lokal lagring när det här värdet upphör att gälla. Aktuellt maximalt antal tillåtna minuter är 35791.

Miljövariabel: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading SANT, FALSKT Som standard är den inställd på trueoch behåller bloben medan den laddas upp till molnlagring om deleteAfterMinutes den upphör att gälla. Du kan ange den till false och den tar bort data så snart de deleteAfterMinutes upphör att gälla. Obs! För att den här egenskapen ska fungera måste uploadOn anges till true.

VARNING! Om du använder tilläggsblobar tar den här inställningen bort tilläggsblobar från lokal lagring när värdet upphör att gälla och eventuella framtida åtgärder för att lägga till blockering till dessa blobar misslyckas. Kontrollera att utgångsvärdet är tillräckligt stort för den förväntade frekvensen för tilläggsåtgärder som utförs av ditt program.

Miljövariabel: deviceAutoDeleteProperties__retainWhileUploading={false,true}

Använda SMB-resursen som lokal lagring

Du kan ange SMB-resursen som din lokala lagringssökväg när du distribuerar Windows-containern för den här modulen på Windows-värden.

Kontrollera att SMB-resursen och IoT-enheten finns i ömsesidigt betrodda domäner.

Du kan köra New-SmbGlobalMapping PowerShell-kommandot för att mappa SMB-resursen lokalt på IoT-enheten som kör Windows.

Konfigurationsstegen:

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

Till exempel:

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

Det här kommandot använder autentiseringsuppgifterna för att autentisera med fjärr-SMB-servern. Mappa sedan fjärrresurssökvägen till G: enhetsbeteckning (kan vara valfri annan tillgänglig enhetsbeteckning). IoT-enheten har nu datavolymen mappad till en sökväg på G:-enheten.

Kontrollera att användaren på IoT-enheten kan läsa/skriva till den fjärranslutna SMB-resursen.

För distributionen kan värdet <storage mount> för vara G:/ContainerData:C:/BlobRoot.

Bevilja katalogåtkomst till containeranvändare i Linux

Om du använder volymmontering för lagring i dina alternativ för att skapa Linux-containrar behöver du inte utföra några extra steg, men om du använder bindningsmontering krävs de här stegen för att köra tjänsten korrekt.

I den här modulen ingår en användare (namn: absie, ID: 11000) och en användargrupp (namn: absie, ID: 11000) och en användargrupp (namn: absie, ID: 11000). Om containern startas som rot (standardanvändaren är rot) startas vår tjänst som absie-användare med låg behörighet.

Det här beteendet gör konfigurationen av behörigheterna för värdsökvägsbindningar avgörande för att tjänsten ska fungera korrekt, annars kraschar tjänsten med åtkomst nekad fel. Sökvägen som används i katalogbindningen måste vara tillgänglig för containeranvändaren (exempel: absie 11000). Du kan ge containeranvändaren åtkomst till katalogen genom att köra följande kommandon på värden:

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

Till exempel:

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

Om du behöver köra tjänsten som en annan användare än absie kan du ange ditt anpassade användar-ID i createOptions under egenskapen "Användare" i distributionsmanifestet. I sådana fall använder du standard- eller rotgrupps-ID 0.

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

Bevilja nu containeranvändaren åtkomst till katalogen

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

Konfigurera loggfiler

Standardnivån för utdataloggen är "Info". Om du vill ändra utdataloggnivån anger du LogLevel miljövariabeln för den här modulen i distributionsmanifestet. LogLevel accepterar följande värden:

  • Kritiskt
  • Fel
  • Varning
  • Info
  • Felsöka

Information om hur du konfigurerar loggfiler för din modul finns i de här metodtipsen för produktion.

Anslut till bloblagringsmodulen

Du kan använda kontonamnet och kontonyckeln som du konfigurerade för din modul för att komma åt bloblagringen på din IoT Edge-enhet.

Ange din IoT Edge-enhet som blobslutpunkt för alla lagringsbegäranden som du gör till den. Du kan skapa en anslutningssträng för en explicit lagringsslutpunkt med hjälp av IoT Edge-enhetsinformationen och det kontonamn som du har konfigurerat.

  • För moduler som distribueras på samma enhet som där Azure Blob Storage på IoT Edge-modulen körs är blobslutpunkten: http://<module name>:11002/<account name>.
  • För moduler eller program som körs på en annan enhet måste du välja rätt slutpunkt för nätverket. Beroende på nätverkskonfigurationen väljer du ett slutpunktsformat som gör att datatrafiken från den externa modulen eller programmet kan nå enheten som kör Azure Blob Storage på IoT Edge-modulen. Blobslutpunkten för det här scenariot är en av:
    • http://<device IP >:11002/<account name>
    • http://<IoT Edge device hostname>:11002/<account name>
    • http://<fully qualified domain name>:11002/<account name>

Viktigt!

Azure IoT Edge är skiftlägeskänsligt när du gör anrop till moduler, och Storage SDK är också som standard gemener. Även om namnet på modulen på Azure Marketplace är AzureBlobStorageonIoTEdge kan du genom att ändra namnet till gemener se till att dina anslutningar till Azure Blob Storage på IoT Edge-modulen inte avbryts.

Snabbstartsexempel för Azure Blob Storage

Dokumentationen om Azure Blob Storage innehåller snabbstartsexempelkod på flera språk. Du kan köra de här exemplen för att testa Azure Blob Storage på IoT Edge genom att ändra blobslutpunkten för att ansluta till din lokala bloblagringsmodul.

Följande snabbstartsexempel använder språk som också stöds av IoT Edge, så att du kan distribuera dem som IoT Edge-moduler tillsammans med bloblagringsmodulen:

  • .NET
    • Azure Blob Storage på IoT Edge-modulen v1.4.0 och tidigare är kompatibla med WindowsAzure.Storage 9.3.3 SDK och v1.4.1 stöder även Azure.Storage.Blobs 12.8.0 SDK.
  • Python
    • Versioner före V2.1 av Python SDK har ett känt problem där modulen inte returnerar tiden för att skapa blobar. På grund av det problemet fungerar inte vissa metoder som listblobar. Som en lösning anger du uttryckligen API-versionen på blobklienten till "2017-04-17". Exempel: block_blob_service._X_MS_VERSION = '2017-04-17'
    • Exempel på tilläggsblob
  • Node.js
  • JS/HTML
  • Ruby
  • Kör
  • PHP

Anslut till din lokala lagring med Azure Storage Explorer

Du kan använda Azure Storage Explorer för att ansluta till ditt lokala lagringskonto.

  1. Ladda ned och installera Azure Storage Explorer

  2. Den senaste versionen av Azure Storage Explorer använder en nyare lagrings-API-version som inte stöds av bloblagringsmodulen. Starta Azure Storage Explorer. Välj menyn Redigera. Kontrollera att API:erna för Azure Stack Hub-mål har valts. Om det inte är det väljer du Mål azure stack hub. Starta om Azure Storage Explorer för att ändringen ska börja gälla. Den här konfigurationen krävs för kompatibilitet med din IoT Edge-miljö.

  3. Anslut till Azure Storage med hjälp av en anslutningssträng

  4. Ange anslutningssträng:DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;

  5. Gå igenom stegen för att ansluta.

  6. Skapa container i ditt lokala lagringskonto

  7. Börja ladda upp filer som Blockblobar eller Tilläggsblobar.

    Kommentar

    Den här modulen stöder inte sidblobar.

  8. Du kan också välja att ansluta dina Azure Storage-konton i Storage Explorer. Den här konfigurationen ger dig en enda vy för både ditt lokala lagringskonto och Azure Storage-konto

Lagringsåtgärder som stöds

Blob Storage-moduler på IoT Edge använder Azure Storage SDK:er och är konsekventa med 2017-04-17-versionen av Azure Storage API för blockblobslutpunkter.

Eftersom inte alla Azure Blob Storage-åtgärder stöds av Azure Blob Storage på IoT Edge visas status för var och en av dessa i det här avsnittet.

Konto

Stöds:

  • Visa en lista med containrar

Unsupported:

  • Hämta och ange blobtjänstegenskaper
  • Preflight blob-begäran
  • Hämta blobtjänststatistik
  • Hämta kontoinformation

Containers

Stöds:

  • Skapa och ta bort container
  • Hämta containeregenskaper och metadata
  • Lista blobar
  • Hämta och ange container-ACL
  • Ange containermetadata

Unsupported:

  • Lånecontainer

Blobar

Stöds:

  • Placera, hämta och ta bort blob
  • Hämta och ange blobegenskaper
  • Hämta och ange blobmetadata

Unsupported:

  • Låneblob
  • Blob för ögonblicksbilder
  • Kopiera och avbryt kopieringsblob
  • Ta bort blob
  • Ange blobnivå

Blockblobar

Stöds:

  • Placera block
  • Placera och hämta blocklista

Unsupported:

  • Placera block från URL

Tilläggsblobar

Stöds:

  • Tilläggsblock

Unsupported:

  • Lägg till block från URL

Event Grid på IoT Edge-integrering

Varning

Integreringen med Event Grid på IoT Edge är i förhandsversion

Den här Azure Blob Storage på IoT Edge-modulen tillhandahåller nu integrering med Event Grid på IoT Edge. Detaljerad information om den här integreringen finns i självstudien för att distribuera modulerna, publicera händelser och verifiera händelseleverans.

Viktig information

Här är viktig information i Docker Hub för den här modulen. Du kanske kan hitta mer information om felkorrigeringar och reparation i viktig information i en viss version.

Nästa steg

Lär dig hur du distribuerar Azure Blob Storage på IoT Edge

Håll dig uppdaterad med de senaste uppdateringarna och meddelandena på sidan med viktig information om Azure Blob Storage på IoT Edge.