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

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

Amazon IoT Greengrass组件配方参考

组件配方是一个文件,用于定义组件的详细信息、依赖关系、工件和生命周期。组件生命周期指定要运行的命令来安装、运行和关闭组件,例如。这些区域有:Amazon IoT Greengrasscore 使用您在配方中定义的生命周期来安装和运行组件。这些区域有:Amazon IoT Greengrass在部署组件时,service 使用配方来标识要部署到核心设备的依赖项和工件。

在 recipe 中,您可以为组件支持的每个平台定义唯一的依赖关系和生命周期。您可以使用此功能将组件部署到具有不同要求的多个平台的设备。您还可以使用此选项来防止Amazon IoT Greengrass在不支持组件的设备上安装组件。

每个食谱包含一份明显的. 每个清单都指定了一组平台要求以及平台满足这些要求的核心设备使用的生命周期和工件。核心设备使用设备满足的平台要求的第一个清单。指定没有任何平台要求的清单以匹配任何核心设备。

您还可以指定不在清单中的全局生命周期。在全局生命周期中,你可以使用选择键标识生命周期的子部分。然后,您可以在清单中指定这些选择键,以便在清单的生命周期之外使用全局生命周期的那些部分。仅当清单未定义生命周期时,核心设备才会使用清单的选择键。您可以使用all在清单中选择以匹配全局生命周期的各个部分,而不使用选择键。

AfterAmazon IoT Greengrass核心软件选择与核心设备匹配的清单,它会执行以下操作来确定要使用的生命周期步骤:

  • 如果所选清单定义了生命周期,则核心设备将使用该生命周期。

  • 如果所选清单未定义生命周期,则核心设备将使用全局生命周期。核心设备执行以下操作来确定要使用的全局生命周期的哪些部分:

    • 如果清单定义了选择键,则核心设备将使用全局生命周期中包含清单的选择键的部分。

    • 如果清单未定义选择键,则核心设备将使用全局生命周期中没有选择键的部分。此行为等同于一个清单,它定义了allSELECT。

重要

核心设备必须至少符合一个清单的平台要求才能安装组件。如果没有与核心设备匹配的清单,那么Amazon IoT Greengrass核心软件不安装组件,部署失败。

你可以在中定义食谱JSON要么YAML格式的日期和时间。配方示例部分包含每种格式的配方。

配方格式

在为组件定义配方时,请在处方文档中指定以下信息。同样的结构适用于 YAML 和 JSON 格式的配方。

RecipeFormatVersion

处方的模板版本。选择以下选项:

  • 2020-01-25

ComponentName

此配方定义的组件名称。组件名称在您的中必须是唯一的Amazon Web Services 账户在每个区域。

提示
  • 使用反向域名格式,以避免公司内部的域名冲突。例如,如果你的公司拥有example.com你正在做一个太阳能项目,你可以给你的 Hello World 组件命名com.example.solar.HelloWorld. 这有助于避免公司内部的组件名称冲突。

  • 避免aws.greengrass在组件名称中添加前缀。Amazon IoT Greengrass将此前缀用于公共组件它提供的。如果选择与公共组件相同的名称,则您的组件将替换该组件。然后,Amazon IoT Greengrass在部署依赖于公共组件的组件时,会提供您的组件而不是公共组件。此功能允许您覆盖公共组件的行为,但如果您不打算覆盖公共组件,它也可以破坏其他组件。

ComponentVersion

组件版本。

注意

Amazon IoT Greengrass对组件使用语义版本。语义版本遵循重大的.未成年人.补丁数字系统。例如,版本1.0.0表示组件的第一个主要版本。有关更多信息,请参阅 。Semantic 版本规范.

ComponentDescription

(可选)组件的描述。

ComponentPublisher

组件的发布者或作者。

ComponentConfiguration

(可选)定义组件配置或参数的对象。定义默认配置,然后在部署组件时,可以指定要提供给该组件的配置对象。组件配置支持嵌套参数和结构。此对象包含以下信息:

DefaultConfiguration

为组件定义默认配置的对象。你定义这个对象的结构。

注意

Amazon IoT Greengrass使用 JSON 作为配置值。JSON 指定数字类型,但不区分整数和浮点数。因此,配置值可能会转换为浮点数Amazon IoT Greengrass. 为确保组件使用正确的数据类型,我们建议您将数字配置值定义为字符串。然后,让你的组件将它们解析为整数或浮点数。这样可以确保您的配置值在配置和核心设备上具有相同的类型。

ComponentDependencies

(可选)一个对象字典,每个对象定义组件的组件依赖关系。每个对象的 key 标识组件依赖项的名称。Amazon IoT Greengrass安装组件时安装组件依赖项。Amazon IoT Greengrass在启动组件之前等待依赖关系启动。每个对象包含以下信息:

VersionRequirement

npm 风格的语义版本约束,用于定义此依赖项的兼容组件版本。您可以指定一个版本或一系列版本。有关更多信息,请参阅 。npm 语义版本计算器.

DependencyType

(可选)此依赖项的类型。从以下选项中进行选择。

  • SOFT – 如果依赖项更改状态,组件不会重新启动。

  • HARD– 如果依赖项更改状态,组件将会重新启动。

默认值为 HARD

ComponentType

(可选)组件的类型。

注意

我们建议您不要在配方中指定组件类型。Amazon IoT Greengrass在创建组件时为您设置类型。

类型可以是下列类型之一:

  • aws.greengrass.generic— 组件运行命令或提供工件。

  • aws.greengrass.lambda— 组件运行 Lambda 函数Lambda 启动程序组件. 这些区域有:ComponentSource参数指定此组件运行的 Lambda 函数的 ARN。

    我们建议您不要使用此选项,因为它是由Amazon IoT Greengrass在从 Lambda 函数创建组件时。有关更多信息,请参阅 运行Amazon Lambda功能

  • aws.greengrass.plugin— 该组件与 Greengrass 核心在同一 Java 虚拟机 (JVM) 中运行。如果您部署或重启插件组件,Greengrass 核心将重新启动。

    插件组件使用与 Greengrass 核相同的日志文件。有关更多信息,请参阅 显示器Amazon IoT Greengrass圆木

    我们建议您不要在组件配方中使用此选项,因为它适用于Amazon-提供的用 Java 编写的直接与 Greengrass 核心交互的组件。有关哪些公共组件是插件的更多信息,请参阅Amazon-提供的组件.

  • aws.greengrass.nucleus— 原子核组件。有关更多信息,请参阅 Greengrass 核

    我们建议不要在组件配方中使用此选项。它旨在用于 Greengrass 原子核组件,它提供了Amazon IoT GreengrassCore 软件。

默认值为aws.greengrass.generic在从配方创建组件时,或aws.greengrass.lambda在从 Lambda 函数创建组件时。

有关更多信息,请参阅 组件类型

ComponentSource

(可选)组件运行的 Lambda 函数的 ARN。

我们建议您不要在配方中指定组件来源。Amazon IoT Greengrass在从 Lambda 函数创建组件时为您设置此参数。有关更多信息,请参阅 运行Amazon Lambda功能

Manifests

一个对象列表,每个对象定义了组件的生命周期、参数和平台要求。如果一个核心设备符合多个清单的平台要求,Amazon IoT Greengrass使用核心设备匹配的第一个清单。为确保核心设备使用正确的清单,请先定义具有更严格平台要求的清单。适用于所有平台的清单必须是列表中的最后一个清单。

重要

核心设备必须至少符合一个清单的平台要求才能安装组件。如果没有与核心设备匹配的清单,那么Amazon IoT Greengrass核心软件不安装组件,部署失败。

每个对象包含以下信息:

Name

(可选)此清单定义的平台的友好名称。

如果省略此参数,Amazon IoT Greengrass从平台创建一个名字osarchitecture.

Platform

(可选)定义应用此清单的平台的对象。忽略此参数可定义适用于所有平台的清单。

此对象指定有关核心设备运行平台的键值对。部署此组件时,Amazon IoT Greengrass核心软件将这些键值对与核心设备上的平台属性进行比较。这些区域有:Amazon IoT GreengrassCore 软件总是定义osarchitecture,它可能会定义其他属性。部署 Greengrass 核心组件时,可以为核心设备指定自定义平台属性。有关更多信息,请参阅 。平台overrides 参数Greengrass 核组件.

对于每个键/值对,可以指定以下值之一:

  • 精确值,例如linux要么windows. 精确值必须以字母或数字开头。

  • *,它匹配任何值。当值不存在时,这也会匹配。

  • 一个 Java 风格的正则表达式,例如/windows|linux/. 正则表达式必须以斜杠字符 (/)。例如,正则表达式/.+/匹配任何非空值。

此对象包含以下信息:

os

(可选)此清单支持的平台的操作系统的名称。常见平台包括如下值:

  • linux

  • windows

  • darwin (macOS)

architecture

(可选)此清单支持的平台的处理器架构。常见架构包括如下值:

  • amd64

  • arm

  • aarch64

  • x86

key

(可选)您为此清单定义的平台属性。Replace密钥使用平台属性的名称。这些区域有:Amazon IoT Greengrass核心软件将此平台属性与您在 Greengrass 核心组件配置中指定的键值对进行匹配。有关更多信息,请参阅 。平台overrides 参数Greengrass 核组件.

提示

使用反向域名格式,以避免公司内部的域名冲突。例如,如果你的公司拥有example.com你正在做一个电台项目,你可以命名一个自定义的平台属性com.example.radio.RadioModule. 这有助于避免公司内部的平台属性名称冲突。

例如,您可能定义一个平台属性,com.example.radio.RadioModule,以根据核心设备上可用的无线电模块指定不同的清单。每个清单可以包含适用于不同硬件配置的不同构件,因此您可以将最少的软件集部署到核心设备。

Lifecycle

定义如何在此清单定义的平台上安装和运行组件的对象或字符串。您还可以定义一个全局生命周期,适用于所有平台。仅当要使用的清单未指定生命周期时,核心设备才使用全局生命周期。

注意

您可以在清单中定义此生命周期。您在此处指定的生命周期步骤仅适用于此清单定义的平台。您还可以定义一个全局生命周期,适用于所有平台。

此对象或字符串包含以下信息:

Setenv

(可选)提供给所有生命周期脚本的环境变量字典。您可以使用以下命令覆盖这些环境变量Setenv在每个生命周期脚本中。

Install

(可选)定义安装组件时要运行的脚本的对象或字符串。这些区域有:Amazon IoT Greengrass每次软件启动时,核心软件也会运行此生命周期步骤。

如果Install脚本退出并显示成功代码,则组件进入INSTALLED状态。

此对象或字符串包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径中是否有可执行文件或文件是否存在。如果输出为 true,那么Amazon IoT Greengrass核心软件跳过了这一步。从以下检查中进行选择:

  • onpath runnable— 检查系统路径上是否有可运行的对象。例如,使用onpath python3在 Python 3 可用时跳过此生命周期步骤。

  • exists file— 检查文件是否存在。例如,使用exists /tmp/my-configuration.db跳过此生命周期步骤/tmp/my-configuration.db存在。

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认值:120 秒

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Run

(可选)定义组件启动时要运行的脚本的对象或字符串。

组件进入RUNNING状态此生命周期步骤的运行时间。如果Run脚本退出并显示成功代码,则组件进入FINISHED状态。

依赖于此组件的组件将在此生命周期步骤运行时启动。要运行后台进程,例如依赖组件使用的服务,请使用Startup而是生命周期步骤。

当您使用部署组件时Run生命周期,核心设备可以在此生命周期脚本运行后立即报告部署完成。因此,即使Run生命周期脚本在运行后不久就会失败。如果希望部署状态取决于组件的启动脚本的结果,请使用Startup而是生命周期步骤。

注意

您只能定义一个Startup要么Run生命周期。

此对象或字符串包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径中是否有可执行文件或文件是否存在。如果输出为 true,那么Amazon IoT Greengrass核心软件跳过了这一步。从以下检查中进行选择:

  • onpath runnable— 检查系统路径上是否有可运行的对象。例如,使用onpath python3在 Python 3 可用时跳过此生命周期步骤。

  • exists file— 检查文件是否存在。例如,使用exists /tmp/my-configuration.db跳过此生命周期步骤/tmp/my-configuration.db存在。

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认情况下,此生命周期步骤不会超时。如果你省略了这个超时,Run脚本一直运行直到它退出。

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Startup

(可选)定义组件启动时要运行的后台进程的对象或字符串。

使用Startup运行必须成功退出的命令或将组件的状态更新为RUNNING在相关组件可以启动之前。使用UpdateState将组件的状态设置为 IPC 操作RUNNING要么ERRORED当组件启动一个不退出的脚本时。例如,您可能定义一个Startup启动 MySQL 进程的步骤/etc/init.d/mysqld start.

组件进入STARTING状态此生命周期步骤的运行时间。如果Startup脚本退出并显示成功代码,则组件进入RUNNING状态。然后,依赖组件就可以启动了。

当您使用部署组件时Startup生命周期,核心设备可以在此生命周期脚本退出或报告其状态后将部署报告为已完成。换言之,部署的状态为IN_PROGRESS直到所有组件的启动脚本退出或报告状态。

注意

您只能定义一个Startup要么Run生命周期。

此对象或字符串包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径中是否有可执行文件或文件是否存在。如果输出为 true,那么Amazon IoT Greengrass核心软件跳过了这一步。从以下检查中进行选择:

  • onpath runnable— 检查系统路径上是否有可运行的对象。例如,使用onpath python3在 Python 3 可用时跳过此生命周期步骤。

  • exists file— 检查文件是否存在。例如,使用exists /tmp/my-configuration.db跳过此生命周期步骤/tmp/my-configuration.db存在。

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认值:120 秒

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Shutdown

(可选)定义组件关闭时要运行的脚本的对象或字符串。

如果你在中启动后台进程Startup,使用Shutdown步骤在组件关闭时停止该进程。例如,您可能定义一个Shutdown停止 MySQL 进程的步骤/etc/init.d/mysqld stop.

组件进入STOPPING状态此生命周期步骤的运行时间。

此对象或字符串包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径中是否有可执行文件或文件是否存在。如果输出为 true,那么Amazon IoT Greengrass核心软件跳过了这一步。从以下检查中进行选择:

  • onpath runnable— 检查系统路径上是否有可运行的对象。例如,使用onpath python3在 Python 3 可用时跳过此生命周期步骤。

  • exists file— 检查文件是否存在。例如,使用exists /tmp/my-configuration.db跳过此生命周期步骤/tmp/my-configuration.db存在。

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认值:15 秒。

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Recover

(可选)定义组件遇到错误时要运行的脚本的对象或字符串。

此步骤在组件进入ERRORED状态。如果组件变成ERRORED三次未成功恢复,组件更改为BROKEN状态。修复一个BROKEN组件,则必须重新部署它。

此对象或字符串包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径中是否有可执行文件或文件是否存在。如果输出为 true,那么Amazon IoT Greengrass核心软件跳过了这一步。从以下检查中进行选择:

  • onpath runnable— 检查系统路径上是否有可运行的对象。例如,使用onpath python3在 Python 3 可用时跳过此生命周期步骤。

  • exists file— 检查文件是否存在。例如,使用exists /tmp/my-configuration.db跳过此生命周期步骤/tmp/my-configuration.db存在。

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认值:60 秒。

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Bootstrap

(可选)定义脚本的对象或字符串,该脚本需要Amazon IoT Greengrass要重启的核心软件或核心设备。这样,您就可以开发一个在安装操作系统更新或运行时更新后执行重启的组件。

注意

要安装不需要的更新或依赖项Amazon IoT Greengrass要重启的核心软件或设备,请使用安装生命周期.

在以下情况下,此生命周期步骤在安装生命周期步骤之前运行Amazon IoT Greengrass核心软件部署组件:

  • 该组件首次部署到核心设备。

  • 组件版本更改了。

  • 引导脚本会随着组件配置的更新而改变。

AfterAmazon IoT Greengrass核心软件完成部署中具有引导步骤的所有组件的引导步骤,软件将重新启动。

重要

您必须配置Amazon IoT Greengrass核心软件作为系统服务来重新启动Amazon IoT GreengrassCore 软件或核心设备。如果你没有配置Amazon IoT Greengrass核心软件作为系统服务,软件不会重启。有关更多信息,请参阅 将 Greengrass 核心配置为系统服务

此对象或字符串包含以下信息:

Script

要运行的脚本。此脚本的退出代码定义了重启指令。使用以下退出代码:

  • 0— 不要重启Amazon IoT GreengrassCore 软件或核心设备。这些区域有:Amazon IoT Greengrass所有组件启动后,核心软件仍会重新启动。

  • 100— 请求重新启动Amazon IoT GreengrassCore 软件。

  • 101— 请求重启核心设备。

退出代码 100 到 199 是为特殊行为保留的。其他退出代码表示脚本错误。

RequiresPrivilege

(可选)您可以使用 root 权限运行脚本。如果将此选项设置为,则设置为true,然后是Amazon IoT Greengrass核心软件以 root 用户身份运行此生命周期脚本,而不是您配置为运行此组件的系统用户。默认值为 false

Timeout

(可选)脚本在运行前可用来运行的最长时间(以秒为单位)Amazon IoT Greengrass核心软件终止该进程。

默认值:120 秒 120 秒

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在中提供的变量Lifecycle.Setenv.

Selections

(可选)选择键的列表,用于指定全局生命周期为这个清单运行。在全局生命周期中,您可以使用任意级别的选择键定义生命周期步骤,以选择生命周期的子部分。然后,核心设备使用与此清单中的选择键匹配的部分。有关更多信息,请参阅 。全局生命周期示例.

重要

仅当此清单未定义生命周期时,核心设备才会使用全局生命周期中的选择。

您可以指定allselection 键来运行全局生命周期中没有选择键的部分。

Artifacts

(可选)一个对象列表,每个对象都为此清单所定义的平台上的组件定义一个二进制项目。例如,您可以将代码或图像定义为构件。

当组件部署时,Amazon IoT Greengrass核心软件将工件下载到核心设备上的文件夹。您还可以将构件定义为软件在下载后提取的存档文件。

您可以使用配方变量以获取核心设备上安装构件的文件夹的路径。

  • 普通文件 — 使用工件:路径配方变量获取包含构件的文件夹的路径。例如,指定:指定{artifacts:path}/my_script.py在配方中获取具有 URI 的工件的路径s3://DOC-EXAMPLE-BUCKET/path/to/my_script.py.

  • 提取的档案 — 使用工件:decompressedPath 配方变量以获取包含提取的归档文件的文件夹。这些区域有:Amazon IoT Greengrass核心软件将每个档案解压缩到与档案同名的文件夹中。例如,指定{artifacts:decompressedPath}/my_archive/my_script.py在食谱中找到通往的道路my_script.py在具有 URI 的存档项目中s3://DOC-EXAMPLE-BUCKET/path/to/my_archive.zip.

注意

在本地核心设备上开发带有存档工件的组件时,可能没有该构件的 URI。使用测试组件Unarchive选项,则指定文件名与存档工件文件的名称匹配的 URI。您可以指定要将存档项目上传到的 URI,也可以指定新的占位符 URI。例如,要提取my_archive.zip构件在本地部署期间,您可以指定s3://DOC-EXAMPLE-BUCKET/my_archive.zip.

每个对象包含以下信息:

URI

S3 存储桶中构件的 URI。这些区域有:Amazon IoT Greengrass核心软件会在安装组件时从此 URI 中提取工件,除非该工件已存在于设备上。每个项目在每个清单中都必须具有唯一的文件名。

Unarchive

(可选)要解压缩的档案类型。从以下选项中进行选择:

  • NONE— 该文件不是要解压缩的存档。这些区域有:Amazon IoT Greengrass核心软件将构件安装到核心设备上的文件夹。您可以使用工件:路径配方变量获取此文件夹的路径。

  • ZIP— 此文件是一个 ZIP 存档。这些区域有:Amazon IoT Greengrass核心软件将档案解压到与档案同名的文件夹中。您可以使用工件:decompressedPath 配方变量获取包含此文件夹的文件夹的路径。

默认值为 NONE

Permission

(可选)定义要为此项目文件设置的访问权限的对象。您可以设置读取权限和执行权限。

注意

您无法设置写入权限,因为Amazon IoT Greengrass核心软件不允许组件编辑 artifacts 文件夹中的工件文件。要编辑组件中的工件文件,请将其复制到其他位置,或者发布并部署新的构件文件。

如果将工件定义为要解压缩的存档,那么Amazon IoT Greengrass核心软件对从存档中解压缩的文件设置这些访问权限。这些区域有:Amazon IoT Greengrass核心软件将文件夹的访问权限设置为ALL为了ReadExecute. 这允许组件查看文件夹中解压缩的文件。要为存档中的单个文件设置权限,可以在安装生命周期脚本.

此对象包含以下信息:

Read

(可选)要为此项目文件设置的读取权限。要允许其他组件(例如依赖于此组件的组件)访问此构件,请指定ALL. 从以下选项中进行选择:

  • NONE— 文件不可读。

  • OWNER— 配置为运行此组件的系统用户可以读取该文件。

  • ALL— 所有用户均可读取该文件。

默认值为 OWNER

Execute

(可选)要为此项目文件设置的运行权限。这些区域有:Execute权限意味着Read权限。例如,如果您指定ALL为了Execute,则所有用户都可以读取和运行此工件文件。

从以下选项中进行选择:

  • NONE— 该文件不可运行。

  • OWNER— 该文件可由您配置为运行该组件的系统用户运行。

  • ALL— 该文件可由所有用户运行。

默认值为 NONE

Digest

(只读)构件的加密摘要哈希。创建组件时,Amazon IoT Greengrass使用哈希算法来计算工件文件的哈希值。然后,在部署组件时,Greengrass 核计算下载的构件的哈希值,并将哈希值与该摘要进行比较,以便在安装之前验证工件。如果哈希与摘要不匹配,则部署失败。

如果你设置了这个参数,Amazon IoT Greengrass替换在创建组件时设置的值。

Algorithm

(只读)哈希算法Amazon IoT Greengrass用于计算工件的摘要哈希。

如果你设置了这个参数,Amazon IoT Greengrass替换在创建组件时设置的值。

Lifecycle

定义如何安装和运行组件的对象。核心设备仅在以下情况下才使用全局生命周期表现to use 没有指定生命周期。

注意

您可以在清单之外定义此生命周期。您还可以定义一个清单生命周期适用于与该清单匹配的平台。

在全局生命周期中,您可以指定特定时间运行的生命周期选择键你在每个清单中指定。选择键是用于标识要为每个清单运行的全局生命周期各个部分的字符串。

这些区域有:all选择键是任何没有选择键的部分的默认值。这意味着,您可以指定all清单中的 selection 键以在没有选择键的情况下运行全局生命周期的各个部分。您不需要指定all全局生命周期中的选择键。

如果清单未定义生命周期或选择键,则核心设备默认使用allSELECT。这意味着在这种情况下,核心设备使用全局生命周期中不使用选择键的部分。

此对象包含与清单生命周期,但你可以在任何级别指定选择键来选择生命周期的子部分。

提示

我们建议您对每个选择键仅使用小写字母,以避免选择键和生命周期键之间发生冲突。生命周期密钥以大写字母开头。

例 使用顶级选择键的全局生命周期示例

Lifecycle: key1: Install: Skipif: onpath executable | exists file Script: command1 key2: Install: Script: command2 all: Install: Script: command3

例 具有底层选择键的全局生命周期示例

Lifecycle: Install: Script: key1: command1 key2: command2 all: command3

例 具有多级选择键的全局生命周期示例

Lifecycle: key1: Install: Skipif: onpath executable | exists file Script: command1 key2: Install: Script: command2 all: Install: Script: key3: command3 key4: command4 all: command5

配方变量

配方变量公开来自当前成分和核的信息,供您在配方中使用。例如,您可以使用 recipe 变量将组件配置参数传递给在生命周期脚本中运行的应用程序。

您可以在组件配方的以下部分中使用配方变量:

使用配方变量{recipe_variable}语法。大括号表示配方变量。

Amazon IoT Greengrass支持以下配方变量:

component_dependency_name:configuration:json_pointer

此配方定义的组件或此组件所依赖的组件的配置参数值。

您可以使用此变量为在组件生命周期中运行的脚本提供参数。

注意

Amazon IoT Greengrass仅在组件生命周期定义中支持此 recipe 变量。

此配方变量具有以下输入:

  • component_dependency_name—(可选)要查询的组件依赖项的名称。忽略此区段可查询此配方定义的组件。您只能指定直接依赖项。

  • json_pointer— 指向要评估的配置值的 JSON 指针。JSON 指针以正斜杠开头/. 要标识嵌套组件配置中的值,请使用正斜杠 (/) 来分隔配置中每个级别的密钥。您可以使用数字作为键来指定列表中的索引。有关更多信息,请参阅 。JSON 指针规范.

    Amazon IoT Greengrass核心使用 JSON 指针作为 YAML 格式的配方。

JSON 指针可以引用以下节点类型:

  • 值节点。Amazon IoT GreengrassCore 使用值的字符串表示形式替换 recipe 变量。Null 值转换为null字符串。

  • 一个对象节点。Amazon IoT GreengrassCore 使用该对象的序列化 JSON 字符串表示形式替换 recipe 变量。

  • 没有节点。Amazon IoT GreengrassCore 不会替换配方变量。

例如,{configuration:/Message}recipe 变量检索Message组件配置中的键。这些区域有:{com.example.MyComponentDependency:configuration:/server/port}recipe 变量检索port中的server组件依赖项的配置对象。

component_dependency_name:artifacts:path

此配方定义的组件或该组件所依赖的组件的工件的根路径。

安装组件时,Amazon IoT Greengrass将组件的工件复制到此变量公开的文件夹中。例如,您可以使用此变量来标识要在组件生命周期中运行的脚本的位置。

此路径处的文件夹是只读的。要修改工件文件,请将文件复制到其他位置,例如当前工作目录 ($PWD要么.)。然后,修改那里的文件。

要从组件依赖项读取或运行工件,该构件是Read要么Execute权限必须为ALL. 有关更多信息,请参阅 。Artifact你在组件配方中定义的。

此配方变量具有以下输入:

  • component_dependency_name—(可选)要查询的组件依赖项的名称。忽略此区段可查询此配方定义的组件。您只能指定直接依赖项。

component_dependency_name:artifacts:decompressedPath

此配方定义的组件或该组件所依赖的组件的解压缩存档项目的根路径。

安装组件时,Amazon IoT Greengrass将组件的存档项目解压缩到此变量公开的文件夹中。例如,您可以使用此变量来标识要在组件生命周期中运行的脚本的位置。

每个构件都解压缩到解压缩路径中的一个文件夹,该文件夹与工件的名称相同,但不包括其扩展名。例如,名为的 ZIP 工件models.zip打开包装{artifacts:decompressedPath}/modelsfolder。

此路径处的文件夹是只读的。要修改工件文件,请将文件复制到其他位置,例如当前工作目录 ($PWD要么.)。然后,修改那里的文件。

要从组件依赖项读取或运行工件,该构件是Read要么Execute权限必须为ALL. 有关更多信息,请参阅 。Artifact你在组件配方中定义的。

此配方变量具有以下输入:

  • component_dependency_name—(可选)要查询的组件依赖项的名称。忽略此区段可查询此配方定义的组件。您只能指定直接依赖项。

component_dependency_name:work:path

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

此配方定义的组件或此组件所依赖的组件的工作路径。此配方变量的值等于$PWD环境变量和PWD从组件的上下文运行时的命令。

您可以使用此 recipe 变量在组件和依赖项之间共享文件。

此路径中的文件夹可由此配方定义的组件以及以同一用户和组运行的其他组件读取和写入。

此配方变量具有以下输入:

  • component_dependency_name—(可选)要查询的组件依赖项的名称。忽略此区段可查询此配方定义的组件。您只能指定直接依赖项。

kernel:rootPath

这些区域有:Amazon IoT Greengrass核心根路径。

iot:thingName

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

核心设备的名称Amazon IoTthing。

配方

您可以参考以下配方示例来帮助您为组件创建配方。

Amazon IoT Greengrass策划了一个名为 Greengrass 软件目录的 Greengrass 组件索引。该目录跟踪格林格拉斯社区开发的 Greengrass 组件。在此目录中,您可以下载、修改和部署组件,以创建 Greengrass 应用程序。有关更多信息,请参阅 社区组件

Hello World 组件食

以下配方描述了一个运行 Python 脚本的 Hello World 组件。此组件支持所有平台并接受Message参数Amazon IoT Greengrass将作为参数传入到 Python 脚本。这是 Hello World 组件的配方入门教程.

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first Amazon IoT Greengrass component.", "ComponentPublisher": "Amazon", "ComponentConfiguration": { "DefaultConfiguration": { "Message": "world" } }, "Manifests": [ { "Platform": { "os": "linux" }, "Lifecycle": { "Run": "python3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } }, { "Platform": { "os": "windows" }, "Lifecycle": { "Run": "py -3 -u {artifacts:path}/hello_world.py \"{configuration:/Message}\"" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.HelloWorld ComponentVersion: '1.0.0' ComponentDescription: My first Amazon IoT Greengrass component. ComponentPublisher: Amazon ComponentConfiguration: DefaultConfiguration: Message: world Manifests: - Platform: os: linux Lifecycle: Run: | python3 -u {artifacts:path}/hello_world.py "{configuration:/Message}" - Platform: os: windows Lifecycle: Run: | py -3 -u {artifacts:path}/hello_world.py "{configuration:/Message}"

Python 运行时组件示例

以下配方描述了一个安装 Python 的组件。此组件支持 64 位 Linux 设备。

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.PythonRuntime", "ComponentDescription": "Installs Python 3.7", "ComponentPublisher": "Amazon", "ComponentVersion": "3.7.0", "Manifests": [ { "Platform": { "os": "linux", "architecture": "amd64" }, "Lifecycle": { "Install": "apt-get update\napt-get install python3.7" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.PythonRuntime ComponentDescription: Installs Python 3.7 ComponentPublisher: Amazon ComponentVersion: '3.7.0' Manifests: - Platform: os: linux architecture: amd64 Lifecycle: Install: | apt-get update apt-get install python3.7

指定多个字段的组件配方

以下组件处方使用多个处方字段。

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.FooService", "ComponentDescription": "Complete recipe for Amazon IoT Greengrass components", "ComponentPublisher": "Amazon", "ComponentVersion": "1.0.0", "ComponentConfiguration": { "DefaultConfiguration": { "TestParam": "TestValue" } }, "ComponentDependencies": { "BarService": { "VersionRequirement": "^1.1.0", "DependencyType": "SOFT" }, "BazService": { "VersionRequirement": "^2.0.0" } }, "Manifests": [ { "Platform": { "os": "linux", "architecture": "amd64" }, "Lifecycle": { "Install": { "Skipif": "onpath git", "Script": "sudo apt-get install git" } }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/hello_world.zip", "Unarchive": "ZIP" }, { "URI": "s3://DOC-EXAMPLE-BUCKET/hello_world_linux.py" } ] }, { "Lifecycle": { "Install": { "Skipif": "onpath git", "Script": "sudo apt-get install git", "RequiresPrivilege": "true" } }, "Artifacts": [ { "URI": "s3://DOC-EXAMPLE-BUCKET/hello_world.py" } ] } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.FooService ComponentDescription: Complete recipe for Amazon IoT Greengrass components ComponentPublisher: Amazon ComponentVersion: '1.0.0' ComponentConfiguration: DefaultConfiguration: TestParam: TestValue ComponentDependencies: BarService: VersionRequirement: ^1.1.0 DependencyType: SOFT BazService: VersionRequirement: ^2.0.0 Manifests: - Platform: os: linux architecture: amd64 Lifecycle: Install: Skipif: onpath git Script: sudo apt-get install git Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/hello_world.zip Unarchive: ZIP - URI: s3://DOC-EXAMPLE-BUCKET/hello_world_linux.py - Lifecycle: Install: Skipif: onpath git Script: sudo apt-get install git RequiresPrivilege: true Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/hello_world.py