本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Greengrass 核心设备切换到另一台核心设备 AWS 账户 或区域
您可以部署 nucleus 配置更新,将核心设备的物联网连接从一个 AWS 账户 或区域切换到另一个或另一个区域。这在以下情况下很有用:
-
从制造到生产的过渡-在制造期间在暂存账户中配置设备,并在现场安装期间将其转移到目标帐户。
-
地理位置重新定位 — 从一个区域移动到另一个区域的设备必须连接到本地区域的 AWS IoT 终端节点以减少延迟。
-
减少故障影响 — 您可以将最初集中在单个账户中的设备重新分配给多个账户,以限制账户级别问题(例如服务配额限制或安全事件)的影响。
部署物联网连接交换机时,nucleus 会在应用更改之前验证与新端点的连接,并在连接失败时自动回滚。
此功能需要 Greengrass nucleus v2.18.0 或更高版本,或 Greengrass nucleus lite v2.6.0 或更高版本。
先决条件
在部署连接交换机之前,请在目标 AWS 账户 和区域中进行以下设置:
-
AWS IoT thin@@ g — 创建与源账户中同名的事物。
-
证书-在目标账户中注册相同的设备证书。该证书必须与设备在源账户中使用的证书相同。
-
AWS IoT 策略-将策略附加到证书。该策略必须允许
iot:Connect使用使用通配符后缀作为客户端 ID 的资源 ARN:"Resource": "arn:aws:iot:*:*:client/${iot:Connection.Thing.ThingName}*"您必须包括通配符后缀,因为 nucleus 飞行前连接检查使用客户端 ID。
thing-name#endpoint-switch -
AWS IoT 角色别名 — 在目标区域中创建一个角色别名,该角色别名具有用于 Greengrass 操作的相应 IAM 角色权限。
注意
要使用诸如策略${iot:Connection.Thing.ThingName}中的 AWS IoT 事物 AWS IoT 策略变量,您必须将证书专门附加到目标账户中的 AWS IoT 事物。
对于 Greengrass nucleus 核心设备,还greengrassDataPlaneEndpoint必须在核配置中设置为。iotdata在连接交换机部署中或初始配置期间包括此设置。
如果没有此设置,数据平面将在切换后保持与原始帐户的绑定。这会中断组件工件下载和控制平面操作。有关更多信息,请参阅中的greengrassDataPlaneEndpoint配置参数Greengrass Nucleus。
对于 Greengrass nucleus lite 核心设备,必须先在账户中创建aws.greengrass.NucleusLite私有组件,然后才能将配置更新部署到核心。 AWS IoT Greengrass 部署只能针对账户组件注册表中存在的组件,而且 nucleus lite 没有公共组件。
创建一个包含aws_nucleus_lite运行时且生命周期为空的组件(无操作)。组件版本必须与设备上运行的 nucleus lite 版本相匹配。
创建部署
创建以源账户中的核心设备或其事物组为目标的部署。部署会向 nucleus 组件发送包含新 AWS IoT 端点值的合并配置更新。
要部署连接交换机 (AWS CLI)
-
使用以下内容创建名为
switch-deployment.json的文件。将占位符值替换为目标账户的值。-
targetArn替换为源账户中的 AWS IoT 事物组或核心设备的 ARN。 -
componentName替换为 nuaws.greengrass.Nucleuscleus 或 nucleuaws.greengrass.NucleusLites lite。 -
componentVersion替换为设备上运行的原子核版本。
{ "targetArn": "targetArn", "deploymentName": "SwitchConnectivity", "components": { "componentName": { "componentVersion": "componentVersion", "configurationUpdate": { "merge": "{\"iotDataEndpoint\":\"account-prefix-ats.iot.region.amazonaws.com\",\"iotCredEndpoint\":\"account-prefix.credentials.iot.region.amazonaws.com\",\"awsRegion\":\"region\",\"iotRoleAlias\":\"role-alias-name\"}" } } }, "deploymentPolicies": { "failureHandlingPolicy": "ROLLBACK" } }对于尚未设置为的 Greengrass nucleus 核心设备,请
iotdata将其greengrassDataPlaneEndpoint添加到合并配置中:"merge": "{\"iotDataEndpoint\":\"...\",\"iotCredEndpoint\":\"...\",\"awsRegion\":\"...\",\"iotRoleAlias\":\"...\",\"greengrassDataPlaneEndpoint\":\"iotdata\"}"将该
merge值编码为 JSON 字符串。使用反斜杠 ()\"对所有内部引号进行转义。在创建部署之前,使用 JSON 验证工具验证语法。 -
-
运行以下命令来创建部署。
aws greengrassv2 create-deployment \ --cli-input-json file://switch-deployment.json
预计将发生的情况
在应用更改之前,nucleus 会验证与新端点的连接。如果设备无法连接到新的端点,则部署将失败,并且设备仍与源帐户保持连接。
Nucleus 使用客户端 ID 进行飞行前连接检查。thing-name#endpoint-switch
应用配置后,Nucleus 将测试与新端点的连通性。如果连接失败,Nucleus 会自动回滚到原始配置。源账户FAILED中的部署报告。
如果连接切换成功,则部署将在源帐户SUCCEEDED中报告。 AWS IoT Greengrass 在与新终端节点关联的账户和区域中创建核心设备。
注意
在连接切换期间,nucleus 会重新启动对令牌交换服务有硬依赖性的组件。此重启会刷新来自新 AWS IoT 凭证端点的证书。Nucleus 不会重启其他组件,它们会继续以现有状态运行。
验证交换机
部署完成后,验证连接交换机是否成功。
验证连接开关
-
检查源账户中的部署状态。设备连接到新端点
SUCCEEDED后,部署会报告。aws greengrassv2 list-effective-deployments \ --core-device-thing-namething-name -
验证核心设备是否出现在目标帐户中。打开AWS IoT Greengrass 控制台
或运行以下命令。 aws greengrassv2 get-core-device \ --core-device-thing-namething-name
切换后, AWS IoT 事物和核心设备记录仍保留在源帐户中。要防止 future 部署以该设备为目标,请将其从来源账户的事物组中移除。
如果部署状态不是SUCCEEDED,请查看设备上的 Greengrass 日志,了解错误详情。有关与连接交换机操作相关的常见错误代码,请参阅详细的部署错误代码。/logs/greengrass.log/greengrass/v2