Conceder aos módulos do Azure IoT Edge acesso ao armazenamento local de um dispositivo
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.
Os módulos IoT Edge podem usar armazenamento no próprio dispositivo IoT Edge host para maior confiabilidade, especialmente quando operam offline.
Configurar módulos do sistema para usar armazenamento persistente
Por padrão, os módulos do sistema IoT Edge, o agente IoT Edge e o hub IoT Edge, armazenam o estado no sistema de arquivos efêmero de sua instância de contêiner. Esse estado é perdido quando a instância do contêiner é reciclada, por exemplo, quando a versão da imagem do módulo ou createOptions é atualizada.
Para cenários de produção, use um local de armazenamento persistente no sistema de arquivos host para armazenar o estado do módulo do sistema. Isso melhora a robustez da solução e as garantias de entrega de mensagens na nuvem.
Para configurar módulos do sistema para usar armazenamento persistente:
Para o hub IoT Edge e o agente IoT Edge, adicione uma variável de ambiente chamada StorageFolder que aponte para um diretório no módulo.
Para o hub IoT Edge e o agente IoT Edge, adicione ligações para conectar um diretório local na máquina host a um diretório no módulo. Por exemplo:
Substitua
<HostStoragePath>
e<ModuleStoragePath>
pelo caminho de armazenamento do host e do módulo. Ambos os valores devem ser um caminho absoluto e<HostStoragePath>
devem existir.
Você pode configurar o armazenamento local diretamente no manifesto de implantação. Por exemplo, se você quiser mapear os seguintes caminhos de armazenamento:
Módulo | Caminho de armazenamento do host | Caminho de armazenamento do módulo |
---|---|---|
edgeAgente | /srv/edgeAgent | /tmp/edgeAgent |
edgeHub | /srv/edgeHub | /tmp/edgeHub |
Seu manifesto de implantação seria semelhante ao seguinte:
"systemModules": {
"edgeAgent": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeAgent"
}
},
"settings": {
"image": "mcr.microsoft.com/azureiotedge-agent:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeAgent:/tmp/edgeAgent\"]}}"
},
"type": "docker"
},
"edgeHub": {
"env": {
"StorageFolder": {
"value": "/tmp/edgeHub"
}
},
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-hub:1.5",
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
},
"status": "running",
"type": "docker"
}
}
Nota
Se você estiver usando uma instalação de snap, certifique-se de escolher um caminho de armazenamento de host que seja acessível aos snaps. Por exemplo, $HOME/snap/azure-iot-edge/current/modules/
.
Gerenciamento automático de permissões do sistema host
Na versão 1.4 e mais recente, não há necessidade de definir manualmente a propriedade ou as permissões para o armazenamento do host que dá suporte ao StorageFolder
. As permissões e a propriedade são gerenciadas automaticamente pelos módulos do sistema durante a inicialização.
Nota
O gerenciamento automático de permissões de armazenamento vinculado ao host só se aplica aos módulos do sistema, ao agente IoT Edge e ao hub de Borda. Para módulos personalizados, o gerenciamento manual de permissões e a propriedade do armazenamento de host vinculado é necessário se o contêiner do módulo personalizado não estiver sendo executado como root
usuário.
Vincular o armazenamento do módulo ao armazenamento do dispositivo para módulos personalizados
Se o módulo personalizado exigir acesso ao armazenamento persistente no sistema de arquivos host, use as opções de criação do módulo para vincular uma pasta de armazenamento no contêiner do módulo a uma pasta na máquina host. Por exemplo:
{
"HostConfig": {
"Mounts": [
{
"Target": "<ModuleStoragePath>",
"Source": "<HostStoragePath>",
"Type": "bind",
"ReadOnly": false
}
]
}
}
Substitua <HostStoragePath>
e <ModuleStoragePath>
pelo caminho de armazenamento do host e do módulo, ambos os valores devem ser um caminho absoluto. Consulte a especificação de montagem do mecanismo do Docker para obter detalhes da opção.
Permissões do sistema host
Verifique se o perfil de usuário que seu módulo está usando tem as permissões necessárias de leitura, gravação e execução para o diretório do sistema host. Por padrão, os contêineres são executados como root
um usuário que já tem as permissões necessárias. Mas o Dockerfile do módulo pode especificar o uso de um usuário não-root, caso em que as permissões de armazenamento do host devem ser configuradas manualmente.
Há várias maneiras de gerenciar permissões de diretório em sistemas Linux, incluindo usar chown
para alterar o proprietário do diretório e, em seguida chmod
, para alterar as permissões. Por exemplo, para permitir o acesso de armazenamento do host a um módulo executado como ID de usuário não-root 1000, use os seguintes comandos:
sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>
Dados criptografados no armazenamento do módulo
Quando os módulos invocam a API de carga de trabalho do daemon IoT Edge para criptografar dados, a chave de criptografia é derivada usando o ID do módulo e o ID de geração do módulo. Um ID de geração é usado para proteger segredos se um módulo for removido da implantação e, em seguida, outro módulo com o mesmo ID de módulo for implantado posteriormente no mesmo dispositivo. Você pode exibir a ID de geração de um módulo usando o comando az iot hub module-identity show da CLI do Azure.
Se quiser partilhar ficheiros entre módulos entre gerações, estes não devem conter quaisquer segredos ou não serão desencriptados.
Próximos passos
Para obter um exemplo adicional de acesso ao armazenamento de host a partir de um módulo, consulte Armazenar dados na borda com o Armazenamento de Blob do Azure no IoT Edge.