Partilhar via


Armazenar dados na periferia com o Armazenamento de Blobs do Azure no IoT Edge

Aplica-se a:Marca de verificação do IoT Edge 1.5 IoT Edge 1.5 Marca de verificação do IoT Edge 1.4 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.

O Armazenamento de Blobs do Azure no IoT Edge fornece uma solução de armazenamento de blob de bloco e de acréscimo na borda. Um módulo de armazenamento de blob em seu dispositivo IoT Edge se comporta como um serviço de blob do Azure, exceto que os blobs são armazenados localmente em seu dispositivo IoT Edge. Você pode acessar seus blobs usando os mesmos métodos do SDK de armazenamento do Azure ou chamadas de API de blob aos quais já está acostumado. Este artigo explica os conceitos relacionados ao Armazenamento de Blob do Azure no contêiner do IoT Edge que executa um serviço de blob em seu dispositivo IoT Edge.

Este módulo é útil em cenários:

  • Onde 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 quaisquer outros dados não estruturados.
  • Quando os dispositivos estão localizados em um local com conectividade limitada.
  • Quando você deseja processar os dados localmente de forma eficiente 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ê deseja reduzir os custos de largura de banda e evitar a transferência de terabytes de dados para a nuvem. Você pode processar os dados localmente e enviar apenas os dados processados para a nuvem.

Este módulo vem com recursos deviceToCloudUpload e deviceAutoDelete .

O recurso deviceToCloudUpload é uma funcionalidade configurável. Esta função carrega automaticamente os dados do seu armazenamento de blob local para o Azure com suporte intermitente de conectividade à Internet. Permite-lhe:

  • Ligue/desative o recurso deviceToCloudUpload.
  • Escolha a ordem em que os dados são copiados para o Azure, como NewestFirst ou OldestFirst.
  • Especifique a conta de Armazenamento do Azure para a qual você deseja que seus dados sejam carregados.
  • Especifique os contêineres que você deseja carregar no Azure. Este módulo permite especificar nomes de contêineres de origem e de destino.
  • Escolha a capacidade de excluir os blobs imediatamente, depois que o upload para o armazenamento em nuvem estiver concluído
  • Faça upload de blob completo (usando Put Blob operação) e upload de nível de bloco (usando Put Block, Put Block List e Append Block operações).

Este módulo usa o upload de nível de bloco, quando seu blob consiste em blocos. Aqui estão alguns dos cenários comuns:

  • Seu aplicativo atualiza alguns blocos de um blob de bloco carregado anteriormente ou acrescenta novos blocos a um blob de acréscimo, este módulo carrega apenas os blocos atualizados e não o blob inteiro.
  • O módulo está carregando blob e a conexão com a internet desaparece, quando a conectividade está de volta novamente ele carrega apenas os blocos restantes e não todo o blob.

Se um encerramento inesperado do processo (como falha de energia) acontecer durante um upload de blob, todos os blocos devidos para o upload serão carregados novamente assim que o módulo voltar a ficar online.

deviceAutoDelete é uma funcionalidade configurável. Esta função exclui automaticamente seus blobs do armazenamento local quando a duração especificada (medida em minutos) expira. Permite-lhe:

  • Ligue/desative o recurso deviceAutoDelete.
  • Especifique o tempo em minutos (deleteAfterMinutes) após o qual os blobs são excluídos automaticamente.
  • Escolha a capacidade de manter o blob enquanto ele está carregando se o valor deleteAfterMinutes expirar.

Pré-requisitos

Um dispositivo Azure IoT Edge:

  • Você pode usar sua máquina de desenvolvimento ou uma máquina virtual como um dispositivo IoT Edge seguindo as etapas no início rápido para dispositivos Linux ou Windows.

  • Consulte Sistemas suportados do Azure IoT Edge para obter uma lista de sistemas operativos e arquiteturas suportados. O módulo Armazenamento de Blobs do Azure no IoT Edge dá suporte às seguintes arquiteturas:

    • Windows AMD64
    • Linux AMD64
    • Linux ARM32
    • Linux ARM64

Recursos da cloud:

Um Hub IoT no escalão standard 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 editando o módulo gêmeo sem a necessidade de reimplantação. Recomendamos verificar o "Módulo Twin" para reported configuration e configurationValidation certificar-se de que os valores são 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.

Property Valores Possíveis Explicação
carregarEm TRUE, false Definido como false por padrão. Se quiser ativar o recurso, defina este campo como true.

Variável de ambiente: deviceToCloudUploadProperties__uploadOn={false,true}
carregarEncomendar NewestFirst, OldestFirst Permite que você escolha a ordem na qual os dados são copiados para o Azure. Definido 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 deseja que seus dados sejam carregados. Especificar Azure Storage Account Name, Azure Storage Account Key, End point suffix. Adicione o EndpointSuffix apropriado do Azure onde os dados são carregados, ele varia para Global Azure, Government Azure e Microsoft Azure Stack.

Você pode optar por especificar a cadeia de conexão SAS do Armazenamento do Azure aqui. Mas você tem que atualizar essa propriedade quando ela expirar. As permissões SAS podem incluir criar acesso para contêineres e criar, gravar e adicionar 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 especificar os nomes de contêiner que deseja carregar no Azure. Este módulo permite especificar nomes de contêineres de origem e de destino. Se você não especificar o nome do contêiner de destino, será automaticamente atribuído um nome de contêiner, como <IoTHubName>-<IotEdgeDeviceID>-<ModuleName>-<SourceContainerName>. Você pode criar cadeias de caracteres de modelo para o nome do contêiner de destino, confira a coluna de valores possíveis.
* %h -> Nome do Hub IoT (3-50 caracteres).
* %d -> ID do dispositivo IoT Edge (1 a 129 caracteres).
* %m -> Nome do módulo (1 a 64 caracteres).
* %c -> Nome do contêiner de origem (3 a 63 caracteres).

O tamanho máximo do nome do contêiner é de 63 caracteres. O nome é 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>
excluirAfterUpload TRUE, false Definido como false por padrão. Quando definido como true, os dados são excluídos automaticamente quando o carregamento para o armazenamento em nuvem é concluído.

CUIDADO: Se você estiver usando blobs de acréscimo, essa configuração excluirá blobs de acréscimo do armazenamento local após um carregamento bem-sucedido, e quaisquer operações futuras de Bloco de Acréscimo a esses blobs falharão. Use essa configuração com cuidado. Não habilite essa configuração se seu aplicativo fizer operações de acréscimo pouco frequentes ou não oferecer suporte a operações de acréscimo contínuo

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.

Property Valores Possíveis Explicação
deleteOn TRUE, false Definido como false por padrão. Se quiser ativar o recurso, defina este campo como true.

Variável de ambiente: deviceAutoDeleteProperties__deleteOn={false,true}
excluirAfterMinutes <minutes> Especifique o tempo em minutos. O módulo exclui automaticamente seus blobs do armazenamento local quando esse valor expira. Os minutos máximos permitidos atualmente são 35791.

Variável de ambiente: deviceAutoDeleteProperties__ deleteAfterMinutes=<minutes>
retainWhileUploading TRUE, false Por padrão, ele é definido como true, e mantém o blob enquanto ele é carregado para o armazenamento em nuvem se deleteAfterMinutes expirar. Você pode defini-lo como false e ele exclui os dados assim que deleteAfterMinutes expirar. Nota: Para que esta propriedade funcione uploadOn deve ser definido como true.

CUIDADO: Se você usar blobs de acréscimo, essa configuração excluirá blobs de acréscimo do armazenamento local quando o valor expirar, e quaisquer operações futuras de Bloco de Acréscimo a esses blobs falharão. Verifique se o valor de expiração é grande o suficiente para a frequência esperada das operações de acréscimo realizadas pelo seu aplicativo.

Variável de ambiente: deviceAutoDeleteProperties__retainWhileUploading={false,true}

Usando o compartilhamento SMB como seu armazenamento local

Você pode fornecer o compartilhamento SMB como seu caminho de armazenamento local, ao implantar o contêiner do Windows deste módulo no host Windows.

Verifique se o compartilhamento SMB e o dispositivo IoT estão em domínios mutuamente confiáveis.

Você pode executar New-SmbGlobalMapping o comando PowerShell para mapear o compartilhamento SMB localmente no dispositivo 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 de compartilhamento remoto para G: letra da unidade (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 IoT pode ler/gravar no compartilhamento SMB remoto.

Para sua implantação, o valor de <storage mount> pode ser G:/ContainerData:C:/BlobRoot.

Concedendo acesso ao diretório ao usuário do contêiner no Linux

Se você usar a montagem de volume para armazenamento em suas opções de criação para contêineres Linux, então você não precisa fazer nenhuma etapa extra, mas se você usar a montagem de ligação, essas etapas são necessárias para executar o serviço corretamente.

Seguindo o princípio do menor privilégio para limitar os direitos de acesso dos usuários às permissões mínimas de que precisam para executar seu trabalho, este 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 root (usuário padrão é root), nosso serviço será iniciado como o usuário absie de baixo privilégio.

Esse comportamento torna a configuração das permissões no caminho do host vincula crucial para que o serviço funcione corretamente, caso contrário, o serviço falha com erros de acesso negado. O caminho usado na vinculação de diretório precisa ser acessível pelo usuário do contêiner (exemplo: absie 11000). Você pode conceder ao usuário do contêiner acesso ao diretório 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 um usuário diferente de absie, poderá especificar seu ID de usuário personalizado em createOptions na propriedade "User" em seu manifesto de implantação. Nesse caso, use o ID 0de grupo padrão ou raiz.

"createOptions": {
  "User": "<custom user ID>:0"
}

Agora, conceda ao usuário do contêiner acesso ao diretório

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 LogLevel variável de ambiente 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, consulte estas práticas recomendadas de produção.

Conecte-se ao módulo de armazenamento de blob

Você pode usar o nome da conta e a chave da conta que configurou para o módulo para acessar o armazenamento de blob no dispositivo IoT Edge.

Especifique seu dispositivo IoT Edge como o ponto de extremidade de blob para todas as solicitações de armazenamento que você fizer a ele. Você pode Criar uma cadeia de conexão para um ponto de extremidade de armazenamento explícito usando as informações do dispositivo IoT Edge e o nome da conta que você configurou.

  • Para módulos implantados no mesmo dispositivo em que o módulo Armazenamento de Blob do Azure no IoT Edge está sendo executado, o ponto de extremidade de blob é: http://<module name>:11002/<account name>.
  • Para módulos ou aplicativos executados em um dispositivo diferente, você tem que escolher o ponto de extremidade certo para sua rede. Dependendo da configuração da rede, escolha um formato de ponto de extremidade para que o tráfego de dados do seu módulo ou aplicativo externo possa chegar ao dispositivo que executa o módulo Armazenamento de Blobs do Azure no IoT Edge. O ponto de extremidade de blob para este cenário é um de:
    • 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 para módulos, e o SDK de Armazenamento também usa como padrão minúsculas. Embora o nome do módulo no Azure Marketplace seja AzureBlobStorageonIoTEdge, alterar o nome para minúsculas ajuda a garantir que suas conexões com o módulo Armazenamento de Blobs do Azure no 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ários idiomas. Você pode executar esses exemplos para testar o Armazenamento de Blobs do Azure no IoT Edge alterando o ponto de extremidade de blob para se conectar ao seu módulo de armazenamento de blob local.

Os exemplos de início rápido a seguir usam linguagens que também são suportadas pelo IoT Edge, para que você possa implantá-las como módulos do IoT Edge junto com o módulo de armazenamento de blob:

  • .NET
    • O módulo Armazenamento de Blobs do Azure no IoT Edge v1.4.0 e versões anteriores são compatíveis com o SDK do WindowsAzure.Storage 9.3.3 e v1.4.1 também oferece suporte ao SDK do Azure.Storage.Blobs 12.8.0.
  • Python
    • As versões anteriores à V2.1 do Python SDK têm um problema conhecido em que o módulo não retorna o tempo de criação do blob. Devido a esse problema, alguns métodos, como blobs de lista, não funcionam. Como solução 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'
    • Acrescentar amostra de blob
  • Node.js
  • JS/HTML
  • Ruby
  • Ir
  • PHP

Conecte-se ao seu armazenamento local com o Gerenciador de Armazenamento do Azure

Você pode usar o Gerenciador de Armazenamento do Azure para se conectar à sua conta de armazenamento local.

  1. Transferir e instalar o Explorador de Armazenamento do Azure

  2. A versão mais recente do Azure Storage Explorer usa uma versão mais recente da API de armazenamento não suportada pelo módulo de armazenamento de blob. Inicie o Explorador de Armazenamento do Azure. Selecione o menu Editar. Verifique se as APIs do Hub de Pilha do Azure de destino estão selecionadas. Se não estiver, selecione Target Azure Stack Hub. Reinicie o Gerenciador de Armazenamento do Azure para que a alteração entre em vigor. Essa configuração é necessária para compatibilidade com seu ambiente IoT Edge.

  3. Conectar-se ao Armazenamento do Azure usando uma cadeia de conexão

  4. 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>;

  5. Siga as etapas para se conectar.

  6. Criar contêiner dentro de sua conta de armazenamento local

  7. Comece a carregar arquivos como Bloquear blobs ou Acrescentar blobs.

    Nota

    Este módulo não suporta blobs de página.

  8. Você também pode optar por conectar suas contas de armazenamento do Azure no Gerenciador de Armazenamento. Essa configuração oferece uma exibição única para sua conta de armazenamento local e conta de armazenamento do Azure

Operações de armazenamento suportadas

Os módulos de armazenamento de Blob no IoT Edge usam os SDKs de Armazenamento do Azure e são consistentes com a versão 2017-04-17 da API de Armazenamento do Azure para pontos de extremidade de blob de bloco.

Como nem todas as operações do Armazenamento de Blobs do Azure são suportadas pelo Armazenamento de Blobs do Azure no IoT Edge, esta seção lista o status de cada uma.

Account

Suportado:

  • Listar contentores

Sem suporte:

  • Obter e definir propriedades de serviço de blob
  • Solicitação de blob de comprovação
  • Obter estatísticas de serviço de blob
  • Obter informações da conta

Contentores

Suportado:

  • Criar e excluir contêiner
  • Obter propriedades e metadados do contêiner
  • Listar blobs
  • Obter e definir a ACL do contêiner
  • Definir metadados de contêiner

Sem suporte:

  • Contentor de leasing

Blobs

Suportado:

  • Colocar, obter e excluir blob
  • Obter e definir propriedades de blob
  • Obter e definir metadados de blob

Sem suporte:

  • Blob de locação
  • Blob de instantâneo
  • Copiar e anular blob de cópia
  • Undelete blob
  • Definir camada de blob

Blobs de blocos

Suportado:

  • Colocar bloco
  • Coloque e obtenha lista de bloqueio

Sem suporte:

  • Colocar bloco do URL

Blobs de acréscimo

Suportado:

  • Bloco Acrescentar

Sem suporte:

  • Anexar bloco do URL

Grade de eventos na integração do IoT Edge

Atenção

A integração com o Event Grid no IoT Edge está em pré-visualização

Este módulo de Armazenamento de Blobs do Azure no IoT Edge agora fornece integração com a Grade de Eventos no IoT Edge. Para obter informações detalhadas sobre essa integração, consulte o tutorial para implantar os módulos, publicar eventos e verificar a entrega de eventos.

Release Notes (Notas de Lançamento)

Aqui estão as notas de 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 de versão de uma versão específica.

Próximos passos

Saiba como implantar o Armazenamento de Blob do Azure no IoT Edge

Mantenha-se atualizado com atualizações e anúncios recentes na página de notas de versão do Armazenamento de Blobs do Azure no IoT Edge.