Lagra data på gränsen med Azure Blob Storage på IoT Edge
Gäller för: IoT Edge 1.5 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 avPut Block
ochPut Block List
Append 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:
Du kan använda utvecklingsdatorn eller en virtuell dator som en IoT Edge-enhet genom att följa stegen i snabbstarten för Linux- eller Windows-enheter.
En lista över operativsystem och arkitekturer som stöds finns i Azure IoT Edge-system som stöds. Azure Blob Storage på IoT Edge-modulen stöder följande arkitekturer:
- Windows AMD64
- Linux AMD64
- Linux ARM32
- Linux ARM64
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 bloben. Miljövariabel: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst} |
cloudStorageConnectionString | "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>" är en niska veze 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-niska veze 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å true tas 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å true och 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.
Ansluta 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 niska veze 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. Genom att ändra namnet till gemener ser du 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
- 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:
- Node.js
- JS/HTML
- Ruby
- Kör
- PHP
Ansluta till din lokala lagring med Azure Storage Explorer
Du kan använda Azure Storage Explorer för att ansluta till ditt lokala lagringskonto.
Ladda ned och installera Azure Storage Explorer
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ö.
Ansluta till Azure Storage med hjälp av en niska veze
Ange niska veze:
DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;
Gå igenom stegen för att ansluta.
Skapa container i ditt lokala lagringskonto
Börja ladda upp filer som Blockblobar eller Tilläggsblobar.
Kommentar
Den här modulen stöder inte sidblobar.
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ödd:
- 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ödd:
- 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ödd:
- 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ödd:
- Placera block
- Placera och hämta blocklista
Unsupported:
- Placera block från URL
Tilläggsblobar
Stödd:
- 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.