View a markdown version of this page

将 Greengrass 核心设备切换到另一台核心设备 AWS 账户 或区域 - AWS IoT Greengrass

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

将 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)
  1. 使用以下内容创建名为 switch-deployment.json 的文件。将占位符值替换为目标账户的值。

    • targetArn替换为源账户中的 AWS IoT 事物组或核心设备的 ARN。

    • componentName替换为 nu aws.greengrass.Nucleus cleus 或 nucleu aws.greengrass.NucleusLite s 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 验证工具验证语法。

  2. 运行以下命令来创建部署。

    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 不会重启其他组件,它们会继续以现有状态运行。

验证交换机

部署完成后,验证连接交换机是否成功。

验证连接开关
  1. 检查源账户中的部署状态。设备连接到新端点SUCCEEDED后,部署会报告。

    aws greengrassv2 list-effective-deployments \ --core-device-thing-name thing-name
  2. 验证核心设备是否出现在目标帐户中。打开AWS IoT Greengrass 控制台或运行以下命令。

    aws greengrassv2 get-core-device \ --core-device-thing-name thing-name

切换后, AWS IoT 事物和核心设备记录仍保留在源帐户中。要防止 future 部署以该设备为目标,请将其从来源账户的事物组中移除。

如果部署状态不是SUCCEEDED,请查看设备上的 Greengrass /greengrass/v2/logs/greengrass.log 日志,了解错误详情。有关与连接交换机操作相关的常见错误代码,请参阅详细的部署错误代码