Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,将不再接收功能更新,并且将仅收到安全补丁和错误修复。有关更多信息,请参阅Amazon IoT Greengrass V1维护时段。我们强烈建议您迁移到Amazon IoT Greengrass Version 2,这增加了重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
导出配置以获得支持Amazon Web Services 云目的地
用户定义的 Lambda 函数StreamManagerClient
中的Amazon IoT Greengrass与流管理器交互的核心 SDK。当 Lambda 函数创建流要么更新流,它通过了MessageStreamDefinition
表示流属性,包括导出定义的对象。这些区域有:ExportDefinition
对象包含为流定义的导出配置。Stream Manager 使用这些导出配置来确定导出流的位置和方式。

您可以在一个流上定义零个或多个导出配置,包括单个目标类型的多个导出配置。例如,您可以将流导出到两个Amazon IoT Analytics一个频道和一个 Kinesis 数据流。
对于失败的导出尝试,直播管理器会不断重试将数据导出到Amazon Web Services 云每隔最多五分钟。重试次数没有最大限制。
注意
StreamManagerClient
还提供了一个可用于将流导出到 HTTP 服务器的目标目标。此目标仅用于测试目的。它不稳定或支持在生产环境中使用。
支持Amazon Web Services 云目的地
你有责任维护这些Amazon Web Services 云资源的费用。
Amazon IoT Analytics 通道
直播管理器支持自动导出到Amazon IoT Analytics.Amazon IoT Analytics允许您对数据执行高级分析,以帮助做出业务决策并改进机器学习模型。有关更多信息,请参阅 。是什么Amazon IoT Analytics?中的Amazon IoT Analytics用户指南.
在Amazon IoT Greengrass核心 SDK,您的 Lambda 函数使用IoTAnalyticsConfig
定义此目标类型的导出配置。有关更多信息,请参阅适用于您的目标语言的 SDK 参考:
-
IotAnalyticsConfig
在 Python 开发工具包中 -
IotAnalyticsConfig
在 Java 开发工具包中 -
IotAnalyticsConfig
在 Node.js 开发工具包中
要求
此出口目的地具有以下要求:
-
目标频道Amazon IoT Analytics一定是相同的Amazon Web Services 账户和Amazon Web Services 区域作为 Greengrass 组。
-
这些区域有:Greengrass 组角色必须允许
iotanalytics:BatchPutMessage
目标频道的权限。例如:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iotanalytics:BatchPutMessage" ], "Resource": [ "arn:aws:iotanalytics:
region
:account-id
:channel/channel_1_name
", "arn:aws:iotanalytics:region
:account-id
:channel/channel_2_name
" ] } ] }例如,通过使用通配符,您可以授予对资源的具体或条件访问权限。
*
命名方案。有关更多信息,请参阅 。添加和删除 IAM 策略中的IAM 用户指南.
导出到 Amazon IoT Analytics
创建导出到的流Amazon IoT Analytics,Lambda 函数创建流具有包含一个或多个的导出定义IoTAnalyticsConfig
对象。此对象定义导出设置,例如目标渠道、批量大小、批处理间隔和优先级。
当您的 Lambda 函数从设备接收数据时,它们附加消息其中包含到目标流的一组数据。
然后,流媒体管理器根据流的导出配置中定义的批处理设置和优先级导出数据。
Amazon Kinesis 数据流
流管理器支持将自动导出到 Amazon Kinesis Data Streams。Kinesis Data Streams 常用于聚合大容量数据并将其加载到数据仓库或 map-reduce 集群中。有关更多信息,请参阅 。什么是 Amazon Kinesis Data Streams?中的Amazon Kinesis 开发人员指南.
在Amazon IoT Greengrass核心 SDK,您的 Lambda 函数使用KinesisConfig
定义此目标类型的导出配置。有关更多信息,请参阅适用于您的目标语言的 SDK 参考:
-
KinesisConfig
在 Python 开发工具包中 -
KinesisConfig
在 Java 开发工具包中 -
KinesisConfig
在 Node.js 开发工具包中
要求
此出口目的地具有以下要求:
-
Kinesis Data Streams 中的目标流必须位于相同之中Amazon Web Services 账户和Amazon Web Services 区域作为 Greengrass 组。
-
这些区域有:Greengrass 组角色必须允许
kinesis:PutRecords
目标数据流的权限。例如:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:
region
:account-id
:stream/stream_1_name
", "arn:aws:kinesis:region
:account-id
:stream/stream_2_name
" ] } ] }例如,通过使用通配符,您可以授予对资源的具体或条件访问权限。
*
命名方案。有关更多信息,请参阅 。添加和删除 IAM 策略中的IAM 用户指南.
导出到 Kinesis Data Streams
要创建导出到 Kinesis Data Streams 的流,您的 Lambda 函数创建流具有包含一个或多个的导出定义KinesisConfig
对象。此对象定义导出设置,例如目标数据流、批量大小、批处理间隔和优先级。
当您的 Lambda 函数从设备接收数据时,它们附加消息其中包含到目标流的一组数据。然后,流媒体管理器根据流的导出配置中定义的批处理设置和优先级导出数据。
直播管理器为上传到 Amazon Kinesis 的每条记录生成一个唯一的随机 UUID 作为分区密钥。
Amazon IoT SiteWise资产属性
直播管理器支持自动导出到Amazon IoT SiteWise.Amazon IoT SiteWise您可让您轻松地从工业设备中大规模收集、组织和分析数据。有关更多信息,请参阅 。是什么Amazon IoT SiteWise?中的Amazon IoT SiteWise用户指南.
在Amazon IoT Greengrass核心 SDK,您的 Lambda 函数使用IoTSiteWiseConfig
定义此目标类型的导出配置。有关更多信息,请参阅适用于您的目标语言的 SDK 参考:
-
iotsitewSiteewSITEFIG
在 Python 开发工具包中 -
iotsitewSiteewSITEFIG
在 Java 开发工具包中 -
iotsitewSiteewSITEFIG
在 Node.js 开发工具包中
注意
Amazon还提供IoT SiteWise 连接器,这是一个预构建的解决方案,您可以与 OPC-UA 源一起使用。
要求
此出口目的地具有以下要求:
-
中的目标资产属性Amazon IoT SiteWise一定是相同的Amazon Web Services 账户和Amazon Web Services 区域作为 Greengrass 组。
注意
有关指定的区域列表Amazon IoT SiteWise支持,请参阅Amazon IoT SiteWise终端节点和配额中的Amazon一般参考.
-
这些区域有:Greengrass 组角色必须允许
iotsitewise:BatchPutAssetPropertyValue
目标资产属性的权限。以下示例策略使用iotsitewise:assetHierarchyPath
指定键,用于授予对目标根资产及其子级的访问权限。您可以删除Condition
从策略中允许访问您的所有Amazon IoT SiteWise资产或指定单个资产的 ARN。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*", "Condition": { "StringLike": { "iotsitewise:assetHierarchyPath": [ "/
root node asset ID
", "/root node asset ID
/*" ] } } } ] }例如,通过使用通配符,您可以授予对资源的具体或条件访问权限。
*
命名方案。有关更多信息,请参阅 。添加和删除 IAM 策略中的IAM 用户指南.有关重要的安全信息,请参阅 BatchPutAssetPropertyValue 授权中的Amazon IoT SiteWise用户指南.
导出到 Amazon IoT SiteWise
创建导出到的流Amazon IoT SiteWise,Lambda 函数创建流具有包含一个或多个的导出定义IoTSiteWiseConfig
对象。此对象定义导出设置,例如批处理大小、批处理间隔和优先级。
当您的 Lambda 函数从设备接收资产属性数据时,它们会将包含该数据的消息追加到目标流。消息是 JSON 序列化的PutAssetPropertyValueEntry
包含一个或多个资产属性的属性值的对象。有关更多信息,请参阅 。附加消息为了Amazon IoT SiteWise出口目标。
注意
将数据发送给Amazon IoT SiteWise,您的数据必须满足BatchPutAssetPropertyValue
action. 有关更多信息,请参阅 Amazon IoT SiteWise API 参考中的 BatchPutAssetPropertyValue。
然后,流媒体管理器根据流的导出配置中定义的批处理设置和优先级导出数据。
您可以调整直播管理器设置和 Lambda 函数逻辑来设计导出策略。例如:
-
对于接近实时的导出,请设置较低的批量大小和间隔设置,然后在收到数据时将数据附加到流。
-
为了优化批处理、缓解带宽限制或最大限度地降低成本,您的 Lambda 函数可以将 timestamp-quality-value (TQV) 在将数据追加到直播之前,为单个资产属性收到的数据点。一种策略是在一条消息中批量输入最多 10 种不同的财产-资产组合或属性别名,而不是为同一属性发送多个条目。这有助于直播管理器留在内部Amazon IoT SiteWise配额.
Amazon S3 对象
流管理器支持自动导出到 Amazon S3。您可以使用 Amazon S3 存储和检索大量数据。有关更多信息,请参阅 。什么是 Amazon S3?中的Amazon Simple Storage Service 开发人员指南.
在Amazon IoT Greengrass核心 SDK,您的 Lambda 函数使用S3ExportTaskExecutorConfig
定义此目标类型的导出配置。有关更多信息,请参阅适用于您的目标语言的 SDK 参考:
-
s3 导出任务执行器配置
在 Python 开发工具包中 -
s3 导出任务执行器配置
在 Java 开发工具包中 -
s3 导出任务执行器配置
在 Node.js 开发工具包中
要求
此出口目的地具有以下要求:
-
目标 Amazon S3 存储桶必须位于同一个位置Amazon Web Services 账户作为 Greengrass 组。
-
如果默认容器化对于 Greengrass 组来说Greengrass 容器,您必须设置STREAM_MANAGER_READ_ONLY _DIRS参数来使用下面的输入文件目录
/tmp
或者不在根文件系统中。 -
如果 Lambda 函数在中运行Greengrass 容器模式将输入文件写入输入文件目录,必须为该目录创建本地卷资源,然后将该目录装载到具有写入权限的容器。这可以确保将文件写入根文件系统并在容器外部可见。有关更多信息,请参阅 使用 Lambda 函数和连接器访问本地资源。
-
这些区域有:Greengrass 组角色必须允许对目标存储桶拥有以下权限。例如:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::
bucket-1-name
/*", "arn:aws:s3:::bucket-2-name
/*" ] } ] }例如,通过使用通配符,您可以授予对资源的具体或条件访问权限。
*
命名方案。有关更多信息,请参阅 。添加和删除 IAM 策略中的IAM 用户指南.
导出到 Amazon S3
要创建导出到 Amazon S3 的直播,您的 Lambda 函数使用S3ExportTaskExecutorConfig
对象来配置导出策略。该策略定义了导出设置,例如分段上传阈值和优先级。对于 Amazon S3 导出,流管理器会上传从核心设备上的本地文件中读取的数据。要启动上传,您的 Lambda 函数会将导出任务追加到目标流。导出任务包含有关输入文件和目标 Amazon S3 对象的信息。直播管理器按照附加到直播的顺序执行任务。
注意
您的目标存储桶必须已存在于Amazon Web Services 账户. 如果指定密钥的对象不存在,则流管理器会为您创建对象。
下图显示了此高级工作流程。

流管理器使用分段上传阈值属性,最小分段大小设置和输入文件的大小,以确定如何上传数据。分段上传阈值必须大于或等于最小分段大小。如果要 parallel 上传数据,您可以创建多个流。
指定目标 Amazon S3 对象的密钥可以包括有效Java DateTimeFormatter!{timestamp:
占位符。您可以使用这些时间戳占位符根据输入文件数据的上传时间对 Amazon S3 中的数据进行分区。例如,以下键名称解析为一个值,例如value
}my-key/2020/12/31/data.txt
.
my-key/!{timestamp:YYYY}/!{timestamp:MM}/!{timestamp:dd}/data.txt
注意
如果要监控流的导出状态,请先创建状态流,然后将导出流配置为使用它。有关更多信息,请参阅 监控导出任务。
管理输入数据
您可以创作代码,IoT 应用程序用于管理输入数据的生命周期。以下示例工作流程说明了如何使用 Lambda 函数管理此数据。
-
本地进程从设备或外围设备接收数据,然后将数据写入核心设备上目录中的文件。这些是直播管理器的输入文件。
注意
要确定是否必须配置对输入文件目录的访问权限,请参阅STREAM_MANAGER_READ_ONLY _DIRS参数。
流管理器运行的进程将继承默认访问身份对于组。流管理器必须具有访问输入文件的权限。您可以使用
chmod(1)
如有必要,命令可更改文件的权限。 -
Lambda 函数会扫描目录并附加导出任务创建新文件时转到目标流。任务是 JSON 序列化
S3ExportTaskDefinition
对象,指定输入文件的 URL、目标 Amazon S3 存储桶和密钥以及可选的用户元数据。 -
Stream 管理器读取输入文件并按附加任务的顺序将数据导出到 Amazon S3。您的目标存储桶必须已存在于Amazon Web Services 账户. 如果指定密钥的对象不存在,则流管理器会为您创建对象。
-
Lambda 函数读取消息从状态流来监视导出状态。导出任务完成后,Lambda 函数可以删除相应的输入文件。有关更多信息,请参阅 监控导出任务。
监控导出任务
您可以创建 IoT 应用程序用于监控 Amazon S3 导出状态的代码。您的 Lambda 函数必须创建状态流,然后将导出流配置为向状态流写入状态更新。单个状态流可以从导出到 Amazon S3 的多个流中接收状态更新。
首先,创建流用作状态流。您可以配置流的大小和保留策略以控制状态消息的使用寿命。例如:
-
Set
Persistence
到Memory
如果不想存储状态消息。 -
Set
StrategyOnFull
到OverwriteOldestData
以便不会丢失新的状态消息。
然后,创建或更新导出流以使用状态流。具体来说,设置直播的状态配置属性S3ExportTaskExecutorConfig
导出配置。这告诉直播管理器将有关导出任务到状态流的状态消息写入状态消息。在StatusConfig
对象中,指定状态流的名称和详细程度级别。以下支持的值范围从最小的详细程度(ERROR
) 到最详细的 (TRACE
)。默认为 INFO
。
-
ERROR
-
WARN
-
INFO
-
DEBUG
-
TRACE
以下示例工作流显示了 Lambda 函数如何使用状态流监控导出状态。
-
如上一个工作流程中所述,Lambda 函数附加导出任务到配置为向状态流写入有关导出任务的状态消息的流。追加操作返回表示任务 ID 的序列号。
-
Lambda 函数读取消息按顺序从状态流中进行,然后根据流名称和任务 ID 或根据消息上下文中的导出任务属性过滤消息。例如,Lambda 函数可以按导出任务的输入文件 URL 进行筛选,该 URL 由
S3ExportTaskDefinition
消息上下文中的对象。以下状态代码表示导出任务已达到已完成状态:
-
Success
. 已成功完成上传。 -
Failure
. 直播管理器遇到错误,例如,指定的存储桶不存在。解决问题后,你可以再次将导出任务追加到直播。 -
Canceled
. 该任务已中止,原因是流或导出定义已删除,或者 time-to-live (TTL) 任务期限已过期。
注意
该任务可能还具有为
InProgress
要么Warning
. 当事件返回不影响任务执行的错误时,Stream Manager 会发出警告。例如,未能清理已中止的部分上传将返回警告。 -
-
导出任务完成后,Lambda 函数可以删除相应的输入文件。
以下示例显示了 Lambda 函数如何读取和处理状态消息。