共用方式為


在 IoT Edge 使用 Azure Blob 儲存體,以便在邊緣儲存資料

適用於:IoT Edge 1.5 複選標記 IoT Edge 1.5 IoT Edge 1.4 複選標記 IoT Edge 1.4

重要

支援 IoT Edge 1.5 LTS 和 IoT Edge 1.4 LTS 版本。 IoT Edge 1.4 LTS 於 2024 年 11 月 12 日結束生命週期。 如果您是舊版,請參閱更新 IoT Edge

IoT Edge 上的 Azure Blob 儲存體 提供區塊 Blob,並在邊緣附加 Blob 記憶體解決方案。 IoT Edge 裝置上的 Blob 記憶體模組的行為就像 Azure Blob 服務,不同之處在於 Blob 會儲存在 IoT Edge 裝置本機上。 您可以使用您已用來存取的相同 Azure 記憶體 SDK 方法或 Blob API 呼叫來存取 Blob。 本文說明在IoT Edge容器上 Azure Blob 儲存體 在IoT Edge裝置上執行 Blob 服務的相關概念。

此課程模組在案例中很有用:

  • 資料必須儲存在本機,直到可進行處理或傳輸至雲端為止。 此資料可以是影片、影像、財務資料、醫院資料或任何其他非結構化資料。
  • 當裝置位於連線能力有限的位置時。
  • 當您需要在本機有效率地處理資料來取得資料的低延遲存取權,以便您可以盡快回應緊急狀況時。
  • 當您需要降低頻寬成本,並避免將數 TB 的資料傳輸至雲端時。 您可以在本機處理資料,並只將已處理的資料傳送至雲端。

本課程模組隨附 deviceToCloudUploaddeviceAutoDelete 功能。

deviceToCloudUpload 功能是可設定的功能。 此函式會自動將資料從本機 Blob 儲存體上傳至 Azure,並提供間歇性網際網路連線支援。 這可讓您:

  • 開啟/關閉 deviceToCloudUpload 功能。
  • 選擇將資料複製到 Azure 的順序,例如 NewestFirst 或 OldestFirst。
  • 指定您要上傳資料的目的地 Azure 儲存體帳戶。
  • 指定您要上傳至 Azure 的容器。 此課程模組可讓您同時指定來源和目標容器名稱。
  • 選擇在上傳至雲端記憶體完成之後立即刪除 Blob 的能力
  • 執行完整 Blob 上傳(使用 Put Blob 作業)和區塊層級上傳(使用 Put BlockPut Block ListAppend Block 作業)。

當 Blob 包含區塊時,此課程模組會使用區塊層級上傳。 以下是一些常見的案例:

  • 您的應用程式會更新先前上傳區塊 Blob 的某些區塊,或將新區塊附加至附加 Blob,此課程模組只會上傳更新的區塊,而不是整個 Blob。
  • 模組正在上傳 Blob 且網際網路連線會消失,再次恢復連線時,只會上傳其餘區塊,而不是上傳整個 Blob。

如果 Blob 上傳期間發生非預期的進程終止(例如電源失敗),一旦模組重新上線,就會再次上傳因上傳而造成的所有區塊。

deviceAutoDelete 是可設定的功能。 當指定的持續時間 (以分鐘測量) 到期時,此函式會自動從本機儲存體中刪除 Blob。 這可讓您:

  • 開啟/關閉 deviceAutoDelete 功能。
  • 指定以分鐘為單位的時間(deleteAfterMinutes),之後會自動刪除 Blob。
  • 選擇在 deleteAfterMinutes 值到期的情況下,能夠在 Blob 上傳時保留 Blob。

必要條件

Azure IoT Edge 裝置:

雲端資源:

Azure 中的標準層 IoT 中樞

deviceToCloudUpload 和 deviceAutoDelete 屬性

使用模組所需的屬性來設定 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties 您可以在部署期間設定所需的屬性,或稍後編輯模組對應項 (而不需要重新部署) 來變更所需的屬性。 我們建議檢查 的 「模組對應項」 reported configuration ,並確定 configurationValidation 正確傳播值。

deviceToCloudUploadProperties

這個設定的名稱為 deviceToCloudUploadProperties。 如果您使用IoT Edge 模擬器,請將這些屬性的值設定為相關的環境變數,您可以在說明區段中找到這些屬性。

屬性 可能的值 說明
uploadOn True、False 預設設定為 false 。 如果您要開啟此功能,請將此欄位設定為 true

環境變數:deviceToCloudUploadProperties__uploadOn={false,true}
uploadOrder NewestFirst、OldestFirst 可讓您選擇將資料複製到 Azure 的順序。 預設設定為 OldestFirst 。 順序取決於 Blob 上次修改的時間。

環境變數:deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst}
cloudStorageConnectionString "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>"是 連接字串,可讓您指定要上傳數據的記憶體帳戶。 指定 Azure Storage Account NameAzure Storage Account KeyEnd point suffix。 新增上傳數據之 Azure 的適當 EndpointSuffix,其會因全域 Azure、Government Azure 和 Microsoft Azure Stack 而有所不同。

您可以選擇在這裡指定 Azure 儲存體 SAS 連接字串。 但是,您在此屬性到期時,必須更新此屬性。 SAS 許可權可能包括建立容器的存取權,以及建立、寫入和新增 Blob 的存取權。

環境變數: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"}
可讓您指定需要上傳至 Azure 的容器名稱。 此課程模組可讓您同時指定來源和目標容器名稱。 如果您未指定目標容器名稱,則會自動指定容器名稱, 例如 <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>。 您可以建立目標容器名稱的範本字串,請查看可能的值資料行。
* %h -> IoT 中樞名稱 (3-50 個字元)。
* %d -> IoT Edge 裝置識別碼 (1 到 129 個字元)。
* %m -> 模組名稱 (1 到 64 個字元)。
* %c -> 來源容器名稱 (3 到 63 個字元)。

容器名稱的大小上限為63個字元。 如果容器的大小超過 63 個字元,系統會自動將名稱指派給目標容器名稱。 在此情況下,名稱會在每個區段中修剪為 15 個字元(IoTHubName、IotEdgeDeviceID、ModuleName、SourceContainerName)。

環境變數:deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName>
deleteAfterUpload True、False 預設設定為 false 。 當設定為 true時,數據會在上傳至雲端記憶體完成時自動刪除。

注意:如果您使用附加 Blob,此設定會在成功上傳之後,從本機記憶體刪除附加 Blob,而任何未來的附加區塊作業都會失敗。 請小心使用此設定。 如果您的應用程式不常附加作業或不支援連續附加作業,請勿啟用此設定

環境變數: deviceToCloudUploadProperties__deleteAfterUpload={false,true}

deviceAutoDeleteProperties

這個設定的名稱為 deviceAutoDeleteProperties。 如果您使用IoT Edge 模擬器,請將這些屬性的值設定為相關的環境變數,您可以在說明區段中找到這些屬性。

屬性 可能的值 說明
deleteOn True、False 預設設定為 false 。 如果您要開啟此功能,請將此欄位設定為 true

環境變數:deviceAutoDeleteProperties__deleteOn={false,true}
deleteAfterMinutes <minutes> 指定時間 (以分鐘計)。 當此值過期時,模組會自動從本機記憶體刪除您的 Blob。 目前允許的最大分鐘數為 35791。

環境變數:deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading True、False 根據預設,它會設定為 true,並在到期時保留 Blob 上傳至雲端記憶體 deleteAfterMinutes 。 您可以將它設定為 false ,並在到期后立即 deleteAfterMinutes 刪除資料。 注意:若要讓此屬性能夠運作 uploadOn,應該設定為 true。

注意:如果您使用附加 Blob,此設定會在值到期時,從本機記憶體刪除附加 Blob,而任何未來的附加區塊作業都失敗。 請確定到期值足以容納應用程式所執行之附加作業的預期頻率。

環境變數:deviceAutoDeleteProperties__retainWhileUploading={false,true}

使用SMB共用作為本機記憶體

當您在 Windows 主機上部署本課程模組的 Windows 容器時,您可以提供 SMB 共用作為本機記憶體路徑。

請確定SMB共用和IoT裝置位於相互信任的網域中。

您可以執行 New-SmbGlobalMapping PowerShell 命令,在執行 Windows 的 IoT 裝置本機對應 SMB 共用。

組態步驟:

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

例如:

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

此命令會使用認證向遠端SMB伺服器進行驗證。 然後,將遠端共享路徑對應至 G:驅動器號(可以是任何其他可用的驅動器號)。 IoT 裝置現在具有對應至 G: 磁碟驅動器上路徑的數據磁碟區。

請確定IoT裝置中的使用者可以讀取/寫入遠端SMB共用。

針對您的部署,的值 <storage mount> 可以是 G:/ContainerData:C:/BlobRoot

授與Linux上容器用戶的目錄存取權

如果您在 Linux 容器的建立選項中使用磁碟區掛接 作為記憶體,則不需要執行任何額外的步驟,但如果您使用 系結掛接,則需要這些步驟才能正確執行服務。

遵循最低許可權原則,限制使用者執行工作所需的最低許可權,此課程模組包含使用者(名稱:absie、ID:11000)和使用者群組(名稱:absie、ID:11000)。 如果容器以 root 身分啟動(預設使用者為 root),則我們的服務會以低許可權的 absie 使用者身分啟動。

此行為會使主機路徑的許可權設定對服務正常運作至關重要,否則服務會當機並出現拒絕存取錯誤。 容器用戶必須存取目錄系結中使用的路徑(例如:absie 11000)。 您可以在主機上執行下列命令,以授與容器使用者對目錄的存取權:

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

例如:

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

如果您需要以 absie 以外的使用者身分執行服務,您可以在部署指令清單中的 「User」 屬性下,在 createOptions 中指定自定義使用者識別碼。 在這種情況下,請使用預設或根群組識別碼 0

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

現在,將目錄的存取權授與容器使用者

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

設定記錄檔

默認輸出記錄層級為 『Info』。 若要變更輸出記錄層級,請在部署指令清單中設定 LogLevel 此模組的環境變數。 LogLevel 接受下列值:

  • 重大
  • 錯誤
  • 警告
  • 資訊
  • 偵錯

如需設定模塊記錄檔的資訊,請參閱這些 生產最佳做法

連線至您的 Blob 儲存體模組

您可以使用帳戶名稱和您為模組設定的帳戶金鑰來存取 IoT Edge 裝置上的 Blob 儲存體。

指定 IoT Edge 裝置作為您提出的任何儲存體要求所用的 Blob 端點。 您可以使用IoT Edge裝置資訊和您設定的帳戶名稱,為明確的記憶體端點建立 連接字串。

  • 針對部署在相同裝置 (「IoT Edge 模組上的 Azure Blob 儲存體」執行所在) 上的模組,Blob 端點是:http://<module name>:11002/<account name>
  • 對於在不同裝置上執行的模組或應用程式,您必須為網路選擇正確的端點。 根據您的網路設定,選擇端點格式,讓來自外部模組或應用程式的資料流量可以連線到 IoT Edge 模組上執行 Azure Blob 儲存體的裝置。 此案例的 Blob 端點是下列其中一個:
    • http://<device IP >:11002/<account name>
    • http://<IoT Edge device hostname>:11002/<account name>
    • http://<fully qualified domain name>:11002/<account name>

重要

當您呼叫模組時,Azure IoT Edge 會區分大小寫,而 儲存體 SDK 也會預設為小寫。 雖然 Azure Marketplace 中的模組名稱是 AzureBlob 儲存體 onIoTEdge,但將名稱變更為小寫有助於確保您的 IoT Edge 模組上 Azure Blob 儲存體 連線不會中斷。

Azure Blob 儲存體 快速入門範例

Azure Blob 儲存體 檔包含數種語言的快速入門範例程序代碼。 您可以藉由變更 Blob 端點以連線到本機 Blob 記憶體模組,以執行這些範例來測試 IoT Edge 上的 Azure Blob 儲存體。

下列快速入門範例使用IoT Edge也支援的語言,因此您可以將它們部署為IoT Edge模組與 Blob 記憶體模組:

  • .NET
    • IoT Edge 模組 v1.4.0 和更早版本的 Azure Blob 儲存體 與 WindowsAzure.儲存體 9.3.3 SDK 和 v1.4.1 相容,也支援 Azure.儲存體。Blob 12.8.0 SDK。
  • Python
    • Python SDK V2.1 之前的版本有已知問題,其中模組不會傳回 Blob 建立時間。 由於這個問題,清單 Blob 之類的某些方法無法運作。 因應措施是,將 Blob 用戶端上的 API 版本明確設定為 『2017-04-17』。 範例: block_blob_service._X_MS_VERSION = '2017-04-17'
    • 附加 Blob 範例
  • Node.js
  • JS/HTML
  • Ruby
  • Go
  • PHP

使用 Azure 儲存體總管連線至本機存放區

您可以使用 Azure 儲存體 Explorer 連線到本機記憶體帳戶。

  1. 下載並安裝 Azure 儲存體總管

  2. 最新版的 Azure 儲存體 Explorer 使用 Blob 記憶體模組不支援的較新記憶體 API 版本。 啟動 Azure Storage Explorer。 選取 [ 編輯] 功能表。 確認已選取 [ 目標 Azure Stack Hub API ]。 如果不是,請選取 [目標 Azure Stack Hub]。 重新啟動 Azure 儲存體 Explorer,變更才會生效。 需要此設定,才能與您的IoT Edge環境相容。

  3. 使用 連接字串 連線 Azure 儲存體

  4. 提供連接字串:DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;

  5. 完成連線的步驟。

  6. 在本機記憶體帳戶內建立容器

  7. 開始將檔案上傳為區塊 Blob 或附加 Blob。

    注意

    此模組不支援分頁 Blob。

  8. 您也可以選擇在 [儲存體總管] 中連線 Azure 儲存體帳戶。 此設定提供本機記憶體帳戶和 Azure 記憶體帳戶的單一檢視

支援的儲存體作業

IoT Edge 上的 Blob 儲存體模組會使用 Azure 儲存體 SDK,而且與區塊 Blob 端點的 Azure 儲存體 API 2017-04-17 版本一致。

由於 Azure Blob 儲存體並不支援 IoT Edge 上的所有 Azure Blob 儲存體作業,因此本節會列出每個作業的狀態。

客戶​​

支援:

  • 列出容器

不支援:

  • 取得和設定 Blob 服務屬性
  • 預檢 Blob 要求
  • 取得 Blob 服務統計資料
  • 取得帳戶資訊

容器

支援:

  • 建立和刪除容器
  • 取得容器屬性和元數據
  • 列出 Blob
  • 取得和設定容器 ACL
  • 設定容器中繼資料

不支援:

  • 租用容器

Blob

支援:

  • 放置、取得和刪除 Blob
  • 取得和設定 Blob 屬性
  • 取得和設定 Blob 元數據

不支援:

  • 租用 Blob
  • 快照集 Blob
  • 複製和中止複製 Blob
  • 取消刪除 Blob
  • 設定 Blob 層

區塊 Blob

支援:

  • Put 區塊
  • 放置和取得封鎖清單

不支援:

  • 從 URL 放置區塊

附加 Blob

支援:

  • Append 區塊

不支援:

  • 從 URL 附加區塊

IoT Edge 整合上的事件方格

警告

IoT Edge 上的 Event Grid 整合處於預覽狀態

IoT Edge 模組上的此 Azure Blob 儲存體 現在提供與 IoT Edge 上的事件方格整合。 如需此整合的詳細資訊,請參閱 部署模組、發佈事件和驗證事件傳遞的教學課程。

版本資訊

以下是 本課程模組 Docker 中樞 的版本資訊。 您可以在特定版本的版本資訊中找到與錯誤修正和補救相關的詳細資訊。

下一步

瞭解如何在IoT Edge上部署 Azure Blob 儲存體

隨時掌握IoT Edge版本資訊頁面上 Azure Blob 儲存體的最新更新和公告