View a markdown version of this page

Exporte configurações para suporte Nuvem AWS destinos - AWS IoT Greengrass

Aviso de fim do suporte: em 7 de outubro de 2026, AWS interromperá o suporte para. AWS IoT Greengrass Version 1 Depois de 7 de outubro de 2026, você não poderá mais acessar os AWS IoT Greengrass V1 recursos. Para obter mais informações, visite Migrar de AWS IoT Greengrass Version 1.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exporte configurações para suporte Nuvem AWS destinos

User-defined As funções do Lambda são usadas StreamManagerClient no AWS IoT Greengrass Core SDK para interagir com o gerenciador de streams. Quando uma função do Lambda cria um fluxo ou atualiza um fluxo, ela passa um objeto MessageStreamDefinition que representa as propriedades do fluxo, incluindo a definição de exportação. O objeto ExportDefinition contém as configurações de exportação definidas para o fluxo. O gerenciador de fluxo usa essas configurações de exportação para determinar onde e como exportar o fluxo.

Diagrama do modelo de objeto do tipo de ExportDefinition propriedade.

É possível definir zero ou mais configurações de exportação em um fluxo, incluindo várias configurações de exportação para um único tipo de destino. Por exemplo, você pode exportar um stream para dois streams de dados do Kinesis e um bucket do Amazon S3.

Para tentativas de exportação malsucedidas, o gerenciador de fluxo tenta continuamente exportar dados para a Nuvem AWS em intervalos de até cinco minutos. Não há um limite máximo para o número de novas tentativas.

nota

O StreamManagerClient também fornece um destino alvo que você pode usar para exportar fluxos para um servidor HTTP. Este destino deve ser usado apenas para fins de teste. Ele não é estável e nem compatível para uso em ambientes de produção.

Você é responsável por manter esses Nuvem AWS recursos.

AWS IoT Analytics canais (descontinuados)

AWS IoT Analytics descontinuado

AWS IoT Analytics foi descontinuado em 15 de dezembro de 2025. As exportações do gerenciador de streams para AWS IoT Analytics canais não funcionam mais. Se você tiver streams configurados com destinos de IoTAnalyticsConfig exportação, remova-os para evitar tentativas contínuas de exportação fracassadas.

Para remover as configurações de AWS IoT Analytics exportação de um stream existente, atualize sua definição de stream para omitir a IoTAnalyticsConfig entrada. Como alternativa, exclua e recrie o fluxo sem a configuração de AWS IoT Analytics exportação.

Considere migrar para um dos outros destinos de exportação compatíveis, como Amazon Kinesis Data Streams ouObjetos do Amazon S3.

 

Amazon Kinesis Data Streams

O gerenciador de fluxos é compatível com exportações automáticas para o Amazon Kinesis Data Streams. O Kinesis Data Streams é comumente usado para agregar dados de alto volume e carregá-los em um data warehouse ou cluster de redução de mapas. Para obter mais informações, consulte O que é o Amazon Kinesis Data Streams? no Guia do desenvolvedor do Amazon Kinesis.

No AWS IoT Greengrass Core SDK, suas funções do Lambda usam o KinesisConfig para definir a configuração de exportação para esse tipo de destino. Para mais informações, consulte a referência do SDK para seu idioma de destino:

Requisitos

Esse destino de exportação tem os seguintes requisitos:

  • Os streams de destino no Kinesis Data Streams devem estar no mesmo grupo do Conta da AWS Região da AWS Greengrass.

  • O Função do grupo do Greengrass. deve conceder a permissão kinesis:PutRecords para os fluxos de dados de destino. Por exemplo:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:us-east-1:123456789012:stream/stream_1_name", "arn:aws:kinesis:us-east-1:123456789012:stream/stream_2_name" ] } ] }

    É possível conceder acesso granular ou condicional aos recursos, por exemplo, usando um esquema de nomeação * curinga. Para obter mais informações, consulte Adicionando e removendo políticas do IAM no Guia do usuário do IAM.

Exportação do Kinesis Data Streams

Para criar um fluxo que exporte para o Kinesis Data Streams, suas funções do Lambda criam um fluxo com uma definição de exportação que inclui um ou mais objetos KinesisConfig. Esse objeto define as configurações de exportação, como fluxo de dados, tamanho do lote, intervalo do lote e prioridade.

Quando suas funções do Lambda recebem dados de dispositivos, elas acrescentam mensagens que contêm um blob de dados ao fluxo de destino. Em seguida, o gerenciador de fluxo exporta os dados com base nas configurações de lote e na prioridade definidas nas configurações de exportação do fluxo.

O gerenciador de fluxo gera uma UUID exclusiva e aleatória como chave de partição para cada registro carregado no Amazon Kinesis.

 

AWS IoT SiteWise propriedades do ativo

O gerenciador de streams suporta exportações automáticas para AWS IoT SiteWise o. AWS IoT SiteWise permite coletar, organizar e analisar dados de equipamentos industriais em grande escala. Para obter mais informações, consulte O que é AWS IoT SiteWise? no Guia do AWS IoT SiteWise usuário.

No AWS IoT Greengrass Core SDK, suas funções do Lambda usam o IoTSiteWiseConfig para definir a configuração de exportação para esse tipo de destino. Para mais informações, consulte a referência do SDK para seu idioma de destino:

nota

AWS também fornece oConector IoT SiteWise, que é uma solução pré-criada que você pode usar com OPC-UA fontes.

Requisitos

Esse destino de exportação tem os seguintes requisitos:

  • As propriedades do ativo de destino em AWS IoT SiteWise devem estar no mesmo grupo Conta da AWS e Região da AWS pertencer ao grupo Greengrass.

    nota

    Para ver a lista de regiões que AWS IoT SiteWise oferecem suporte, consulte AWS IoT SiteWise endpoints e cotas na Referência AWS geral.

  • O Função do grupo do Greengrass. deve conceder a permissão iotsitewise:BatchPutAssetPropertyValue para as propriedades do ativo do destino. O exemplo de política a seguir usa a chave de condição iotsitewise:assetHierarchyPath para conceder acesso a um ativo raiz de destino e seus ativos secundários. É possível remover o Condition da política para conceder acesso a todos os seus ativos AWS IoT SiteWise , ou especificar ARNs para determinados ativos.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*", "Condition": { "StringLike": { "iotsitewise:assetHierarchyPath": [ "/root node asset ID", "/root node asset ID/*" ] } } } ] }

    É possível conceder acesso granular ou condicional aos recursos, por exemplo, usando um esquema de nomeação * curinga. Para obter mais informações, consulte Adicionando e removendo políticas do IAM no Guia do usuário do IAM.

    Para obter informações importantes sobre segurança, consulte a BatchPutAssetPropertyValue autorização no Guia AWS IoT SiteWise do usuário.

Exportando para AWS IoT SiteWise

Para criar um stream que exporte para AWS IoT SiteWise, suas funções do Lambda criam um stream com uma definição de exportação que inclui um ou mais IoTSiteWiseConfig objetos. Esse objeto define as configurações de exportação, como tamanho do lote, intervalo do lote e prioridade.

Quando suas funções do Lambda recebem dados de propriedades de ativos de dispositivos, elas anexam mensagens que contêm os dados ao fluxo de destino. As mensagens são JSON-serialized PutAssetPropertyValueEntry objetos que contêm valores de propriedade para uma ou mais propriedades do ativo. Para obter mais informações, consulte Anexar mensagem para destinos de exportação do AWS IoT SiteWise .

nota

Quando você envia dados para AWS IoT SiteWise, seus dados devem atender aos requisitos da BatchPutAssetPropertyValue ação. Para obter mais informações, consulte BatchPutAssetPropertyValue na Referência de APIs do AWS IoT SiteWise .

Em seguida, o gerenciador de fluxo exporta os dados com base nas configurações de lote e na prioridade definidas nas configurações de exportação do fluxo.

 

Você pode ajustar as configurações do gerenciador de fluxo e a lógica da função do Lambda para criar sua estratégia de exportação. Por exemplo:

  • Para exportações quase em tempo real, defina configurações baixas de tamanho de lote e intervalo e anexe os dados ao fluxo quando forem recebidos.

  • Para otimizar o agrupamento em lotes, mitigar as restrições de largura de banda ou minimizar os custos, suas funções do Lambda podem agrupar os pontos de dados de timestamp-quality-value (TQV) recebidos para uma única propriedade do ativo antes de anexar os dados ao fluxo. Uma estratégia é agrupar entradas para até 10 (dez) combinações diferentes de propriedade e ativo, ou aliases de propriedade, em uma mensagem, em vez de enviar mais de uma entrada para a mesma propriedade. Isso ajuda o gerenciador de fluxo a permanecer dentro das cotas do AWS IoT SiteWise.

 

Objetos do Amazon S3

O gerenciador de fluxo é compatível com exportações automáticas para o Amazon S3. É possível utilizar o Amazon S3 para armazenar e recuperar grandes volumes de dados. Para obter mais informações, consulte O que é o Amazon S3? no Guia do desenvolvedor do Amazon Simple Storage Service.

No AWS IoT Greengrass Core SDK, suas funções do Lambda usam o S3ExportTaskExecutorConfig para definir a configuração de exportação para esse tipo de destino. Para mais informações, consulte a referência do SDK para seu idioma de destino:

Requisitos

Esse destino de exportação tem os seguintes requisitos:

  • Os buckets do Amazon S3 de destino devem estar no mesmo grupo Conta da AWS do Greengrass.

  • Se a conteinerização padrão para o grupo do Greengrass for contêiner do Greengrass, você deverá definir o parâmetro STREAM_MANAGER_READ_ONLY_DIRS para usar um diretório de arquivos de entrada que esteja sob /tmp ou não faça parte do sistema de arquivos raiz.

  • Se uma função do Lambda em execução no modo de contêiner do Greengrass gravar arquivos de entrada no diretório de arquivos de entrada, você deverá criar um recurso de volume local para o diretório e montar o diretório no contêiner com permissões de gravação. Isso garante que os arquivos sejam gravados no sistema de arquivos raiz e sejam visíveis fora do contêiner. Para obter mais informações, consulte Acesso aos recursos locais com funções e conectores do Lambda.

  • O Função do grupo do Greengrass. deve conceder as permissões a seguir para os buckets de destino. Por exemplo:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::bucket-1-name/*", "arn:aws:s3:::bucket-2-name/*" ] } ] }

    É possível conceder acesso granular ou condicional aos recursos, por exemplo, usando um esquema de nomeação * curinga. Para obter mais informações, consulte Adicionando e removendo políticas do IAM no Guia do usuário do IAM.

Exportar para o Amazon S3

Para criar um fluxo que exporte para o Amazon S3, suas funções do Lambda usam o objeto S3ExportTaskExecutorConfig para configurar a política de exportação. A política define as configurações de exportação, como o limite e a prioridade de upload em várias partes. Para exportações do Amazon S3, o gerenciador de fluxo carrega dados que ele lê de arquivos locais no dispositivo principal. Para iniciar um upload, suas funções do Lambda anexam uma tarefa de exportação ao fluxo de destino. A tarefa de exportação contém informações sobre o arquivo de entrada e o objeto de destino do Amazon S3. O gerenciador de fluxo executa tarefas na sequência em que elas são anexadas ao fluxo.

nota

O balde alvo já deve existir em seu Conta da AWS. Se um objeto para a chave especificada não existir, o gerenciador de fluxo criará o objeto para você.

Esse fluxo de alto nível é mostrado no diagrama a seguir.

Diagrama do fluxo de trabalho do gerenciador de fluxo para exportações do Amazon S3.

O gerenciador de fluxo usa a propriedade de limite de upload de várias partes, a configuração do tamanho mínimo das partes e o tamanho do arquivo de entrada para determinar como fazer upload dos dados. O limite de upload de várias partes deve ser maior que o tamanho mínimo das partes. Se você quiser fazer upload de dados em paralelo, pode criar vários fluxos.

As chaves que especificam seus objetos do Amazon S3 de destino podem incluir DateTimeFormatter strings Java válidas em !{timestamp:value} espaços reservados. É possível usar esses espaços reservados de data e hora para particionar dados no Amazon S3 com base na hora em que os dados do arquivo de entrada foram carregados. Por exemplo, o nome da chave a seguir é resolvido para um valor como my-key/2020/12/31/data.txt.

my-key/!{timestamp:YYYY}/!{timestamp:MM}/!{timestamp:dd}/data.txt
nota

Se você quiser monitorar o status de exportação de um fluxo, primeiro crie um fluxo de status e, em seguida, configure o fluxo de exportação para usá-lo. Para obter mais informações, consulte Monitorar tarefas de exportação.

Gerenciar dados de entrada

Você pode criar códigos que os aplicativos de IoT usam para gerenciar o ciclo de vida dos dados de entrada. O exemplo de fluxo de trabalho a seguir mostra como você pode usar as funções do Lambda para gerenciar esses dados.

  1. Um processo local recebe dados de dispositivos ou periféricos e, em seguida, grava os dados em arquivos em um diretório no dispositivo principal. Esses são os arquivos de entrada para o gerenciador de fluxo.

    nota

    Para determinar se você deve configurar o acesso ao diretório de arquivos de entrada, consulte o parâmetro STREAM_MANAGER_READ_ONLY_DIRS.

    O processo no qual o gerenciador de fluxo é executado herda todas as permissões do sistema de arquivos da identidade de acesso padrão do grupo. O gerenciador de fluxo deve ter permissão para acessar os arquivos de entrada. Você pode usar o comando chmod(1) para alterar a permissão dos arquivos, se necessário.

  2. Uma função do Lambda verifica o diretório e anexa uma tarefa de exportação ao fluxo de destino quando um novo arquivo é criado. A tarefa é um JSON-serialized S3ExportTaskDefinition objeto que especifica a URL do arquivo de entrada, o bucket e a chave do Amazon S3 de destino e os metadados opcionais do usuário.

  3. O gerenciador de fluxo lê o arquivo de entrada e exporta os dados para o Amazon S3 na ordem das tarefas anexadas. O balde alvo já deve existir em seu Conta da AWS. Se um objeto para a chave especificada não existir, o gerenciador de fluxo criará o objeto para você.

  4. A função do Lambda lê mensagens de um fluxo de status para monitorar o status da exportação. Depois que as tarefas de exportação forem concluídas, a função do Lambda poderá excluir os arquivos de entrada correspondentes. Para obter mais informações, consulte Monitorar tarefas de exportação.

Monitorar tarefas de exportação

Você pode criar códigos que os aplicativos de IoT usam para monitorar o status das suas exportações do Amazon S3. Suas funções do Lambda devem criar um fluxo de status e, em seguida, configurar o fluxo de exportação para gravar atualizações de status no fluxo de status. Um único fluxo de status pode receber atualizações de status de vários fluxos que são exportados para o Amazon S3.

Primeiro, crie um fluxo para usar como fluxo de status. É possível configurar as políticas de tamanho e retenção do fluxo para controlar a vida útil das mensagens de status. Por exemplo:

  • Defina Persistence como Memory se você não quiser armazenar as mensagens de status.

  • Defina StrategyOnFull como OverwriteOldestData para que as novas mensagens de status não sejam perdidas.

Em seguida, crie ou atualize o fluxo de exportação para usar o fluxo de status. Especificamente, defina a propriedade de configuração de status da configuração de exportação S3ExportTaskExecutorConfig do fluxo. Isso faz com que o gerenciador de fluxo grave mensagens de status sobre as tarefas de exportação para o fluxo de status. No objeto StatusConfig, especifique o nome do fluxo de status e o nível de detalhe. Os valores com suporte a seguir variam do menos detalhado (ERROR) ao mais detalhado (TRACE). O padrão é INFO.

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

 

O exemplo de fluxo de trabalho a seguir mostra como as funções do Lambda podem usar um fluxo de status para monitorar o status de exportação.

  1. Conforme descrito no fluxo de trabalho anterior, uma função do Lambda anexa uma tarefa de exportação a um fluxo configurado para gravar mensagens de status sobre tarefas de exportação em um fluxo de status. A operação de append retorna um número de sequência que representa a ID da tarefa.

  2. Uma função do Lambda lê mensagens sequencialmente do fluxo de status e, em seguida, filtra as mensagens com base no nome do fluxo e na ID da tarefa ou com base em uma propriedade da tarefa de exportação do contexto da mensagem. Por exemplo, a função do Lambda pode filtrar pela URL do arquivo de entrada da tarefa de exportação, que é representada pelo objeto S3ExportTaskDefinition no contexto da mensagem.

    Os códigos de status a seguir indicam que uma tarefa de exportação atingiu um estado concluído:

    • Success. O upload foi concluído com êxito.

    • Failure. O gerenciador de fluxo encontrou um erro, por exemplo, o bucket especificado não existe. Depois de resolver o problema, você pode reanexar a tarefa de exportação ao fluxo.

    • Canceled. A tarefa foi interrompida porque a definição de fluxo ou exportação foi excluída ou a vida útil (TTL) da tarefa expirou.

    nota

    A tarefa também pode ter um status de InProgress ou Warning. O gerenciador de fluxo emite avisos quando um evento retorna um erro que não afeta a execução da tarefa. Por exemplo, uma falha na limpeza de um upload parcial interrompido retorna um aviso.

  3. Depois que as tarefas de exportação forem concluídas, a função do Lambda poderá excluir os arquivos de entrada correspondentes.

O exemplo a seguir mostra como uma função do Lambda pode ler e processar mensagens de status.

Python
import time from greengrasssdk.stream_manager import ( ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, StreamManagerClient, ) from greengrasssdk.stream_manager.util import Util client = StreamManagerClient() try: # Read the statuses from the export status stream is_file_uploaded_to_s3 = False while not is_file_uploaded_to_s3: try: messages_list = client.read_messages( "StatusStreamName", ReadMessagesOptions(min_message_count=1, read_timeout_millis=1000) ) for message in messages_list: # Deserialize the status message first. status_message = Util.deserialize_json_bytes_to_obj(message.payload, StatusMessage) # Check the status of the status message. If the status is "Success", # the file was successfully uploaded to S3. # If the status was either "Failure" or "Cancelled", the server was unable to upload the file to S3. # We will print the message for why the upload to S3 failed from the status message. # If the status was "InProgress", the status indicates that the server has started uploading # the S3 task. if status_message.status == Status.Success: logger.info("Successfully uploaded file at path " + file_url + " to S3.") is_file_uploaded_to_s3 = True elif status_message.status == Status.Failure or status_message.status == Status.Canceled: logger.info( "Unable to upload file at path " + file_url + " to S3. Message: " + status_message.message ) is_file_uploaded_to_s3 = True time.sleep(5) except StreamManagerException: logger.exception("Exception while running") except StreamManagerException: pass # Properly handle errors. except ConnectionError or asyncio.TimeoutError: pass # Properly handle errors.

Referência do SDK do Python: read_messages | StatusMessage

Java
import com.amazonaws.greengrass.streammanager.client.StreamManagerClient; import com.amazonaws.greengrass.streammanager.client.utils.ValidateAndSerialize; import com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions; import com.amazonaws.greengrass.streammanager.model.Status; import com.amazonaws.greengrass.streammanager.model.StatusConfig; import com.amazonaws.greengrass.streammanager.model.StatusLevel; import com.amazonaws.greengrass.streammanager.model.StatusMessage; try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) { try { boolean isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream List<Message> messages = client.readMessages("StatusStreamName", new ReadMessagesOptions().withMinMessageCount(1L).withReadTimeoutMillis(1000L)); for (Message message : messages) { // Deserialize the status message first. StatusMessage statusMessage = ValidateAndSerialize.deserializeJsonBytesToObj(message.getPayload(), StatusMessage.class); // Check the status of the status message. If the status is "Success", the file was successfully uploaded to S3. // If the status was either "Failure" or "Canceled", the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (Status.Success.equals(statusMessage.getStatus())) { System.out.println("Successfully uploaded file at path " + FILE_URL + " to S3."); isS3UploadComplete = true; } else if (Status.Failure.equals(statusMessage.getStatus()) || Status.Canceled.equals(statusMessage.getStatus())) { System.out.println(String.format("Unable to upload file at path %s to S3. Message %s", statusMessage.getStatusContext().getS3ExportTaskDefinition().getInputUrl(), statusMessage.getMessage())); sS3UploadComplete = true; } } } catch (StreamManagerException ignored) { } finally { // Sleep for sometime for the S3 upload task to complete before trying to read the status message. Thread.sleep(5000); } } catch (e) { // Properly handle errors. } } catch (StreamManagerException e) { // Properly handle exception. }

Referência do Java SDK: readMessages | StatusMessage

Node.js
const { StreamManagerClient, ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, util, } = require('aws-greengrass-core-sdk').StreamManager; const client = new StreamManagerClient(); client.onConnected(async () => { try { let isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream const messages = await c.readMessages("StatusStreamName", new ReadMessagesOptions() .withMinMessageCount(1) .withReadTimeoutMillis(1000)); messages.forEach((message) => { // Deserialize the status message first. const statusMessage = util.deserializeJsonBytesToObj(message.payload, StatusMessage); // Check the status of the status message. If the status is 'Success', the file was successfully uploaded to S3. // If the status was either 'Failure' or 'Cancelled', the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (statusMessage.status === Status.Success) { console.log(`Successfully uploaded file at path ${FILE_URL} to S3.`); isS3UploadComplete = true; } else if (statusMessage.status === Status.Failure || statusMessage.status === Status.Canceled) { console.log(`Unable to upload file at path ${FILE_URL} to S3. Message: ${statusMessage.message}`); isS3UploadComplete = true; } }); // Sleep for sometime for the S3 upload task to complete before trying to read the status message. await new Promise((r) => setTimeout(r, 5000)); } catch (e) { // Ignored } } catch (e) { // Properly handle errors. } }); client.onError((err) => { // Properly handle connection errors. // This is called only when the connection to the StreamManager server fails. });

Node.js Referência do SDK: readMessages | StatusMessage