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