有多種方法可以將模塊部署到IoT Edge設(shè)備,并且所有這些方法都適用于IoT Edge上的Azure Blob存儲模塊。兩種最簡單的方法是使用Azure門戶或Visual Studio Code模板。
先決條件
·Azure訂閱中的IoT中心。
·IoT Edge設(shè)備。
如果未設(shè)置IoT Edge設(shè)備,可在Azure虛擬機中創(chuàng)建一個。按照創(chuàng)建虛擬Linux設(shè)備或創(chuàng)建虛擬Windows設(shè)備快速入門文章(其中一篇)中的步驟進行操作。
·Visual Studio Code和Azure IoT Tools(如果從Visual Studio Code部署)。
從Azure門戶部署
Azure門戶引導你創(chuàng)建部署清單并將部署推送到IoT Edge設(shè)備。
選擇設(shè)備
1.登錄Azure門戶,導航到IoT中心。
2.從菜單中選擇“IoT Edge”。
3.在設(shè)備列表中單擊目標設(shè)備的ID。
4.選擇“設(shè)置模塊”。
配置部署清單
部署清單是一個JSON文檔,其中描述了要部署的模塊、數(shù)據(jù)在模塊間的流動方式以及模塊孿生的所需屬性。Azure門戶提供了一個引導你完成創(chuàng)建部署清單的向?qū)?。該向?qū)⑷齻€步驟整理成多個選項卡:“模塊”、“路由”和“查看+創(chuàng)建”。
添加模塊
1.在頁面的“IoT Edge模塊”部分,單擊“添加”下拉列表并選擇“IoT Edge模塊”,顯示“添加IoT Edge模塊”頁面。
2.在“模塊設(shè)置”選項卡上,提供模塊的名稱,然后指定容器映像URI:
示例:
·IoT Edge模塊名稱:azureblobstorageoniotedge
·映像URI:mcr.microsoft.com/azure-blob-storage:latest
如本程序所述,在“模塊設(shè)置”、“容器創(chuàng)建選項”和“模塊孿生設(shè)置”選項卡上指定值之前,請勿選擇“添加”。
重要
調(diào)用模塊時,Azure IoT Edge區(qū)分大小寫,存儲SDK也默認為小寫。雖然在Azure市場中此模塊的名稱為AzureBlobStorageonIoTEdge,但將名稱更改為小寫有助于確保與IoT Edge上的Azure Blob存儲模塊建立的連接不會中斷。
3.打開“容器創(chuàng)建選項”選項卡。
將以下JSON復制并粘貼到框中,以便為設(shè)備上的存儲提供存儲帳戶信息和裝載。
JSON
{
"Env":[
"LOCAL_STORAGE_ACCOUNT_NAME=<your storage account name>",
"LOCAL_STORAGE_ACCOUNT_KEY=<your storage account key>"
],
"HostConfig":{
"Binds":[
"<storage mount>"
],
"PortBindings":{
"11002/tcp":[{"HostPort":"11002"}]
}
}
}
4.使用以下信息更新已復制到容器創(chuàng)建選項中的JSON:
·請將<your storage account name>替換為容易記住的名稱。帳戶名長度應為3到24個字符,并帶有小寫字母和數(shù)字。不含空格。
·將<your storage account key>;替換為64字節(jié)base64密鑰。你可以使用GeneratePlus等工具生成密鑰。你將使用這些憑據(jù)從其他模塊訪問blob存儲。
·根據(jù)容器操作系統(tǒng)替換<storage mount>。提供blob模塊將在其中存儲其數(shù)據(jù)的IoT Edge設(shè)備上卷的名稱或指向現(xiàn)有目錄的絕對路徑。存儲裝載將你在設(shè)備上提供的位置映射到模塊中設(shè)置的位置。
對于Linux容器,格式為<your storage path or volume>:/blobroot。例如:
使用卷裝載:my-volume:/blobroot
使用綁定裝載:/srv/containerdata:/blobroot。確保按步驟為容器用戶授予目錄訪問權(quán)限
對于Windows容器,格式為<your storage path or volume>:C:/BlobRoot。例如:
使用卷裝載:my-volume:C:/BlobRoot。
使用綁定裝載:C:/ContainerData:C:/BlobRoot。
可以映射SMB網(wǎng)絡(luò)位置,而不使用本地驅(qū)動器。有關(guān)詳細信息,請參閱使用SMB共享作為本地存儲
重要
請勿更改存儲裝載值的后半部分,該部分指向IoT Edge模塊上Blob存儲中的特定位置。對于Linux容器,存儲裝載必須始終以“:/blobroot”結(jié)尾;對于Windows容器,必須以“:C:/BlobRoot”結(jié)尾。
5.在“模塊孿生設(shè)置”選項卡上,復制以下JSON并將其粘貼到框中。
使用適當?shù)闹蹬渲妹總€屬性,如占位符所示。如果使用IoT Edge模擬器,請按照deviceToCloudUploadProperties和deviceAutoDeleteProperties中所述,將這些屬性的值設(shè)置為相關(guān)環(huán)境變量。
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":"<target container name1>"
}
},
"deleteAfterUpload":<true,false>
}
}
有關(guān)在部署模塊后配置deviceToCloudUploadProperties和deviceAutoDeleteProperties的信息,請參閱編輯模塊孿生。若要詳細了解所需屬性,請參閱定義或更新所需屬性。
6.選擇“添加”。
7.在完成時選擇“下一步:路由”繼續(xù)轉(zhuǎn)到路由部分。
指定路由
保留默認路由并選擇“下一步:查看+創(chuàng)建”繼續(xù)轉(zhuǎn)到查看部分。
評審部署
評審部分介紹了根據(jù)上述兩部分中的選擇所創(chuàng)建的JSON部署清單。另外還有兩個模塊已聲明但卻未添加,它們是:$edgeAgent和$edgeHub。這兩個模塊構(gòu)成IoT Edge運行時,且是每個部署中所需的默認設(shè)置。
查看部署信息,然后選擇“創(chuàng)建”。
驗證部署
創(chuàng)建部署后,返回到IoT中心的“IoT Edge”頁。
1.選擇用作部署目標的IoT Edge設(shè)備,以打開其詳細信息。
2.在設(shè)備詳細信息,檢查Blob存儲模塊是否列出為“在部署中指定”和“由設(shè)備報告”。
可能需要等待一段時間,該模塊才會在設(shè)備上啟動并向IoT中心發(fā)回報告。刷新頁面以查看更新的狀態(tài)。
從Visual Studio Code部署
Azure IoT Edge在Visual Studio Code中提供模板,以幫助你開發(fā)邊緣解決方案。使用以下步驟創(chuàng)建帶有Blob存儲模塊的新IoT Edge解決方案,并配置部署清單。
1.選擇“查看”>“命令面板”。
2.在“命令面板”中,輸入并運行Azure IoT Edge:New IoT Edge solution命令。
按命令面板中的提示創(chuàng)建解決方案。
Visual Studio Code采用你提供的信息,創(chuàng)建一個IoT Edge解決方案,然后在新窗口中加載它。解決方案模板創(chuàng)建包含blob存儲模塊映像的部署清單模板,但需要配置模塊的創(chuàng)建選項。
3.在新的解決方案工作區(qū)中打開deployment.template.json,然后找到“模塊”部分。進行以下配置更改:
a.刪除SimulatedTemperatureSensor模塊,因為此部署不需要該模塊。
b.將以下代碼復制并粘貼到createOptions字段中:
JSON
"Env":[
"LOCAL_STORAGE_ACCOUNT_NAME=<your storage account name>",
"LOCAL_STORAGE_ACCOUNT_KEY=<your storage account key>"
],
"HostConfig":{
"Binds":["<storage mount>"],
"PortBindings":{
"11002/tcp":[{"HostPort":"11002"}]
}
}
4.請將<your storage account name>替換為容易記住的名稱。帳戶名長度應為3到24個字符,并帶有小寫字母和數(shù)字。不含空格。
5.將<your storage account key>替換為64字節(jié)base64密鑰。你可以使用GeneratePlus等工具生成密鑰。你將使用這些憑據(jù)從其他模塊訪問blob存儲。
6.根據(jù)容器操作系統(tǒng)替換<storage mount>。提供卷的名稱或IoT Edge設(shè)備上希望blob模塊在其中存儲其數(shù)據(jù)的目錄絕對路徑。存儲裝載將你在設(shè)備上提供的位置映射到模塊中設(shè)置的位置。
·對于Linux容器,格式為<your storage path or volume>:/blobroot。例如:
使用卷裝載:my-volume:/blobroot
使用綁定裝載:/srv/containerdata:/blobroot。確保按步驟為容器用戶授予目錄訪問權(quán)限
·對于Windows容器,格式為<your storage path or volume>:C:/BlobRoot。例如:
使用卷裝載:my-volume:C:/BlobRoot。
使用綁定裝載:C:/ContainerData:C:/BlobRoot。
可以映射SMB網(wǎng)絡(luò)位置,而不是使用本地驅(qū)動器。有關(guān)詳細信息,請參閱使用SMB共享作為本地存儲。
重要
請勿更改存儲裝載值的后半部分,該部分指向IoT Edge模塊上Blob存儲中的特定位置。對于Linux容器,存儲裝載必須始終以“:/blobroot”結(jié)尾;對于Windows容器,必須以“:C:/BlobRoot”結(jié)尾。
7.通過將以下JSON添加到deployment.template.json文件,為模塊配置deviceToCloudUploadProperties和deviceAutoDeleteProperties。為每個屬性配置適當?shù)闹挡⒈4嫖募?。如果使用IoT Edge模擬器,請將這些屬性的值設(shè)置為相關(guān)環(huán)境變量,可以在deviceToCloudUploadProperties和deviceAutoDeleteProperties的說明部分中找到這些值
JSON
"<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>
}
}
}
有關(guān)在部署模塊后配置deviceToCloudUploadProperties和deviceAutoDeleteProperties的信息,請參閱編輯模塊孿生。若要詳細了解容器創(chuàng)建選項、重啟策略和所需狀態(tài),請參閱EdgeAgent所需屬性。
8.保存deployment.template.json文件。
9.右鍵單擊“deployment.template.json”并選擇“生成IoT Edge部署清單”。
10.Visual Studio Code會獲取你在deployment.template.json中提供的信息,并使用它來創(chuàng)建新的部署清單文件。在解決方案工作區(qū)中的新config文件夾中創(chuàng)建部署清單。獲得該文件后,可以按照從Visual Studio Code中部署Azure IoT Edge模塊或使用Azure CLI 2.0部署Azure IoT Edge模塊中的步驟進行操作。
部署多個模塊實例
若要在IoT Edge模塊上部署Azure Blob存儲的多個實例,需要提供不同的存儲路徑,并更改模塊綁定到的HostPort值。Blob存儲模塊始終在容器中公開端口11002,但你可以聲明它在主機上綁定到的端口。
編輯“容器創(chuàng)建選項”(在Azure門戶中)或createOptions字段(在Visual Studio Code的deployment.template.json文件中),更改HostPort值:
JSON
"PortBindings":{
"11002/tcp":[{"HostPort":"<port number>"}]
}
連接到其他blob存儲模塊時,請將終結(jié)點更改為指向更新的主機端口。
配置代理支持
如果組織使用代理服務器,則需要為edgeAgent和edgeHub運行時模塊配置代理支持。此過程涉及兩項任務:
·在設(shè)備上配置運行時守護程序和IoT Edge代理。
·為部署清單JSON文件中的模塊設(shè)置HTTPS_PROXY環(huán)境變量。
將IoT Edge設(shè)備配置為通過代理服務器進行通信中介紹了此過程。
此外,blob存儲模塊還需要清單部署文件中的HTTPS_PROXY設(shè)置??梢灾苯泳庉嫴渴鹎鍐挝募?,也可以使用Azure門戶。
1.在Azure門戶中導航到IoT中心,然后從左窗格菜單中選擇IoT Edge。
2.選擇要配置模塊的設(shè)備。
3.選擇“設(shè)置模塊”。
4.在此頁的“IoT Edge模塊”部分,選擇blob存儲模塊。
5.在“更新IoT Edge模塊”頁上,選擇“環(huán)境變量”選項卡。
6.添加HTTPS_PROXY作為“名稱”,添加代理URL作為“值”。
7.單擊“更新”,然后單擊“查看+創(chuàng)建”。
8.請注意,代理會添加到部署清單中的模塊,此時請選擇“創(chuàng)建”。
9.通過從設(shè)備詳細信息頁中選擇模塊來驗證設(shè)置,然后在“IoT Edge模塊詳細信息”頁的下半部分選擇“環(huán)境變量”選項卡。