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

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

Amazon IoT Greengrass组件配方参考

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

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

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

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

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

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

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

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

    • 如果清单没有定义选择键,核心设备将使用全局生命周期中没有选择键的部分。此行为等效于定义allSelection.

重要

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

您可以在JSON或者YAML格式的日期和时间。配方示例部分包含每种格式的配方。

配方格式

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

RecipeFormatVersion

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

  • 2020-01-25

ComponentName

此配方定义的组件名称。组件名称在 Amazon Web Services 账户 在每个区域。

Tips
  • 使用反向域名格式以避免公司内部的域名冲突。例如,如果您的公司拥有example.com你从事太阳能项目,你可以命名你的 Hello World 组件com.example.solar.HelloWorld. 这有助于避免公司内部的组件名称冲突。

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

ComponentVersion

组件版本。

注意

Amazon IoT Greengrass使用组件的语义版本。语义版本遵循主要.次要.patch数字系统。例如,版本1.0.0表示组件的第一个主要版本。有关更多信息,请参阅 。语义版本规范.

ComponentDescription

(可选)组件的描述。

ComponentPublisher

组件的发布者或作者。

ComponentConfiguration

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

DefaultConfiguration

为组件定义默认配置的对象。定义此对象的结构。

注意

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

ComponentDependencies

(可选)对象的字典,每个对象定义组件的组件依赖关系。每个对象的键标识组件依赖关系的名称。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 GreengrassCore 软件日志

    我们不建议您在组件配方中使用此选项,因为它适用于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 Greengrass核心软件始终定义osarchitecture,并且它可能会定义其他属性。部署 Greengrass 核心组件时,您可以为核心设备指定自定义平台属性。有关更多信息,请参阅 。平台覆盖参数Greengrass 核组件.

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

  • 一个精确的值,例如linux. 确切值必须以字母或数字开头。

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

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

此对象包含以下信息:

os

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

  • linux

  • darwin (macOS)

architecture

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

  • amd64

  • arm

  • aarch64

  • x86

key

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

提示

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

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

Lifecycle

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

注意

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

此对象包含以下信息:

Setenv

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

Bootstrap

(可选)一个对象,用于定义在Amazon IoT Greengrass核心软件部署组件。此生命周期步骤在安装生命周期步骤在以下情况下:

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

  • 组件版本发生变化。

  • 引导脚本将随组件配置更新而发生变化。

您可以使用此生命周期步骤重新启动Amazon IoT Greengrass核心软件或重新启动核心设备。这样,您就可以开发一个组件,该组件在安装操作系统更新或运行时更新后执行重新启动。

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

重要

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

此对象包含以下信息:

Script

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

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

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

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

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

RequiresPrivilege

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

Timeout

(可选)脚本在Amazon IoT Greengrass核心软件终止进程。

默认值:120 秒

Setenv

(可选)要提供给脚本的环境变量字典。这些环境变量会覆盖您在Lifecycle.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生命周期步骤。

注意

您只能定义一个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来运行一个必须成功退出的命令,然后才能启动相关组件。例如,您可能定义Startup步骤来启动 MySQL 进程/etc/init.d/mysqld start.

组件将进入STARTING状态时,此生命周期步骤运行。如果Startup脚本退出并带有成功代码,则组件将输入RUNNING状态。然后,从属组件可以启动。

注意

您只能定义一个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.

Selections

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

重要

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

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

Artifacts

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

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

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

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

  • 提取的归档文件 — 使用对象:解压缩路径配方变量来获取包含已解压缩存档项目的文件夹。这些区域有: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核心软件将归档文件提取到与归档文件名称相同的文件夹中。您可以使用对象:解压缩路径配方变量获取包含此文件夹的文件夹的路径。

默认值为 NONE

Permission

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

注意

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

如果将工件定义为要解压缩的归档文件,则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

定义组件安装和运行方式的对象。核心设备仅在清单不会指定生命周期。

注意

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

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

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

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

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

提示

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

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

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_variable}语法。花括号表示配方变量。

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

component_dependency_name:configuration:json_pointer

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

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

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

  • component_dependency_name—(可选)要查询的组件依赖关系的名称。省略此段可查询此处方定义的组件。只能指定直接依赖关系。

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

    Amazon IoT Greengrass核心使用 JSON 指针来处理 YAML 格式的配方。

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

  • 值节点。Amazon IoT GreengrassCore 将处方变量替换为值的字符串表示形式。Null 值转换为null作为字符串。

  • 对象节点。Amazon IoT GreengrassCore 将配方变量替换为该对象的序列化 JSON 字符串表示形式。

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

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

component_dependency_name:artifacts:path

此处方定义的组件或此组件所依赖的组件的对象的根路径。

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

此路径中的文件夹为只读文件夹。要修改工件文件,请将文件复制到另一个位置,例如当前工作目录 ($PWD或者.)。然后,修改那里的文件。

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

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

  • component_dependency_name—(可选)要查询的组件依赖关系的名称。省略此段可查询此处方定义的组件。只能指定直接依赖关系。

component_dependency_name:artifacts:decompressedPath

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

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

每个对象解压缩到解压缩路径中的一个文件夹,其中该文件夹的名称与对象相同,减去其扩展名。例如,名为models.zip解压缩到{artifacts:decompressedPath}/modelsfolder。

此路径中的文件夹为只读文件夹。要修改工件文件,请将文件复制到另一个位置,例如当前工作目录 ($PWD或者.)。然后,修改那里的文件。

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

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

  • component_dependency_name—(可选)要查询的组件依赖关系的名称。省略此段可查询此处方定义的组件。只能指定直接依赖关系。

component_dependency_name:work:path

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

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

您可以使用此配方变量在组件和依赖关系之间共享文件。

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

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

  • component_dependency_name—(可选)要查询的组件依赖关系的名称。省略此段可查询此处方定义的组件。只能指定直接依赖关系。

kernel:rootPath

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

iot:thingName

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

核心设备的Amazon IoT事物。

配方示例

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

Hello World 组件配方

以下配方介绍运行 Python 脚本的 Hello World 组件。此组件支持 Linux 并接受Message的参数Amazon IoT Greengrass将作为参数传递给 Python 脚本。这是 “你好世界” 组件在入门教程.

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}'" } } ] }
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}'

Python 运行时组件示例

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

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.PythonRuntime", "ComponentDescription": "Installs Python 3.7", "ComponentPublisher": "Amazon", "ComponentVersion": "1.1.0", "Manifests": [ { "Platform": { "os": "linux", "architecture": "amd64" }, "Lifecycle": { "Install": "apt-get install python3.7" } } ] }
YAML
--- RecipeFormatVersion: '2020-01-25' ComponentName: com.example.PythonRuntime ComponentDescription: Installs Python 3.7 ComponentPublisher: Amazon ComponentVersion: '1.1.0' Manifests: - Platform: os: linux architecture: amd64 Lifecycle: Install: 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-world2.py" } ] }, { "Lifecycle": { "Start": { "Skipif": "onpath git", "Script": "sudo apt-get install git" } }, "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-world2.py - Lifecycle: Install: Skipif: onpath git Script: sudo apt-get install git Artifacts: - URI: s3://DOC-EXAMPLE-BUCKET/hello_world.py