Armazenar dados na borda com o Armazenamento de Blobs do Azure no IoT Edge
Aplica-se a: IoT Edge 1.5 IoT Edge 1.4
Importante
O IoT Edge 1.5 LTS e o IoT Edge 1.4 LTS são versões com suporte. O IoT Edge 1.4 LTS chegará ao fim da vida útil em 12 de novembro de 2024. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.
O Armazenamento de Blobs do Azure no IoT Edge fornece uma solução de armazenamento de blob de blocos e blob de acréscimo na borda. Um módulo do armazenamento de blobs no dispositivo do IoT Edge se comporta como um serviço de blobs do Azure, com a exceção de que os blobs são armazenados localmente no dispositivo do IoT Edge. É possível acessar os blobs usando os mesmos métodos do SDK do armazenamento do Azure ou as chamadas à API do blob que você já está acostumado. Este artigo explica os conceitos relacionados ao Armazenamento de Blobs do Azure no contêiner do IoT Edge que executa um serviço de blob no dispositivo do IoT Edge.
Esse módulo é útil nos seguintes cenários:
- Quando os dados precisam ser armazenados localmente até que possam ser processados ou transferidos para a nuvem. Esses dados podem ser vídeos, imagens, dados financeiros, dados hospitalares ou outros dados não estruturados.
- Quando os dispositivos estão em um local com conectividade limitada.
- Quando você quer processar com eficiência os dados localmente para obter acesso de baixa latência aos dados, de modo que você possa responder a emergências o mais rápido possível.
- Quando você quer reduzir os custos de largura de banda e evitar transferir terabytes de dados para a nuvem. Você pode processar os dados no local e enviar somente os dados processados para a nuvem.
Este módulo vem com os recursos deviceToCloudUpload e deviceAutoDelete.
O recurso deviceToCloudUpload é uma funcionalidade configurável. Essa função carrega automaticamente os dados do armazenamento de blob local para o Azure com suporte de conectividade à Internet intermitente. Ele permite:
- Ativar/desativar o recurso deviceToCloudUpload.
- Escolher a ordem na qual os dados serão copiados para o Azure, como NewestFirst ou OldestFirst.
- Especificar a conta de armazenamento do Azure para a qual você deseja que os dados sejam carregados.
- Especificar os contêineres que você deseja carregar no Azure. Esse módulo permite que você especifique nomes de contêiner de origem e de destino.
- Escolha a capacidade de excluir os blobs imediatamente, após a conclusão do carregamento para o armazenamento em nuvem
- Faça upload de blob completo (usando a operação
Put Blob
) e upload em nível de bloco (usando as operaçõesPut Block
,Put Block List
eAppend Block
).
Esse módulo usa o upload em nível de bloco quando o blob é composto de blocos. Confira alguns dos cenários comuns:
- Seu aplicativo atualiza alguns blocos de um blob de blocos carregado anteriormente ou anexa novos blocos a um blob de acréscimo. Esse módulo carrega apenas os blocos atualizados, não o blob inteiro.
- O módulo está carregando o blob e a conexão à Internet é perdida – quando a conectividade voltar, ele carregará apenas os blocos restantes e não o blob inteiro.
Se uma terminação de processo inesperada (como falha de energia) ocorrer durante um upload de blob, todos os blocos com upload pendente serão carregados novamente quando o módulo voltar a ficar online.
deviceAutoDelete é uma funcionalidade configurável. Essa função exclui automaticamente os blobs do armazenamento local quando a duração especificada (medida em minutos) expirar. Ele permite:
- Ativar/desativar o recurso deviceAutoDelete.
- Especifique o tempo em minutos (deleteAfterMinutes) após o qual os blobs são excluídos automaticamente.
- Escolher a capacidade de reter o blob enquanto ele estiver sendo carregado se o valor de deleteAfterMinutes expirar.
Pré-requisitos
Um dispositivo do Azure IoT Edge:
Você pode usar o computador de desenvolvimento ou uma máquina virtual como um dispositivo do IoT Edge seguindo as etapas no início rápido para os dispositivos Linux ou Windows.
Consulte Sistemas com suporte do Azure IoT Edge para obter uma lista de sistemas operacionais e arquiteturas com suporte. O Armazenamento de Blobs do Azure no módulo do IoT Edge dá suporte às seguintes arquiteturas:
- Windows AMD64
- Linux AMD64
- Linux ARM32
- Linux ARM64
Recursos de nuvem:
Um Hub IoT na camada padrão no Azure.
Propriedades deviceToCloudUpload e deviceAutoDelete
Use as propriedades desejadas do módulo para definir deviceToCloudUploadProperties e deviceAutoDeleteProperties. As propriedades desejadas podem ser definidas durante a implantação ou alteradas posteriormente ao editar o módulo gêmeo sem a necessidade de reimplantar. É recomendável verificar o "Módulo Gêmeo" para reported configuration
e configurationValidation
para garantir que os valores sejam propagados corretamente.
deviceToCloudUploadProperties
O nome dessa configuração é deviceToCloudUploadProperties
. Se você estiver usando o simulador do IoT Edge, defina os valores para as variáveis de ambiente relacionadas para essas propriedades, que você pode encontrar na seção de explicação.
Propriedade | Valores possíveis | Explicação |
---|---|---|
uploadOn | verdadeiro, falso | Defina como false por padrão. Se quiser ativar o recurso, defina este campo como true . Variável de ambiente: deviceToCloudUploadProperties__uploadOn={false,true} |
uploadOrder | NewestFirst, OldestFirst | Permite que você escolha a ordem na qual os dados serão copiados para o Azure. Defina como OldestFirst por padrão. A ordem é determinada pela hora da última modificação do blob. Variável de ambiente: deviceToCloudUploadProperties__uploadOrder={NewestFirst,OldestFirst} |
cloudStorageConnectionString | "DefaultEndpointsProtocol=https;AccountName=<your Azure Storage Account Name>;AccountKey=<your Azure Storage Account Key>;EndpointSuffix=<your end point suffix>" é uma cadeia de conexão que permite especificar a conta de armazenamento para a qual você deseja que os dados sejam carregados. Especifique Azure Storage Account Name , Azure Storage Account Key , End point suffix . Adicione o EndpointSuffix apropriado do Azure em que os dados são carregados, ele varia para o Azure Global, o Azure Governamental e o Microsoft Azure Stack. Você pode escolher especificar a cadeia de conexão SAS do Armazenamento do Azure aqui. Mas você precisa atualizar essa propriedade quando ela expirar. As permissões de SAS podem incluir a criação de acesso para contêineres e a criação, gravação e adição de acesso para blobs. Variável de ambiente: deviceToCloudUploadProperties__cloudStorageConnectionString=<connection string> |
|
storageContainersForUpload | "<source container name1>": {"target": "<target container name>"} ,"<source container name1>": {"target": "%h-%d-%m-%c"} , "<source container name1>": {"target": "%d-%c"} |
Permite que você especifique os nomes de contêiner que deseja carregar para o Azure. Esse módulo permite que você especifique nomes de contêiner de origem e de destino. Se você não especificar o nome do contêiner de destino, ele será atribuído automaticamente a um nome de contêiner, como <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName> . Você pode criar cadeias de caracteres de modelo para o nome de contêiner de destino. Confira a coluna de valores possíveis. * %h -> nome do Hub IoT (3 a 50 caracteres). * %d -> ID do dispositivo do IoT Edge (1 a 129 caracteres). * %m -> nome do módulo (1 a 64 caracteres). * %m -> nome do contêiner de origem (3 a 63 caracteres). O tamanho máximo do nome do contêiner é de 63 caracteres. O nome será atribuído automaticamente ao nome do contêiner de destino se o tamanho do contêiner exceder 63 caracteres. Nesse caso, o nome é cortado em cada seção (IoTHubName, IotEdgeDeviceID, ModuleName, SourceContainerName) para 15 caracteres. Variável de ambiente: deviceToCloudUploadProperties__storageContainersForUpload__<sourceName>__target=<targetName> |
deleteAfterUpload | verdadeiro, falso | Defina como false por padrão. Quando definidos como true , os dados são excluídos automaticamente quando o upload para o armazenamento em nuvem é concluído. CUIDADO: se você estiver usando blobs de acréscimo, esta configuração excluirá blobs de acréscimo do armazenamento local após um upload bem-sucedido, e quaisquer futuras operações de blocos de acréscimo para esses blobs falharão. Use esta configuração com cuidado. Não habilite esta configuração se o seu aplicativo fizer operações de acréscimo pouco frequentes ou não oferecer suporte a operações de acréscimo contínuas Variável de ambiente: deviceToCloudUploadProperties__deleteAfterUpload={false,true} . |
deviceAutoDeleteProperties
O nome dessa configuração é deviceAutoDeleteProperties
. Se você estiver usando o simulador do IoT Edge, defina os valores para as variáveis de ambiente relacionadas para essas propriedades, que você pode encontrar na seção de explicação.
Propriedade | Valores possíveis | Explicação |
---|---|---|
deleteOn | verdadeiro, falso | Defina como false por padrão. Se quiser ativar o recurso, defina este campo como true . Variável de ambiente: deviceAutoDeleteProperties__deleteOn={false,true} |
deleteAfterMinutes | <minutes> |
Especifique o tempo em minutos. O módulo exclui automaticamente seus blobs do armazenamento local quando esse valor expira. Os minutos máximos atuais permitidos são 35791. Variável de ambiente: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes> |
retainWhileUploading | verdadeiro, falso | Por padrão, ele é definido como true , e retém o blob enquanto ele está sendo carregado no armazenamento em nuvem, se deleteAfterMinutes expirar. Você pode defini-lo como false , e ele exclui os dados assim que deleteAfterMinutes expira. Observação: para que essa propriedade funcione, o uploadOn deve estar definido como true. CUIDADO: se você usar blobs de acréscimo, esta configuração excluirá blobs de acréscimo do armazenamento local quando o valor expirar, e quaisquer operações futuras de blocos de acréscimo para esses blobs falharão. Certifique-se de que o valor de expiração seja grande o suficiente para a frequência esperada de operações de acréscimo executadas pelo aplicativo. Variável de ambiente: deviceAutoDeleteProperties__retainWhileUploading={false,true} |
Usar o compartilhamento SMB como armazenamento local
Você pode fornecer o compartilhamento SMB como o caminho de armazenamento local ao implantar o contêiner do Windows desse módulo no host do Windows.
Verifique se o compartilhamento SMB e o dispositivo IoT estão em domínios mutuamente confiáveis.
Você pode executar o comando New-SmbGlobalMapping
do PowerShell para mapear o compartilhamento SMB localmente no dispositivo do IoT que executa o Windows.
As etapas de configuração:
$creds = Get-Credential
New-SmbGlobalMapping -RemotePath <remote SMB path> -Credential $creds -LocalPath <Any available drive letter>
Por exemplo:
$creds = Get-Credential
New-SmbGlobalMapping -RemotePath \\contosofileserver\share1 -Credential $creds -LocalPath G:
Este comando usa as credenciais para autenticar com o servidor SMB remoto. Em seguida, mapeie o caminho do compartilhamento remoto para a letra de unidade G: (pode ser qualquer outra letra de unidade disponível). O dispositivo IoT agora tem o volume de dados mapeado para um caminho na unidade G: .
Verifique se o usuário no dispositivo do IoT consegue ler/gravar no compartilhamento SMB remoto.
Para a implantação, o valor de <storage mount>
pode ser G:/ContainerData:C:/BlobRoot.
Conceder acesso ao diretório para o usuário de contêiner no Linux
Se você usar a montagem de volume para armazenamento em suas opções de criação para contêineres do Linux, não precisará executar nenhuma etapa extra, mas se você usar a montagem de associação, essas etapas serão necessárias para executar o serviço corretamente.
Seguindo o princípio de menor privilégio para limitar os direitos de acesso para os usuários a permissões mínimas necessárias para executar o trabalho, esse módulo inclui um usuário (nome: absie, ID: 11000) e um grupo de usuários (nome: absie, ID: 11000). Se o contêiner for iniciado como raiz (o usuário padrão é raiz), nosso serviço será iniciado como o usuário de baixo privilégio absie.
Este comportamento torna crucial a configuração das permissões no caminho do host para que o serviço funcione corretamente, caso contrário, o serviço falhará com erros de acesso negados. O caminho usado na associação de diretório precisa ser acessível pelo usuário do contêiner (exemplo: absie 11000). Você pode conceder acesso ao diretório para o usuário do contêiner executando estes comandos no host:
sudo chown -R 11000:11000 <blob-dir>
sudo chmod -R 700 <blob-dir>
Por exemplo:
sudo chown -R 11000:11000 /srv/containerdata
sudo chmod -R 700 /srv/containerdata
Se você precisar executar o serviço como outro usuário que não absie, poderá especificar a ID de usuário personalizada em createOptions na propriedade "User" no manifesto de implantação. Nesse caso, use a ID do grupo raiz ou padrão 0
.
"createOptions": {
"User": "<custom user ID>:0"
}
Agora, conceda acesso ao diretório para o usuário do contêiner
sudo chown -R <user ID>:<group ID> <blob-dir>
sudo chmod -R 700 <blob-dir>
Configurar arquivos de log
O nível de log de saída padrão é 'Info'. Para alterar o nível do log de saída, defina a variável de ambiente LogLevel
para este módulo no manifesto de implantação. LogLevel
aceita os seguintes valores:
- Crítico
- Erro
- Aviso
- Informações
- Depurar
Para obter informações sobre como configurar arquivos de log para seu módulo, confira essas práticas recomendadas de produção.
Conectar ao módulo do armazenamento de blobs
É possível usar o nome da conta e a chave de conta que você configurou para o módulo para acessar o armazenamento de blobs no seu dispositivo do IoT Edge.
Especifique o dispositivo do IoT Edge como ponto de extremidade do blob para quaisquer solicitações de armazenamento que você faz para esse dispositivo. É possível Criar uma cadeia de conexão para um ponto de extremidade explícito usando as informações do dispositivo do IoT Edge e do nome da conta que você configurou.
- Para módulos que são implantados no mesmo dispositivo em que o módulo do Azure Blob Storage no IoT Edge estiver em execução, o ponto de extremidade do blob é:
http://<module name>:11002/<account name>
. - Para módulos ou aplicativos em execução em um dispositivo diferente, você precisa escolher o ponto de extremidade certo para a rede. Dependendo da configuração de rede, escolha um formato de ponto de extremidade, de modo que o tráfego de dados do seu módulo ou aplicativo externo possa acessar o dispositivo que executa o Armazenamento de Blobs do Azure no módulo do IoT Edge. O ponto de extremidade de blob para este cenário é um dos seguintes:
http://<device IP >:11002/<account name>
http://<IoT Edge device hostname>:11002/<account name>
http://<fully qualified domain name>:11002/<account name>
Importante
O Azure IoT Edge diferencia maiúsculas de minúsculas quando você faz chamadas aos módulos e o SDK de Armazenamento também usa minúsculas por padrão. Alterar o nome para letras minúsculas ajuda a garantir que suas conexões com o Armazenamento de Blobs do Azure no módulo do IoT Edge não sejam interrompidas.
Exemplos de início rápido do Armazenamento de Blobs do Azure
A documentação do Armazenamento de Blobs do Azure inclui código de exemplo de início rápido em várias linguagens. É possível executar esses exemplos para testar o Armazenamento de Blobs do Azure no IoT Edge ao alterar o ponto de extremidade do blob para conectar-se ao módulo do armazenamento de blobs local.
Os seguintes exemplos de início rápido usam linguagens que também contam com suporte do IoT Edge, assim é possível implantá-los como módulos do IoT Edge juntamente com o módulo do armazenamento de blobs:
- .NET
- O Armazenamento de Blobs do Azure no módulo do IoT Edge v1.4.0 e anteriores é compatível com o SDK do WindowsAzure.Storage 9.3.3, e o v1.4.1 também dá suporte ao SDK do Azure.Storage.Blobs 12.8.0.
- Python
- As versões antes da V2.1 do SDK do Python têm um problema conhecido em que o módulo não retorna o horário de criação do blob. Devido a esse problema, alguns métodos como listar blobs não funcionam. Como alternativa, defina explicitamente a versão da API no cliente de blob como '2017-04-17'. Exemplo:
block_blob_service._X_MS_VERSION = '2017-04-17'
- Amostra de blob de acréscimo
- As versões antes da V2.1 do SDK do Python têm um problema conhecido em que o módulo não retorna o horário de criação do blob. Devido a esse problema, alguns métodos como listar blobs não funcionam. Como alternativa, defina explicitamente a versão da API no cliente de blob como '2017-04-17'. Exemplo:
- Node.js
- JS/HTML
- Ruby
- Go
- PHP
Conecte-se ao armazenamento local com o Gerenciador de Armazenamento do Azure
Você pode usar o Gerenciador de Armazenamento do Azure para conectar-se à conta de armazenamento local.
Baixar e instalar o Gerenciador de Armazenamento do Azure
A versão mais recente do Gerenciador de Armazenamento do Azure usa uma versão mais recente da API de armazenamento sem suporte do módulo de armazenamento de blobs. Inicie o Gerenciador de Armazenamento do Azure. Selecione o menu Editar. Verifique se as APIs do Azure Stack Hub de destino estão selecionadas. Se não estiverem, selecione o Azure Stack Hub de destino. Reinicie o Gerenciador de Armazenamento do Azure para que a alteração entre em vigor. Esta configuração é necessária para compatibilidade com seu ambiente do IoT Edge.
Conecte-se ao Armazenamento do Azure com uma cadeia de conexão
Forneça a cadeia de conexão
DefaultEndpointsProtocol=http;BlobEndpoint=http://<host device name>:11002/<your local account name>;AccountName=<your local account name>;AccountKey=<your local account key>;
Execute as etapas para se conectar.
Crie um contêiner dentro da conta de armazenamento local
Comece a carregar arquivos como blobs de blocos ou blobs de acréscimo.
Observação
Este módulo não oferece suporte a blobs de página.
Você também pode escolher conectar suas contas de armazenamento do Azure no Gerenciador de Armazenamento. Essa configuração fornece uma exibição única para a conta de armazenamento local e para a conta de armazenamento do Azure
Operações de armazenamento com suporte
Os módulos do armazenamento de blobs no IoT Edge usam os SDKs do Armazenamento do Azure e são consistentes com a versão 2017-04-17 da API de Armazenamento do Azure para pontos de extremidade do blob de blocos.
Como nem todas as operações do Armazenamento de Blobs do Azure têm suporte do Armazenamento de Blobs do Azure no IoT Edge, esta seção lista o status de cada um.
Conta
Com suporte:
- Listar contêineres
Sem suporte:
- Obter e definir propriedades do serviço Blob
- Solicitação de blob de simulação
- Obter estatísticas do serviço Blob
- Obter Informações da conta
Contêineres
Com suporte:
- Criar e excluir contêiner
- Obter Propriedades do Contêiner
- Listar blobs
- Obter e definir ACL do contêiner
- Definir Metadados do Contêiner
Sem suporte:
- Concessão de contêiner
Blobs
Com suporte:
- Colocar, obter e excluir blob
- Obter e definir propriedades do blob
- Obter e definir Metadados do Blob
Sem suporte:
- Concessão de blob
- Instantâneo do blob
- Copiar e cancelar cópia do blob
- Cancelar exclusão do blob
- Definir camada do blob
Blobs de bloco
Com suporte:
- Colocar bloco
- Colocar e obter a lista de bloqueio
Sem suporte:
- Colocar bloco pela URL
Blobs de acréscimo
Com suporte:
- Acrescentar bloco
Sem suporte:
- Acrescentar bloco da URL
Grade de Eventos na integração do IoT Edge
Cuidado
A integração com a Grade de Eventos no IoT Edge está em versão prévia
Este Armazenamento de Blobs do Azure no módulo do IoT Edge agora fornece integração com a Grade de Eventos no IoT Edge. Para obter informações detalhadas sobre essa integração, confira o tutorial para implantar os módulos, publicar eventos e verificar a entrega de eventos.
Notas de versão
Estas são notas sobre a versão no Docker Hub para este módulo. Talvez seja possível encontrar mais informações relacionadas a correções de bugs e correção nas notas sobre a versão de uma versão específica.
Próximas etapas
Saiba como Implantar o Armazenamento de Blobs do Azure no IoT Edge
Mantenha-se em dia com as atualizações recentes e o anúncio na página de notas sobre a versão do Armazenamento de Blobs do Azure no IoT Edge.