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

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

Amazon SNS

Amazon SNS 组件 (aws.greengrass.SNS) 将消息发布到 Amazon Simple Notification Service (Amazon SNS) 主题。您可以使用此组件将事件从 Greengrass 核心设备发送到 Web 服务器、电子邮件地址和其他消息订阅者。有关更多信息,请参阅 。什么是 Amazon SNS?中的Amazon Simple Notification Service 开发人员指南

要使用此组件发布到 Amazon SNS 主题,请向此组件订阅的主题发布消息。默认情况下,此组件订阅sns/message 本地发布/订阅主题。您可以在部署此组件时指定其他主题,包括 AWS IoT Core MQTT 主题。

在自定义组件中,您可能希望实现筛选或格式化逻辑,以便在将其发布到此组件之前处理来自其他源的消息。这使您能够将消息处理逻辑集中在一个组件上。

注意

此组件提供与 AWS IoT Greengrass V1 中的 Amazon SNS 连接器类似的功能。有关更多信息,请参阅 。Amazon SNS 连接器中的AWS IoT Greengrass V1 开发人员指南

Versions

此组件具有以下版本:

  • 2.0.x

Requirements

要部署组件,必须满足组件及其dependencies。此组件具有以下要求:

  • 您的核心设备必须满足运行 Lambda 功能的要求。如果您希望核心设备运行容器化 Lambda 功能,设备必须满足要求才能执行此操作。有关更多信息,请参阅 运行 Lambda 函数的要求

  • Python版本 3.7,并添加到核心设备上的 PATH 环境变量中。

  • Amazon SNS 主题。有关更多信息,请参阅 。创建 Amazon SNS 主题中的Amazon Simple Notification Service 开发人员指南

  • 这些区域有:Greengrass 设备角色必须允许sns:Publish操作,如以下 IAM 策略示例所示。

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "sns:Publish" ], "Effect": "Allow", "Resource": [ "arn:aws:sns:region:account-id:topic-name" ] } ] }

    可以动态覆盖此组件的输入消息负载中的默认主题。如果您的应用程序使用此功能,则 IAM 策略必须包括所有目标主题作为资源。您可以授予对资源的具体或条件访问权限(例如,通过使用通配符 * 命名方案)。

  • 若要从此组件接收输出数据,您必须合并旧版订阅路由器组件(aws.greengrass.LegacySubscriptionRouter),当您部署此组件时。此配置指定此组件发布响应的主题。

    Legacy subscription router v2.1.x
    { "subscriptions": { "aws-greengrass-sns": { "id": "aws-greengrass-sns", "source": "component:aws.greengrass.SNS", "subject": "sns/message/status", "target": "cloud" } } }
    Legacy subscription router v2.0.x
    { "subscriptions": { "aws-greengrass-sns": { "id": "aws-greengrass-sns", "source": "arn:aws:lambda:region:aws:function:aws-greengrass-sns:version", "subject": "sns/message/status", "target": "cloud" } } }
    • Replace region 与您使用的 AWS 区域一起使用。

    • Replace version 使用此组件运行的 Lambda 函数版本。要查找 Lambda 函数版本,必须查看要部署的此组件版本的配方。打开此组件的详细信息页面,在AWS IoT Greengrass 控制台,并查找Lambda 函数键值对。此键值对包含 Lambda 函数的名称和版本。

    重要

    每次部署此组件时,必须更新旧订阅路由器上的 Lambda 函数版本。这可确保您为部署的组件版本使用正确的 Lambda 函数版本。

    有关更多信息,请参阅 创建部署

Dependencies

当您部署组件时,AWS IoT Greengrass 还会部署其依赖关系的兼容版本。您必须满足组件及其所有依赖关系的要求才能成功部署组件。本部分列出了发布的版本以及定义每个依赖关系的组件版本的语义版本约束。您也可以在中查看组件各个版本的依赖关系。AWS IoT Greengrass 控制台。在组件详细信息页面上,查找附属物列表。

>=2.0.4

下表列出版本 2.0.4 及更高版本的此组件版本 2.0.4 及更高版本的依赖关系。

依赖关系 兼容版本 依赖关系类型
Greengrass 核 > 2.0.0 硬性
Lambda 启动器 ^2.0.0 硬性
Lambda 运行时 ^2.0.0 软性
令牌交换 ^2.0.0 硬性
2.0.x

下表列出了此组件 2.0.3 版的依赖关系。

依赖关系 兼容版本 依赖关系类型
Greengrass 核 > 2.0.3 硬性
Lambda 启动器 >=1.0.0 硬性
Lambda 运行时 >=1.0.0 软性
令牌交换 >=1.0.0 硬性

有关组件依赖项的更多信息,请参阅。组件配方参考

Configuration

此组件提供了以下配置参数,您可以在部署组件时自定义这些参数。

注意

此组件的默认配置包括 Lambda 函数参数。我们建议您仅编辑以下参数,以便在设备上配置此组件。

lambdaParams

包含此组件的 Lambda 函数参数的对象。此对象包含以下信息:

EnvironmentVariables

包含 Lambda 函数参数的对象。此对象包含以下信息:

DEFAULT_SNS_ARN

此组件在其中发布消息的默认 Amazon SNS 主题的 ARN。您可以使用sns_topic_arn属性。

containerMode

(可选)此组件的容器化模式。从以下选项中进行选择:

  • NoContainer— 组件不在隔离的运行时环境中运行。

  • GreengrassContainer— 组件在 AWS IoT Greengrass 容器内的隔离运行时环境中运行。

默认值:GreengrassContainer

containerParams

(可选)包含此组件的容器参数的对象。组件将使用这些参数,如果您指定GreengrassContainer对于 来说为containerMode

此对象包含以下信息:

memorySize

(可选)要分配给组件的内存量(以 KB 为单位)。

默认值为 512 MB(525,312 KB)。

pubsubTopics

(可选)包含组件预订接收消息的主题的对象。您可以指定每个主题,以及组件是订阅 AWS IoT Core 还是本地发布/订阅主题中的 MQTT 主题。

此对象包含以下信息:

0— 这是一个字符串形式的数组索引。

包含以下信息的对象:

type

(可选)此组件用于订阅消息的发布/订阅消息的类型。从以下选项中进行选择:

  • Pubsub – 订阅本地发布/订阅消息。如果选择此选项,则主题不能包含 MQTT 通配符。有关如何在指定此选项时从自定义组件发送消息的更多信息,请参阅发布/订阅本地消息

  • IotCore – 订阅 AWS IoT Core MQTT 消息。如果选择此选项,则主题可以包含 MQTT 通配符。有关如何在指定此选项时从自定义组件发送消息的更多信息,请参阅发布/订阅 AWS IoT Core MQTT 消息

默认值:Pubsub

topic

(可选)组件订阅以接收消息的主题。如果您指定IotCore对于 来说为type,您可以使用 MQTT 通配符(+#)。

例如:配置合并更新(容器模式)

{ "lambdaExecutionParameters": { "EnvironmentVariables": { "DEFAULT_SNS_ARN": "arn:aws:sns:us-west-2:123456789012:mytopic" } }, "containerMode": "GreengrassContainer" }

例如:配置合并更新(无容器模式)

{ "lambdaExecutionParameters": { "EnvironmentVariables": { "DEFAULT_SNS_ARN": "arn:aws:sns:us-west-2:123456789012:mytopic" } }, "containerMode": "NoContainer" }

输入数据

此组件接受关于以下主题的消息,并将信息按原样发布到目标 Amazon SNS 主题。默认情况下,此组件订阅本地发布/订阅消息。有关如何从自定义组件将消息发布到此组件的更多信息,请参阅发布/订阅本地消息

默认主题(本地发布/订阅): sns/message

该消息接受以下属性。输入消息必须采用 JSON 格式。

request

有关要发送到 Amazon SNS 主题的消息的信息的信息。

类型: object,其中包含以下信息:

message

字符串形式的消息内容。

要发送 JSON 对象,请将其序列化为字符串,然后指定json对于message_structure属性。

Type:string

subject

(可选)消息主题。

Type:string

主题最多可以是 ASCII 文本,最多 100 个字符。必须以字母、数字或标点符号开头。不能包含换行符或控制字符。

sns_topic_arn

(可选)此组件将在其中发布消息的 Amazon SNS 主题的 ARN。指定此属性是为了覆盖默认 Amazon SNS 主题。

Type:string

message_structure

(可选)消息结构。指定json来发送一个 JSON 消息,您将该消息序列化为content属性。

Type:string

有效值:json

id

请求的任意 ID。使用此属性将输入请求映射到输出响应。指定该属性时,组件将id属性设置为该值。

Type:string

注意

邮件大小最大可以是 256 KB。

例 示例输入:字符串消息

{ "request": { "subject": "Message subject", "message": "Message data", "sns_topic_arn": "arn:aws:sns:region:account-id:topic2-name" }, "id": "request123" }

例 示例输入:JSON 消息

{ "request": { "subject": "Message subject", "message": "{ \"default\": \"Message data\" }", "message_structure": "json" }, "id": "request123" }

输出数据

默认情况下,此组件将响应发布为以下 MQTT 主题上的输出数据。您必须将此主题指定为subject配置中的旧版订阅路由器组件。有关如何在自定义组件中订阅有关此主题的消息的更多信息,请参阅发布/订阅 AWS IoT Core MQTT 消息

默认主题(AWS IoT Core MQTT): sns/message/status

例 输出示例:成功

{ "response": { "sns_message_id": "f80a81bc-f44c-56f2-a0f0-d5af6a727c8a", "status": "success" }, "id": "request123" }

例 输出示例:失败

{ "response" : { "error": "InvalidInputException", "error_message": "SNS Topic Arn is invalid", "status": "fail" }, "id": "request123" }

Licenses

此组件包含以下第三方软件/许可:

此组件在Greengrass 核心软件许可协议

Changelog

下表描述了在组件各个版本中进行的更改。

Version

更改

2.0.4

版本更新了 Greengrass 核版本 2.1.0。

2.0.3

初始版本。