Atualizar configurações do componente - AWS IoT Greengrass

Atualizar configurações do componente

As configurações de componente são objetos JSON que definem os parâmetros de cada componente. A fórmula de cada componente define sua configuração padrão, que você modifica ao implantar componentes em dispositivos principais.

Ao criar uma implantação, você pode especificar a atualização de configuração que será aplicada a cada componente. As atualizações de configuração são operações de patch, ou seja, a atualização modifica a configuração do componente que existe no dispositivo principal. Se o dispositivo principal não tiver o componente, a atualização de configuração modificará e aplicará a configuração padrão a essa implantação.

A atualização de configuração define atualizações de redefinição e de mesclagem. As atualizações de redefinição determinam os valores de configuração que devem ser redefinidos aos padrões ou removidos. As atualizações de mesclagem determinam os novos valores de configuração que serão definidos no componente. Quando você implanta uma atualização de configuração, o software de núcleo do AWS IoT Greengrass executa a atualização de redefinição antes da atualização de mesclagem.

Os componentes podem validar as atualizações de configuração que você implanta. O componente faz a assinatura para receber uma notificação quando a implantação altera sua configuração e pode rejeitar uma configuração à qual não ofereça suporte. Para ter mais informações, consulte Interagir com a configuração do componente.

Atualizações de redefinição

As atualizações de redefinição determinam os valores que devem ser redefinidos aos padrões no dispositivo principal. Se um valor de configuração não tiver um padrão, a atualização de redefinição o removerá da configuração do componente. Isso pode ajudar você a corrigir um componente com falha por causa de uma configuração inválida.

Use uma lista de ponteiros JSON para determinar os valores de configuração que devem ser redefinidos. Os ponteiros JSON começam com uma barra /. Para identificar um valor em uma configuração de componente aninhado, use barras (/) para separar as chaves de cada nível na configuração. Para obter mais informações, consulte a Especificação de ponteiros JSON (em inglês).

nota

Você pode redefinir somente uma lista inteira aos valores padrão. Você não pode usar as atualizações de redefinição para redefinir apenas um elemento de uma lista.

Para redefinir toda a configuração de um componente aos valores padrão, especifique uma única string vazia como a atualização de redefinição.

"reset": [""]

Atualizações de mesclagem

As atualizações de mesclagem definem os valores de configuração que serão inseridos na configuração do componente no núcleo. A atualização de mesclagem é um objeto JSON que o software de núcleo do AWS IoT Greengrass mescla depois de redefinir os valores nos caminhos que você especifica na atualização de redefinição. Ao usar os SDKs da AWS CLI ou da AWS, você deve serializar esse objeto JSON como uma string.

Você pode mesclar um par de chave/valor que não existe na configuração padrão do componente. Você também pode mesclar um par de chave/valor que tenha um tipo diferente do valor com a mesma chave. O novo valor substitui o valor antigo. Isso significa que você pode alterar a estrutura do objeto de configuração.

Você pode mesclar valores nulos e strings, listas e objetos vazios.

nota

Você não pode usar atualizações de mesclagem com a finalidade de inserir ou anexar um elemento a uma lista. Você pode substituir uma lista inteira ou definir um objeto em que cada elemento tenha uma chave exclusiva.

O AWS IoT Greengrass usa JSON para valores de configuração. O JSON especifica um tipo de número, mas não diferencia entre números inteiros e flutuantes. Como resultado, os valores de configuração podem ser convertidos em flutuantes no AWS IoT Greengrass. Para garantir que seu componente use o tipo de dados correto, recomendamos que você defina valores de configuração numéricos como strings. Em seguida, faça com que seu componente os analise como números inteiros ou flutuantes. Isso garante que seus valores de configuração tenham o mesmo tipo na configuração e no seu dispositivo principal.

Usar variáveis de fórmula em atualizações de mesclagem

Esse recurso está disponível para a versão 2.6.0 e posterior do componente de núcleo do Greengrass.

Se você definir a opção de configuração interpolateComponentConfiguration do núcleo do Greengrass como true, poderá usar variáveis de fórmula, que não seja a variável de fórmula component_dependency_name:configuration:json_pointer, nas atualizações de mesclagem. Por exemplo, você pode usar a variável de fórmula {iot:thingName} em uma atualização de mesclagem para incluir o nome do item do AWS IoT dispositivo principal em um valor de configuração do componente, como uma política de autorização de comunicação entre processos (IPC).

Exemplos

O exemplo a seguir demonstra as atualizações de configuração para um componente do painel que tem a configuração padrão abaixo. Este componente de exemplo exibe informações sobre equipamentos industriais.

{ "name": null, "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 80, "https": 443 }, }, "tags": [] }
JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.IndustrialDashboard", "ComponentVersion": "1.0.0", "ComponentDescription": "Displays information about industrial equipment.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "name": null, "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 80, "https": 443 }, }, "tags": [] } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "run": "python3 -u {artifacts:path}/industrial_dashboard.py" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "run": "py -3 -u {artifacts:path}/industrial_dashboard.py" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.IndustrialDashboard ComponentVersion: '1.0.0' ComponentDescription: Displays information about industrial equipment. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: name: null mode: REQUEST network: useHttps: true port: http: 80 https: 443 tags: [] Manifests: - Platform: os: linux Lifecycle: run: | python3 -u {artifacts:path}/industrial_dashboard.py - Platform: os: windows Lifecycle: run: | py -3 -u {artifacts:path}/industrial_dashboard.py
exemplo Exemplo 1: atualização de mesclagem

Você cria uma implantação que aplica a atualização de configuração a seguir, que especifica uma atualização de mesclagem, mas não uma atualização de redefinição. Essa atualização de configuração instrui o componente a exibir o painel na porta HTTP 8080 com os dados de duas caldeiras.

Console
Configuração a ser mesclada
{ "name": "Factory 2A", "network": { "useHttps": false, "port": { "http": 8080 } }, "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] }
AWS CLI

O comando a seguir cria uma implantação em um dispositivo principal.

aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment.json

O arquivo dashboard-deployment.json contém o documento JSON a seguir.

{ "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "deploymentName": "Deployment for MyGreengrassCore", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "merge": "{\"name\":\"Factory 2A\",\"network\":{\"useHttps\":false,\"port\":{\"http\":8080}},\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } } }
Greengrass CLI

O comando da CLI do Greengrass a seguir cria uma implantação local em um dispositivo principal.

sudo greengrass-cli deployment create \ --recipeDir recipes \ --artifactDir artifacts \ --merge "com.example.IndustrialDashboard=1.0.0" \ --update-config dashboard-configuration.json

O arquivo dashboard-configuration.json contém o documento JSON a seguir.

{ "com.example.IndustrialDashboard": { "MERGE": { "name": "Factory 2A", "network": { "useHttps": false, "port": { "http": 8080 } }, "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] } } }

Após essa atualização, o componente do painel terá a configuração abaixo.

{ "name": "Factory 2A", "mode": "REQUEST", "network": { "useHttps": false, "port": { "http": 8080, "https": 443 } }, "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] }
exemplo Exemplo 2: redefinir e mesclar atualizações

Em seguida, você cria uma implantação que aplica a atualização de configuração a seguir, que especifica uma atualização de redefinição e uma de mesclagem. Essas atualizações especificam a exibição do painel na porta HTTPS padrão com os dados das caldeiras diferentes. Essas atualizações modificam a configuração resultante das atualizações de configuração no exemplo anterior.

Console
Caminhos de redefinição
[ "/network/useHttps", "/tags" ]
Configuração a ser mesclada
{ "tags": [ "/boiler/3/temperature", "/boiler/3/pressure", "/boiler/4/temperature", "/boiler/4/pressure" ] }
AWS CLI

O comando a seguir cria uma implantação em um dispositivo principal.

aws greengrassv2 create-deployment --cli-input-json file://dashboard-deployment2.json

O arquivo dashboard-deployment2.json contém o documento JSON a seguir.

{ "targetArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "deploymentName": "Deployment for MyGreengrassCore", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/3/temperature\",\"/boiler/3/pressure\",\"/boiler/4/temperature\",\"/boiler/4/pressure\"]}" } } } }
Greengrass CLI

O comando da CLI do Greengrass a seguir cria uma implantação local em um dispositivo principal.

sudo greengrass-cli deployment create \ --recipeDir recipes \ --artifactDir artifacts \ --merge "com.example.IndustrialDashboard=1.0.0" \ --update-config dashboard-configuration2.json

O arquivo dashboard-configuration2.json contém o documento JSON a seguir.

{ "com.example.IndustrialDashboard": { "RESET": [ "/network/useHttps", "/tags" ], "MERGE": { "tags": [ "/boiler/3/temperature", "/boiler/3/pressure", "/boiler/4/temperature", "/boiler/4/pressure" ] } } }

Após essa atualização, o componente do painel terá a configuração abaixo.

{ "name": "Factory 2A", "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 8080, "https": 443 } }, "tags": [ "/boiler/3/temperature", "/boiler/3/pressure", "/boiler/4/temperature", "/boiler/4/pressure", ] }