创建部署 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

创建部署

您可以创建针对事物或事物组的部署。

创建部署时,您可以配置要部署的软件组件以及部署作业如何将部署到目标设备。您可以在 JSON 文件中定义部署,该文件提供给Amazon CLI.

部署目标确定要在其上运行组件的设备。要部署到一个核心设备,请指定一个事物。要部署到多个核心设备,请指定包含这些设备的事物组。有关如何配置事物组的详细信息,请参阅静态事物组动态事物组中的Amazon IoT开发人员指南.

按照此部分中的步骤首次创建到目标的部署。有关如何更新具有部署的目标上的软件组件的信息,请参阅修改部署.

创建部署 (Amazon CLI)

  1. 创建一个名为的文件deployment.json,然后将以下 JSON 对象复制到该文件中。ReplacetargetArn的 ARNAmazon IoT事物或事物组以作为部署目标。事物组 ARN 采用以下格式:

    • 事物:arn:aws:iot:region:account-id:thing/thingName

    • 事物组:arn:aws:iot:region:account-id:thinggroup/thingGroupName

    { "targetArn": "targetArn", "components": { } }
  2. 添加每个组件以部署目标设备。为此,请将键值对添加到components对象,其中键是组件名称,值是包含该组件详细信息的对象。为您添加的每个组件指定以下详细信息:

    • version— 要部署的组件版本。

    • configurationUpdate配置更新部署。此更新是修补程序操作,用于修改组件在每个目标设备上的现有配置,如果目标设备上不存在组件的默认配置。您可以指定以下配置更新:

      • 重置更新 (reset) —(可选)JSON 指针列表,用于定义要在目标设备上重置为默认值的配置值。这些区域有:Amazon IoT Greengrass核心软件在应用合并更新之前应用重置更新。有关更多信息,请参阅重置更新

      • 合并更新 (merge) —(可选)定义要合并到目标设备上的配置值的 JSON 文档。必须将 JSON 文档序列化为字符串。有关更多信息,请参阅合并更新

    • runWith—(可选)系统进程选项Amazon IoT Greengrass核心软件使用在核心设备上运行此组件的进程。如果您省略了runWith对象,则Amazon IoT Greengrass核心软件使用您在Greengrass 核组件.

      您可以指定以下任何选项:

      • posixUser— 用于运行此组件进程的 POSIX 系统用户和(可选)组。指定用冒号分隔的用户和组 (:) 采用以下格式:user:group. 如果您没有指定组,则会将Amazon IoT Greengrass核心软件使用用户的主组。有关更多信息,请参阅配置运行组件的用户和组

      • systemResourceLimits— 要应用于此组件的进程的系统资源限制。有关更多信息,请参阅配置组件的系统资源限制

        您可以指定以下任何选项:

        • cpus此组件的进程在核心设备上可以使用的最大 CPU 时间。核心设备的总 CPU 时间等同于设备的 CPU 内核数。例如,在具有 4 个 CPU 内核的核心设备上,您可以将此值设置为2将此组件的进程限制在每个 CPU 内核的 50% 使用率。在具有 1 个 CPU 内核的设备上,您可以将此值设置为0.25将此组件的进程限制为 CPU 使用率的 25%。如果将此值设置为一个大于 CPU 核心数的数,则Amazon IoT Greengrass核心软件不限制组件的 CPU 使用率。

        • memory此组件的进程可在核心设备上使用的最大 RAM 量(以千字节为单位)。

        此功能适用于 v2.4.0 及更高版本的Greengrass 核组件.

    例 基本配置更新示例

    以下示例components对象指定部署一个组件,com.example.PythonRuntime,它需要一个名为pythonVersion.

    { "targetArn": "targetArn", "components": { "com.example.PythonRuntime": { "componentVersion": "1.0.0", "configurationUpdate": { "merge": "{\"pythonVersion\":\"3.7\"}" } } } }

    例 具有重置和合并更新的配置更新示例

    考虑一个示例工业仪表板组件,com.example.IndustrialDashboard,具有以下默认配置。

    { "name": null, "mode": "REQUEST", "network": { "useHttps": true, "port": { "http": 80, "https": 443 }, }, "tags": [] }

    以下配置更新指定了以下说明:

    1. 将 HTTPS 设置重置为其默认值 (true)。

    2. 将工业标签列表重置为空列表。

    3. 合并用于识别两个锅炉的温度和压力数据流的工业标签列表。

    { "reset": [ "/network/useHttps", "/tags" ], "merge": { "tags": [ "/boiler/1/temperature", "/boiler/1/pressure", "/boiler/2/temperature", "/boiler/2/pressure" ] } }

    以下示例components对象指定部署此工业仪表板组件和配置更新。

    { "targetArn": "targetArn", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } } }
  3. (可选)为部署定义部署策略。您可以配置核心设备何时可以安全地应用部署,或者在核心设备无法应用部署时执行什么操作。为此,请添加一个deploymentPolicies对象到deployment.json,然后执行以下任何操作:

    1. (可选)指定组件更新策略 (componentUpdatePolicy)。此策略定义部署是否允许组件推迟更新,直到它们准备好更新为止。例如,组件可能需要清理资源或完成关键操作,然后才能重新启动以应用更新。此策略还定义了组件响应更新通知的时间量。

      此策略是具有以下参数的对象:

      • action—(可选)是否通知组件并等待它们在准备好更新时进行报告。从以下选项中进行选择:

        • NOTIFY_COMPONENTS— 部署会在每个组件停止之前通知它并更新该组件。组件可以使用SubscribeToComponentUpdatesIPC 操作来接收这些通知。

        • SKIP_NOTIFY_COMPONENTS— 部署不会通知组件或等待组件安全更新。

        默认值为 NOTIFY_COMPONENTS

      • timeoutInSeconds每个组件响应更新通知的时长(以秒为单位)DeferComponentUpdateIPC 操作。如果组件在此时间段内没有响应,则部署将继续在核心设备上进行。

        默认值为 60 秒。

    2. (可选)指定配置验证策略 (configurationValidationPolicy)。此策略定义每个组件从部署中验证配置更新所需的时间。组件可以使用SubscribeToValidateConfigurationUpdatesIPC 操作订阅有关自己配置更新的通知。然后,组件可以使用SendConfigurationValidityReportIPC 操作来告诉Amazon IoT Greengrass如果配置更新有效,则核心软件。如果配置更新无效,则部署将失败。

      此策略是具有以下参数的对象:

      • timeoutInSeconds(可选)每个组件验证配置更新的时长(以秒为单位)。如果组件在此时间段内没有响应,则部署将继续在核心设备上进行。

        默认值为 30 秒。

    3. (可选)指定故障处理策略 (failureHandlingPolicy)。此策略是一个字符串,用于定义在部署失败时是否回滚设备。从以下选项中进行选择:

      • ROLLBACK— 如果在核心设备上部署失败,则Amazon IoT Greengrass核心软件将该核心设备回滚到以前的配置。

      • DO_NOTHING— 如果在核心设备上部署失败,则Amazon IoT Greengrass核心软件保留新配置。如果新配置无效,这可能会导致组件损坏。

      默认值为 ROLLBACK

    您在中的部署deployment.json类似下例:

    { "targetArn": "targetArn", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } }, "deploymentPolicies": { "componentUpdatePolicy": { "action": "NOTIFY_COMPONENTS", "timeoutInSeconds": 30 }, "configurationValidationPolicy": { "timeoutInSeconds": 60 }, "failureHandlingPolicy": "ROLLBACK" } }
  4. (可选)定义部署如何停止、推出或超时。Amazon IoT Greengrass使用 Amazon IoT Core 作业将部署发送到核心设备,因此这些选项与 Amazon IoT Core 个作业。有关更多信息,请参阅 。作业推出和中止配置中的Amazon IoT开发人员指南.

    要定义作业选项,请添加iotJobConfigurations对象到deployment.json. 然后,定义要配置的选项。

    您在中的部署deployment.json类似下例:

    { "targetArn": "targetArn", "components": { "com.example.IndustrialDashboard": { "componentVersion": "1.0.0", "configurationUpdate": { "reset": [ "/network/useHttps", "/tags" ], "merge": "{\"tags\":[\"/boiler/1/temperature\",\"/boiler/1/pressure\",\"/boiler/2/temperature\",\"/boiler/2/pressure\"]}" } } }, "deploymentPolicies": { "componentUpdatePolicy": { "action": "NOTIFY_COMPONENTS", "timeoutInSeconds": 30 }, "configurationValidationPolicy": { "timeoutInSeconds": 60 }, "failureHandlingPolicy": "ROLLBACK" }, "iotJobConfigurations": { "abortConfig": { "criteriaList": [ { "action": "CANCEL", "failureType": "ALL", "minNumberOfExecutedThings": 100, "thresholdPercentage": 5 } ] }, "jobExecutionsRolloutConfig": { "exponentialRate": { "baseRatePerMinute": 5, "incrementFactor": 2, "rateIncreaseCriteria": { "numberOfNotifiedThings": 10, "numberOfSucceededThings": 5 } }, "maximumPerMinute": 50 }, "timeoutConfig": { "inProgressTimeoutInMinutes": 5 } } }
  5. (可选)添加标签 (tags) 部署。有关更多信息,请参阅标记 Amazon IoT Greengrass Version 2 资源

  6. 运行以下命令以创建deployment.json.

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

    响应包括的deploymentId来标识此部署。您可以使用部署 ID 检查部署的状态。有关更多信息,请参阅检查部署状态