將 IoT Edge 模組上的 Azure Blob 儲存體部署至您的裝置
適用於: IoT Edge 1.5 IoT Edge 1.4
重要
IoT Edge 1.5 LTS 是 支援的版本。 自 2024 年 11 月 12 日起,IoT Edge 1.4 LTS 已結束生命週期。 如果您是舊版,請參閱更新 IoT Edge。
有數種方式可將模組部署到 IoT Edge 裝置,而且這些方式皆適用於 IoT Edge 模組上的 Azure Blob 儲存體。 兩個最簡單的方法是使用 Azure 入口網站或 Visual Studio Code 範本。
必要條件
Azure 訂用帳戶中的 IoT 中樞。
一個 IoT Edge 裝置。
如果您沒有設定 IoT Edge 裝置,則可以在 Azure 虛擬機器中建立一個裝置。 請遵循其中一篇快速入門文章中的步驟來建立虛擬 Linux 裝置或建立虛擬 Windows 裝置。
Visual Studio Code \(英文\)。
Azure IoT Edge 延伸模組。 「適用於 Visual Studio Code 的 Azure IoT Edge 工具」延伸模組目前處於維護模式。
Azure IoT 中樞延伸模組 (若從 Visual Studio Code 部署)。
從 Azure 入口網站進行部署
Azure 入口網站會引導您建立部署資訊清單,並且將部署推送到 IoT Edge 裝置。
選取您的裝置
- 登入 Azure 入口網站,然後瀏覽至 IoT 中樞。
- 在 [裝置管理] 功能表下,選取 [裝置]。
- 從清單中選取目標 IoT Edge 裝置。
- 選取 [設定模組]。
設定部署資訊清單
部署資訊清單為 JSON 文件,說明應部署的模組、資料如何在模組之間流動,以及想要的模組對應項需要的屬性。 Azure 入口網站有一個精靈,可以引導您建立部署資訊清單。 有組織成索引標籤的三個步驟:[模組]、[路由] 和 [檢閱 + 建立]。
新增課程模組
在頁面的 [IoT Edge 模組] 區段中,選取 [新增] 下拉式清單,然後選取 [IoT Edge 模組] 來顯示 [新增 IoT Edge 模組] 頁面。
在 [設定] 索引標籤上,提供模組的名稱,然後指定容器映像 URI:
- IoT Edge 模組名稱:
azureblobstorageoniotedge
- 映像 URI:
mcr.microsoft.com/azure-blob-storage:latest
請不要在指定 [模組設定]、[容器建立選項] 和 [模組對應項設定] 索引標籤中的值之前選取 [新增],如此程序所述。
重要
當您呼叫模組時,Azure IoT Edge 會區分大小寫,且儲存體 SDK 也會預設為小寫。 將名稱變更為小寫有助於確保您 IoT Edge 模組上的 Azure Blob 儲存體連線不中斷。
- IoT Edge 模組名稱:
開啟 [容器建立選項] 索引標籤。
複製下列 JSON 並貼到方塊中,以提供儲存體帳戶資訊和裝置上儲存體的掛接。
{ "Env":[ "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>", "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>" ], "HostConfig":{ "Binds":[ "<mount>" ], "PortBindings":{ "11002/tcp":[{"HostPort":"11002"}] } } }
使用下列資訊來更新您複製到 [容器建立選項] 的 JSON:
將
<local storage account name>
取代為您可以記住的名稱。 帳戶名稱應該有 3 到 24 個字元,包含小寫字母和數字。 無空格。使用 64 位元組 base64 金鑰取代
<local storage account key>
。 您可以 GeneratePlus 之類的工具產生金鑰。 您可以使用這些認證,從其他模組存取 Blob 儲存體。根據您的容器作業系統取代
<mount>
。 提供磁碟區的名稱,或您想要 Blob 模組儲存其資料的 IoT Edge 裝置現有目錄絕對路徑。 儲存體掛接會對應模組中您提供要設定位置的裝置。
針對 Linux 容器,格式為<您的儲存體路徑或磁碟區>:/blobroot。 例如:
- 使用磁碟區掛接:
my-volume:/blobroot
- 使用繫結掛接:
/srv/containerdata:/blobroot
。 請務必遵循步驟,將目錄存取權授與容器使用者
重要
請勿變更儲存體掛接值的後半段,這指向 IoT Edge 模組上 Blob 儲存體中的特定位置。 儲存體掛接的結尾對於 Linux 容器必須一律為 :/blobroot。
IoT Edge 不會移除連結至模組容器的磁碟區。 此行為是根據設計,因為其允許跨容器執行個體保存資料,例如升級案例。 不過,如果這些磁碟區未使用,可能會導致磁碟空間耗盡和後續的系統錯誤。 如果您在案例中使用 Docker 磁碟區,建議您使用 Docker 磁碟區剪除和 Docker 磁碟區 rm 等 Docker 工具,以移除未使用的磁碟區,特別是針對生產案例。
在 [模組對應項設定] 索引標籤上,複製下列 JSON 並將其貼到方塊中。
{ "deviceAutoDeleteProperties": { "deleteOn": <true, false>, "deleteAfterMinutes": <timeToLiveInMinutes>, "retainWhileUploading": <true,false> }, "deviceToCloudUploadProperties": { "uploadOn": <true, false>, "uploadOrder": "<NewestFirst, OldestFirst>", "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>; EndpointSuffix=<your end point suffix>", "storageContainersForUpload": { "<source container name1>": { "target": "<your-target-container-name>" } }, "deleteAfterUpload": <true,false> } }
使用適當值設定每個屬性,如預留位置所示。 如果您使用 IoT Edge 模擬器,請將值設定為這些屬性的相關環境變數,如 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties 所述。
提示
target
容器的名稱具有命名限制,例如不支援使用$
前置詞。 若要查看所有限制,請檢視容器名稱。注意
如果您的容器目標在
storageContainersForUpload
內未命名或為 Null,則會將預設名稱指派給目標。 如果您想要停止上傳至容器,則必須從storageContainersForUpload
將其完全移除。 如需詳細資訊,請參閱在 IoT Edge 上使用 Azure Blob 儲存體在邊緣儲存資料的deviceToCloudUploadProperties
一節。如需在部署您的模組之後設定 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties 的詳細資訊,請參閱編輯模組對應項。 如需所需屬性的詳細資訊,請參閱定義或更新所需屬性。
選取 [新增]。
選取 [下一步:路由] 繼續前往路由區段。
指定路由
保留預設路由,然後選取 [下一步:檢閱 + 建立] 以繼續前往檢閱區段。
檢閱部署
檢閱區段會顯示 JSON 部署資訊清單,該清單會根據您在前兩個區段中的選項而建立。 還有兩個已宣告的模組尚未新增:$edgeAgent 和 $edgeHub。 這兩個模組組成 IoT Edge 執行階段,在每個部署中都是必要的預設值。
檢閱您的部署資訊,然後選取 [建立]。
確認您的部署
建立部署之後,您會返回您 IoT 中樞的 [裝置] 頁面。
- 選取您使用部署設定為目標的 IoT Edge 裝置,以開啟其詳細資料。
- 在裝置詳細資料中,確認 Blob 儲存體模組列為 [指定於部署中] 和 [由裝置回報]。
模組在裝置上啟動然後向 IoT 中樞回報可能需要一點時間。 重新整理頁面來查看更新狀態。
從 Visual Studio Code 部署
Azure IoT Edge 提供 Visual Studio Code 中的範本協助您開發解決方案。 下列步驟可用來使用 Blob 儲存體模組建立新的 IoT Edge 解決方案,並設定部署資訊清單。
重要
Azure IoT Edge Visual Studio Code 延伸模組目前處於維護模式。
選取 [檢視] >[命令調色盤] 。
在 [命令選擇區] 中,輸入並執行命令 Azure IoT Edge: New IoT Edge solution。
依照命令選擇區中的提示建立解決方案。
欄位 值 選取資料夾 選擇開發機器上可供 Visual Studio Code 建立解決方案檔案的位置。 提供解決方案名稱 輸入解決方案的描述性名稱或接受預設值 EdgeSolution。 選取模組範本 選擇 [現有模組 (輸入完整映像 URL)]。 提供模組名稱 為您的模組輸入全部小寫名稱,例如 azureblobstorageoniotedge。
針對 IoT Edge 模組上的 Azure Blob 儲存體,請務必使用小寫名稱。 IoT Edge 在參考模組時會區分大小寫,且儲存體 SDK 預設為小寫。提供模組的 Docker 映像 提供映像 URI:mcr.microsoft.com/azure-blob-storage:latest Visual Studio Code 會採用您提供的資訊、建立 IoT Edge 解決方案,然後將其載入至新的視窗。 解決方案範本會建立部署資訊清單範本,其中包含 Blob 儲存體模組映像,但是您需要設定模組的建立選項。
在新的解決方案工作區中開啟 [deployment.template.json],並找出 [模組] 區段。 進行下列設定變更:
複製下列程式碼,並在 Blob 儲存體模組的
createOptions
欄位貼上:```json "Env":[ "LOCAL_STORAGE_ACCOUNT_NAME=<local storage account name>", "LOCAL_STORAGE_ACCOUNT_KEY=<local storage account key>" ], "HostConfig":{ "Binds": ["<mount>"], "PortBindings":{ "11002/tcp": [{"HostPort":"11002"}] } }
將
<local storage account name>
取代為您可以記住的名稱。 帳戶名稱應該有 3 到 24 個字元,包含小寫字母和數字。 無空格。使用 64 位元組 base64 金鑰取代
<local storage account key>
。 您可以 GeneratePlus 之類的工具產生金鑰。 您可以使用這些認證,從其他模組存取 Blob 儲存體。根據您的容器作業系統取代
<mount>
。 提供磁碟區的名稱,或您想要 Blob 模組儲存其資料的 IoT Edge 裝置目錄絕對路徑。 儲存體掛接會對應模組中您提供要設定位置的裝置。針對 Linux 容器,格式為<您的儲存體路徑或磁碟區>:/blobroot。 例如:
- 使用磁碟區掛接:
my-volume:/blobroot
- 使用繫結掛接:
/srv/containerdata:/blobroot
。 請務必遵循步驟,將目錄存取權授與容器使用者
重要
請勿變更儲存體掛接值的後半段,這指向 IoT Edge 模組上 Blob 儲存體中的特定位置。 儲存體掛接的結尾對於 Linux 容器必須一律為 :/blobroot。
IoT Edge 不會移除連結至模組容器的磁碟區。 此行為是根據設計,因為其允許跨容器執行個體保存資料,例如升級案例。 不過,如果這些磁碟區未使用,可能會導致磁碟空間耗盡和後續的系統錯誤。 如果您在案例中使用 Docker 磁碟區,建議您使用 Docker 磁碟區剪除和 Docker 磁碟區 rm 等 Docker 工具,以移除未使用的磁碟區,特別是針對生產案例。
- 使用磁碟區掛接:
藉由將下列 JSON 新增至 deployment.template.json 檔案,針對您的模組設定 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties。 使用適當的值設定每個屬性,並儲存檔案。 如果您使用 IoT Edge 模擬器,請將值設定為這些屬性的相關環境變數,您可以在 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties 的說明區段中找到說明
"<your azureblobstorageoniotedge module name>":{ "properties.desired": { "deviceAutoDeleteProperties": { "deleteOn": <true, false>, "deleteAfterMinutes": <timeToLiveInMinutes>, "retainWhileUploading": <true, false> }, "deviceToCloudUploadProperties": { "uploadOn": <true, false>, "uploadOrder": "<NewestFirst, OldestFirst>", "cloudStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>", "storageContainersForUpload": { "<source container name1>": { "target": "<target container name1>" } }, "deleteAfterUpload": <true, false> } } }
如需在部署您的模組之後設定 deviceToCloudUploadProperties 和 deviceAutoDeleteProperties 的詳細資訊,請參閱編輯模組對應項。 如需容器建立選項、重新啟動原則和所需狀態的詳細資訊,請參閱 EdgeAgent 所需屬性。
儲存 deployment.template.json 檔案。
以滑鼠右鍵按一下 deployment.template.json,然後選取 [產生 IoT Edge 部署資訊清單]。
Visual Studio Code 會採用您在 deployment.template.json 中提供的資訊,並使用這些資訊建立新的部署資訊清單檔。 隨即在解決方案工作區新 config 資料夾中建立部署資訊清單。 擁有該檔案之後,您可以遵循使用 Azure CLI 2.0 部署 Azure IoT Edge 模組中的步驟。
部署多個模組執行個體
如果您想要在 IoT Edge 模組上部署多個 Azure Blob 儲存體的執行個體,您必須提供不同的儲存體路徑,並且變更模組繫結的 HostPort
值。 Blob 儲存體模組一律會公開容器的 11002 連接埠,但是您可以宣告哪個連接埠繫結至主機。
編輯 [容器建立選項] (在 Azure 入口網站中) 或 [createOptions] 欄位 (在 Visual Studio Code 中的 deployment.template.json 檔案中) 以變更 HostPort
值:
"PortBindings":{
"11002/tcp": [{"HostPort":"<port number>"}]
}
您連接到其他 Blob 儲存體模組時,請變更端點來指向已更新的主機連接埠。
設定 Proxy 支援
如果您的組織使用 Proxy 伺服器,您必須設定 edgeAgent 和 edgeHub 執行階段模組的 Proxy 支援。 此程序牽涉到兩項工作:
- 在裝置上設定執行階段精靈和 IoT Edge 代理程式。
- 為部署資訊清單 JSON 檔案中的模組設定 HTTPS_PROXY 環境變數。
設定 IoT Edge 裝置以透過 Proxy 伺服器進行通訊中提供此程序的說明。
此外,Blob 儲存體模組也需要資訊清單部署檔案中的 HTTPS_PROXY 設定。 您可以直接編輯部署資訊清單檔,或使用 Azure 入口網站。
瀏覽至 Azure 入口網站中的 IoT 中樞,然後選取 [裝置管理] 功能表下的 [裝置]
選取具有要設定模組的裝置。
選取 [設定模組]。
在頁面的 [IoT Edge 模組] 區段中,選取 Blob 儲存體模組。
在 [更新 IoT Edge 模組] 頁面上,選取 [環境變數] 索引標籤。
針對 [名稱] 新增
HTTPS_PROXY
,針對 [值] 新增您的 Proxy URL。選取 [更新],然後選取 [檢閱 + 建立]。
請參閱 Proxy 會新增至部署資訊清單中的模組,然後選取 [建立]。
從裝置詳細資料頁面選取模組,然後在 [IoT Edge 模組詳細資料] 頁面的下半部選取 [環境變數] 索引標籤,以確認設定。
下一步
深入了解 IoT Edge 上的 Azure Blob 儲存體。
如需部署資訊清單的功能,以及如何建立此類清單的詳細資訊,請參閱了解如何使用、設定以及重複使用 IoT Edge 模組 (英文)。