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

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

AWS IoT Greengrass 组件配方

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

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

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

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

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

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

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

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

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

重要

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

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

配方格式

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

RecipeFormatVersion

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

  • 2020-01-25

ComponentName

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

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

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

ComponentVersion

组件版本。

注意

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

ComponentDescription

(可选)组件的描述。

ComponentPublisher

组件的发布者或作者。

ComponentConfiguration

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

DefaultConfiguration

定义组件名称的对象。您可以定义此对象的结构。

注意

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

ComponentDependencies

(可选)对象的字典,每个对象定义组件的组件依赖关系。每个对象的键标识组件依赖关系的名称。AWS IoT Greengrass 将在组件安装时安装组件依赖关系。AWS IoT Greengrass 将等待依赖关系启动,然后再启动组件。每个对象包含以下信息:

VersionRequirement

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

DependencyType

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

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

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

默认值为 HARD

Manifests

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

重要

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

每个对象包含以下信息:

Name

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

如果省略此参数,AWS IoT Greengrass 会从平台创建名称osarchitecture

Platform

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

此对象指定有关运行核心设备的平台的键值对。当您部署此组件时,AWS IoT Greengrass Core 软件会将这些键值对与核心设备上的平台属性进行比较。AWS IoT Greengrass 核心软件始终定义了osarchitecture,并且它可能会定义其他属性。部署 Greengrass 核心组件时,您可以为核心设备指定自定义平台属性。有关更多信息,请参阅 。平台覆盖参数Greengrass

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

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

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

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

此对象包含以下信息:

os

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

  • linux

  • darwin (macOS)

architecture

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

  • amd64

  • arm

  • aarch64

  • x86

key

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

提示

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

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

Lifecycle

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

注意

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

此对象包含以下信息:

Setenv

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

Bootstrap

(可选)一个对象,用于定义 AWS IoT Greengrass Core 软件部署组件时要运行的脚本。此生命周期步骤在安装生命周期步骤在以下情况下:

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

  • 组件版本发生变化。

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

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

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

重要

您必须将 AWS IoT Greengrass 核心软件配置为系统服务,以重新启动 AWS IoT Greengrass 核心软件或核心设备。如果您不将 AWS IoT Greengrass Core 软件配置为系统服务,则软件将不会重新启动。有关更多信息,请参阅 将 AWS IoT Greengrass 配置为系统服务

此对象包含以下信息:

Script

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

  • 0— 不要重新启动 AWS IoT Greengrass 核心软件或核心设备。在所有组件引导之后,AWS IoT Greengrass 核心软件仍然重新启动。

  • 100— 请求重新启动 AWS IoT Greengrass 核心软件。

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

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

RequiresPrivilege

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

Timeout

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

默认值:120 秒

Setenv

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

Install

(可选)定义安装组件时要运行的脚本的对象。AWS IoT Greengrass 核心软件在每次启动软件时也会运行此生命周期步骤。

如果Install脚本退出并带有成功代码,则组件将输入INSTALLED状态。

此对象包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

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

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查路径上是否存在可执行文件或是否存在文件。如果输出为真,则 AWS IoT Greengrass 核心软件将跳过该步骤。从以下检查中进行选择:

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

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

Timeout

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

默认值:120 秒

Setenv

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

Run

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

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

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

注意

您只能定义一个Startup或者Run生命周期。

此对象包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

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

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查可执行文件是否在路径上或文件是否存在。如果输出为真,则 AWS IoT Greengrass 核心软件将跳过该步骤。从以下检查中进行选择:

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

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

Timeout

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

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

Setenv

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

Startup

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

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

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

注意

您只能定义一个Startup或者Run生命周期。

此对象包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

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

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查可执行文件是否在路径上或文件是否存在。如果输出为真,则 AWS IoT Greengrass 核心软件将跳过该步骤。从以下检查中进行选择:

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

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

Timeout

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

默认值:120 秒

Setenv

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

Shutdown

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

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

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

此对象包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

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

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查可执行文件是否在路径上或文件是否存在。如果输出为真,则 AWS IoT Greengrass 核心软件将跳过该步骤。从以下检查中进行选择:

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

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

Timeout

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

默认值:15 秒。

Setenv

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

Recover

(可选)一个对象,用于定义组件遇到错误时要运行的脚本。

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

此对象包含以下信息:

Script

要运行的脚本。

RequiresPrivilege

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

Skipif

(可选)用于确定是否运行脚本的检查。您可以定义以检查可执行文件是否在路径上或文件是否存在。如果输出为真,则 AWS IoT Greengrass 核心软件将跳过该步骤。从以下检查中进行选择:

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

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

Timeout

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

默认值:60 秒。

Setenv

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

Selections

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

重要

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

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

Artifacts

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

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

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

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

  • 提取的归档文件 — 使用对象:解压缩路径配方变量以获取包含已解压缩存档项的文件夹的路径。AWS IoT Greengrass Core 软件将每个档案提取到与归档文件名称相同的文件夹中。例如,指定{artifacts:decompressedPath}/my_archive/my_script.py在配方中获取my_script.py在具有 URI 的归档工件中s3://DOC-EXAMPLE-BUCKET/path/to/my_artifact.zip

注意

在本地核心设备上使用归档工件开发组件时,可能没有该工件的 URI。使用Unarchive选项,请指定一个 URI,其中文件名与存档工件文件的名称匹配。您可以指定要上传档案对象的 URI,也可以指定新的占位符 URI。例如,要提取my_archive.zip工件,您可以指定s3://DOC-EXAMPLE-BUCKET/my_archive.zip

每个对象包含以下信息:

URI

S3 存储桶中对象的 URI。AWS IoT Greengrass Core 软件会在组件安装时从此 URI 获取工件,除非该工件已存在于设备上。每个工件必须在每个清单中具有唯一的文件名。

Unarchive

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

  • NONE— 该文件不是要解压缩的归档文件。AWS IoT Greengrass 核心软件将工件安装到核心设备上的文件夹中。您可以使用对象:路径配方变量获取此文件夹的路径。

  • ZIP— 该文件是 ZIP 存档。AWS IoT Greengrass 核心软件将归档文件提取到与归档文件名称相同的文件夹中。您可以使用对象:解压缩路径配方变量来获取包含此文件夹的路径。

默认值为 NONE

Permission

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

注意

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

如果您将工件定义为要解压缩的归档文件,则 AWS IoT Greengrass Core 软件将对其从存档中解包的文件设置这些访问权限。AWS IoT Greengrass 核心软件将文件夹的访问权限设置为ALL对于 来说为ReadExecute。这允许组件查看文件夹中的解压缩文件。要从存档中设置对单个文件的权限,可以在安装生命周期脚本

此对象包含以下信息:

Read

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

  • NONE— 文件不可读。

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

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

默认值为 OWNER

Execute

(可选)为此对象文件设置的运行权限。这些区域有:Execute权限意味着Read权限。例如,如果指定ALL对于 来说为Execute,则所有用户都可以读取并运行此工件文件。

从以下选项中进行选择:

  • NONE— 文件不可运行。

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

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

默认值为 NONE

Lifecycle

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

注意

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

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

这些区域有:all选择键是任何没有选择键的部分的默认值。这意味着,您可以指定all选择键在清单中运行全局生命周期的部分而不使用选择键。您不需要指定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_variable}语法。花括号表示配方变量。

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

component_dependency_name:configuration:json_pointer

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

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

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

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

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

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

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

  • 值节点。AWS IoT Greengrass 核心将使用值的字符串表示形式替换配方变量。Null 值转换为null作为字符串。

  • 对象节点。AWS IoT Greengrass 核心将使用该对象的序列化 JSON 字符串表示形式替换配方变量。

  • 不存在节点。AWS IoT Greengrass 核心不会替换配方变量。

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

component_dependency_name:artifacts:path

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

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

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

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

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

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

component_dependency_name:artifacts:decompressedPath

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

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

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

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

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

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

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

component_dependency_name:work:path

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

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

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

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

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

kernel:rootPath

AWS IoT Greengrass 核心根路径。

配方示例

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

Hello World 组件

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

JSON
{ "RecipeFormatVersion": "2020-01-25", "ComponentName": "com.example.HelloWorld", "ComponentVersion": "1.0.0", "ComponentDescription": "My first AWS 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 AWS 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 AWS 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 AWS 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