本文介绍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-store-data-blob?view=iotedge-2020-11&WT.mc_id=AZ-MVP-5003757

 

重点步骤:

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

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

示例:

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

屏幕截图显示了“添加 IoT Edge 模块”页面的“模块设置”选项卡。

 

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

屏幕截图显示了“添加 IoT Edge 模块”页面的“容器创建选项”选项卡。

{
  "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中进行配置:
 
输入连接字符串,就可以访问本地的blob存储了:
 
 
使用代码的方式访问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 层
具体需参考:
 
本文演示视频: