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

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

创建部署

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

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

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

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

创建部署 (AWS CLI)

  1. 创建一个名为 的文件deployment.json,然后将以下 JSON 对象复制到该文件中。Replace targetArn 替换为要用于部署的 AWS IoT IoT 事物或事物组的 ARN。事物和事物组 ARNs 具有以下格式:

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

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

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

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

    • configurationUpdate – 要部署的配置更新。更新是一个补丁操作,用于修改每个目标设备上的组件现有配置,或者修改目标设备上不存在组件的默认配置。您可以指定以下配置更新:

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

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

    • runWith – (可选 AWS IoT IoT Greengrass 核心软件用来在核心设备上运行此组件的进程的系统用户和组。如果省略此参数 AWS IoT IoT Greengrass 核心软件将使用您为核心设备配置的系统用户和组。有关更多信息,请参阅配置运行组件的用户和组。指定以下选项:

      • posixUser – 要用于运行此组件的 POSIX 系统用户和(可选)组。按以下格式指定用冒号 (:) 分隔的用户和组user:group:。如果未指定组 AWS IoT IoT Greengrass 核心软件将使用该组的主用户。

    例 基本配置更新示例

    以下示例components对象指定 部署需要名为 com.example.PythonRuntime的配置参数的组件 pythonVersion

    { "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对象指定 以部署此工业控制面板组件和配置更新。

    { "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 – 部署在停止和更新每个组件之前通知每个组件。组件可以使用 SubscribeToComponentUpdates IPC 操作来接收这些通知。

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

        默认值为 NOTIFY_COMPONENTS

      • timeout 每个组件必须响应使用 DeferComponentUpdate IPC 操作的更新通知的时间(以秒为单位)。如果组件在此时间内未做出响应,则部署将继续在核心设备上进行。

        默认值为 60 秒。

    2. (可选)指定配置验证策略 (configurationValidationPolicy)。此策略定义每个组件必须验证部署中的配置更新的时间长度。组件可以使用 SubscribeToValidateConfigurationUpdates IPC 操作订阅自己的配置更新的通知。然后,如果配置更新有效,组件可以使用 SendConfigurationValidityReport IPC 操作告知 AWS AWS IoT Greengrass 核心软件。如果配置更新无效,部署将失败。

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

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

        默认值为 30 秒。

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

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

      • DO_NOTHING – 如果核心设备上的部署失败,则 AWS AWS IoT Greengrass 核心软件将保留新配置。如果新配置无效,则可能会导致组件中断。

      默认值为 ROLLBACK

    您在 中的部署deployment.json可能类似于以下示例:

    { "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", "timeout": 30 }, "configurationValidationPolicy": { "timeout": 60 }, "failureHandlingPolicy": "ROLLBACK" } }
  4. (可选)定义部署停止、推出或超时的方式。AWS AWS IoT Greengrass 使用 AWS IoT IoT Core 作业将部署发送到核心设备,因此这些选项与 AWS AWS IoT Core 作业的配置选项相同。有关更多信息,请参阅AWS IoT IoT 开发人员指南》中的“作业推出和中止配置”。

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

    您在 中的部署deployment.json可能类似于以下示例:

    { "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", "timeout": 30 }, "configurationValidationPolicy": { "timeout": 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)。有关更多信息,请参阅标记 AWS AWS IoT Greengrass 版本 2 资源

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

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

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