本文介绍Azure IoT Edge 上的Blob 存储配置。

当然,Blob容器也可以部署在本地Docker中或K8S中,IoT Edge 不是唯一的选择。


通过在IoT Edge上部署Blob存储,可以将原来直接上传到云端Storage的代码进行复用,文件可以存储在边缘上,然后利用blob容器的同步功能,自动将文件同步到云端。

本文部署过程参照:

​https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-deploy-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757">https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-deploy-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757​

本文配置步骤参照:

​https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-store-data-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757">https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-store-data-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757​


重点步骤:

在IoT Edge 的配置页面,添加新的容器:

在“模块设置”选项卡上,提供模块的名称,然后指定容器映像 URI :

示例:


  • IoT Edge 模块名称:​​azureblobstorageoniotedge(此处可以更换其他的名称)​
  • 映像 URI:​​mcr.microsoft.com/azure-blob-storage:latest​

边缘设备上的存储-Azure IoT Edge 上的Blob存储_ip地址


在容器创建选项中配置如下:

边缘设备上的存储-Azure IoT Edge 上的Blob存储_ip地址_02

{
"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"}]
}
}
}

本例子中,我们的配置如下:

Account_Name 是自定义的值,不能有空格

Account_Key 由工具 https://generate.plus/en/base64 随机生成的一个64 字节 base64 密钥

HostConfig中的Binds 才用了 绑定装载的方式,其中/srv/containerdata是IoT Edge上的路径,:/blobroot是固定写法,不能变更。

需要对/srv/containerdata 配置权限,在IoT Edge上执行(仅针对linux系统):

sudo chown -R 11000:11000 /srv/containerdata

sudo chmod -R 700 /srv/containerdata

如果使用其他目录,则需要将命令中的目录替换成真实的目录。

{
"Env": [
"LOCAL_STORAGE_ACCOUNT_NAME=localstorage",
"LOCAL_STORAGE_ACCOUNT_KEY=Qog98fdtT0HH+aWaUpN5vA=="
],
"HostConfig": {
"Binds": [
"/srv/containerdata:/blobroot"
],
"PortBindings": {
"11002/tcp": [
{
"HostPort": "11002"
}
]
}
}
}

可以在Module Twin中配置 自动同步和自动删除功能,我们今天的例子中不配置这些内容。

待容器部署完成后,则可以按照如下方式在本地使用 Azure Storage Explorer 进行连接了。

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

按照本例的配置,则连接字符串为:

DefaultEndpointsProtocol=http;BlobEndpoint=http://192.168.73.6:11002/localstorage;AccountName=localstorage;AccountKey=Qog98fdtT0HH+aWaUpN5vA==

其中AccountKey是由工具 https://generate.plus/en/base64 随机生成的一个64 字节 base64 密钥。

其中192.168.73.6 是我本地IoT Edge的Ip地址,当然也可以使用hostname的方式。



在Azure Storage Explorer中进行配置:

边缘设备上的存储-Azure IoT Edge 上的Blob存储_microsoft_03


输入连接字符串,就可以访问本地的blob存储了:


边缘设备上的存储-Azure IoT Edge 上的Blob存储_microsoft_04


使用代码的方式访问IoT Edge中的blob,则需要在运行代码的位置参照如下链接方式:



  • 对于部署在设备上的模块,如果该设备上运行 IoT Edge 上的 Azure Blob 存储模块,则 Blob 终结点为 ​​http://<module name>:11002/<account name>​​。
  • 对于在其他设备上运行的模块或应用程序:

    • ​http://<device IP >:11002/<account name>​
    • ​http://<IoT Edge device hostname>:11002/<account name>​
    • ​http://<fully qualified domain name>:11002/<account name>​



在代码中使用本地Blob存储,有些功能是受限制的,比如:


  • 租用 blob
  • 获取 blob 快照
  • 复制和中止复制 blob
  • 撤销删除 blob
  • 设置 blob 层

具体需参考:

​https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-store-data-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757#supported-storage-operations">https://docs.microsoft.com/zh-cn/azure/iot-edge/how-to-store-data-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757#supported-storage-operations​


本文演示视频: