本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
更新组件配置
组件配置是定义每个组件参数的 JSON 对象。每个组件的配方定义了其默认配置,您可以在将组件部署到核心设备时对其进行修改。
创建部署时,您可以指定配置更新以应用于每个组件。配置更新是修补程序操作,这意味着更新会修改核心设备上存在的组件配置。如果核心设备没有组件,则配置更新将修改并应用该部署的默认配置。
配置更新定义了重置更新和merge更新。重置更新定义要重置为默认值或删除的配置值。合并更新定义要为组件设置的新配置值。部署配置更新时,Amazon IoT Greengrass核心软件在合并更新之前运行重置更新。
组件可以验证您部署的配置更新。组件订阅以在部署更改其配置时接收通知,并且它可以拒绝它不支持的配置。有关更多信息,请参阅与组件配置交互。
重置更新
重置更新定义要在核心设备上重置为默认值的配置值。如果配置值没有默认值,则重置更新将从组件的配置中删除该值。这可以帮助您修复因配置无效而中断的组件。
使用 JSON 指针列表定义要重置的配置值。JSON 指针以正斜杠开头/
. 要标识嵌套组件配置中的值,请使用正斜杠 (/
)分隔配置中每个级别的密钥。有关更多信息,请参阅 。JSON 指针规范
您只能将整个列表重置为其默认值。您不能使用重置更新来重置列表中的单个元素。
要将组件的整个配置重置为默认值,请指定一个空字符串作为重置更新。
"reset": [""]
合并更新
合并更新定义要插入到核心上的组件配置中的配置值。合并更新是 JSON 对象,Amazon IoT Greengrass核心软件将在重置更新中指定的路径中重置值后进行合并。当您使用Amazon CLI或者AmazonSDK 中,您必须将此 JSON 对象序列化为字符串。
您可以合并组件的默认配置中不存在的键值对。您还可以合并具有不同类型与具有相同键的值的键值对。新值将替换旧值。这意味着您可以更改配置对象的结构。
您可以合并空值和空字符串、列表和对象。
您不能将合并更新用于将元素插入或附加到列表中。您可以替换整个列表,也可以定义每个元素都具有唯一键的对象。
Amazon IoT Greengrass使用 JSON 作为配置值。JSON 指定了一个数字类型,但不区分整数和浮点数。因此,配置值可能会转换为Amazon IoT Greengrass. 为确保组件使用正确的数据类型,我们建议您将数字配置值定义为字符串。然后,让你的组件将它们解析为整数或浮点数。这可确保您的配置值在配置和核心设备中具有相同的类型。
Examples
以下示例演示具有以下默认配置的仪表板组件的配置更新。此示例组件显示有关工业设备的信息。
{ "name": null, "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 80, "https": 443 }, }, "tags": [] }
然后,您应用以下配置更新,它指定合并更新,但不是重置更新。此配置告诉组件在 HTTP 端口 8080 上显示仪表板,其中包含来自两个锅炉的数据。
{ "merge": { "name": "Factory 2A", "network": { "useHttps": false, "port": { "http": 8080 } }, "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] } }
此更新后,仪表板组件具有以下配置。
{ "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" ] }
然后,应用以下配置更新以在默认 HTTPS 端口上显示仪表板,其中包含来自不同锅炉的数据。
{ "reset": [ "/network/useHttps", "/tags" ], "merge": { "tags": [ "/boiler/3/temperature", "/boiler/3/pressure", "/boiler/4/temperature", "/boiler/4/pressure" ] } }
此更新后,仪表板组件具有以下配置。
{ "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", ] }