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

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

创建部署

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

创建部署时,您可以配置要部署的软件组件以及部署作业如何向目标设备推出。您可以在提供给Amazon CLI.

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

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

警告

这些区域有:CreateDeployment操作可以从核心设备卸载组件。如果上一个部署中存在组件,而不是新部署中存在组件,则核心设备将卸载该组件。为避免卸载组件,请首先使用ListDeployments操作来检查部署的目标是否已有部署。然后,使用GetDeployment操作,以便在创建新部署时从该现有部署开始。

创建部署 (Amazon CLI)

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

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

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

    { "targetArn": "targetArn" }
  2. 检查部署目标是否有要修订的现有部署。执行以下操作:

    1. 运行以下命令以列出部署目标的部署。ReplacetargetArn使用目标的 ARNAmazon IoT事物或事物组。

      aws greengrassv2 list-deployments --target-arn targetArn

      响应包含目标的最新部署的列表。如果响应为空,则目标没有现有部署,您可以跳到步骤 3. 否则,请复制deploymentId从响应到下一步中使用。

      注意

      您还可以修订目标的最新修订版以外的部署。指定--history-filter ALL参数来列出目标的所有部署。然后,复制您要修改的部署的 ID。

    2. 运行以下命令以获取部署的详细信息。这些详细信息包括元数据、组件和作业配置。ReplacedeploymentId使用上一步中的 ID。

      aws greengrassv2 get-deployment --deployment-id deploymentId

      响应包含部署的详细信息。

    3. 将上一命令响应中的任何键/值对复制到deployment.json. 您可以为新部署更改这些值。

      • deploymentName— 部署的名称。

      • components— 部署的组件。要卸载组件,请将其从此对象中删除。

      • deploymentPolicies— 部署的策略。

      • iotJobConfiguration— 部署的作业配置。

      • tags— 部署的标签。

  3. (可选)为部署定义名称。Replace部署名称使用部署名称执行。

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

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

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

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

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

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

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

      • posixUser— POSIX 系统用户以及用于在 Linux 核心设备上运行此组件的组(可选)。用户和组(如果指定)必须存在于每个 Linux 核心设备上。指定用户和组,使用冒号分隔 (:) 采用以下格式:user:group. 该组是可选的。如果您没有指定组,则Amazon IoT Greengrass核心软件为用户使用主组。有关更多信息,请参阅 配置运行组件的用户

      • windowsUser— 用于在 Windows 核心设备上运行此组件的 Windows 用户。用户必须存在于每个 Windows 核心设备上,其名称和密码必须存储在 LocalSystem 账户的凭证管理器实例。有关更多信息,请参阅 配置运行组件的用户

        此功能适用于 v2.5.0 及更高版本Greengrass Nucus.

      • systemResourceLimits— 适用于此组件进程的系统资源限制。您可以对通用和非容器化 Lambda 组件应用系统资源限制。有关更多信息,请参阅 配置组件的系统资源限制

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

        • 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 Nucus.Amazon IoT Greengrass目前在 Windows 核心设备上不支持此功能。

     

    例 示例基本配置更新

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

    { "targetArn": "targetArn", "deploymentName": "deploymentName", "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", "deploymentName": "deploymentName", "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\"]}" } } } }
  5. (可选)为部署定义部署策略。您可以配置核心设备何时可以安全地应用部署,或者如果核心设备未能应用部署,该怎么办。为此,请添加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", "deploymentName": "deploymentName", "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" } }
  6. (可选)定义部署停止、部署或超时的方式。Amazon IoT Greengrass使用Amazon IoT Core将部署发送到核心设备的作业,因此这些选项与Amazon IoT Core个作业。有关更多信息,请参阅 。作业推出和中止配置中的Amazon IoT开发人员指南.

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

    您的部署deployment.json此部分与以下示例类似:

    { "targetArn": "targetArn", "deploymentName": "deploymentName", "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" }, "iotJobConfiguration": { "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 } } }
  7. (可选)添加标签 (tags) 部署。有关更多信息,请参阅 标记 Amazon IoT Greengrass Version 2 资源

  8. 运行以下命令以创建部署:deployment.json.

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

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