AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

SNS 连接器

SNS 连接器将消息发布到 Amazon SNS 主题。这使 Web 服务器、电子邮件地址和其他消息订阅者能够响应 Greengrass 组中的事件。

该连接器接收关于 MQTT 主题的 SNS 消息信息,然后将消息发送到指定的 SNS 主题。您可以视情况使用自定义 Lambda 函数对消息实施筛选或格式化逻辑,然后再将消息发布到该连接器。

此连接器具有以下版本。

版本

ARN

2

arn:aws:greengrass:区域::/connectors/SNS/versions/2

1

arn:aws:greengrass:区域::/connectors/SNS/versions/1

有关版本更改的信息,请参阅更改日志

要求

此连接器具有以下要求:

  • AWS IoT Greengrass 核心软件 v1.7 or later。

  • Python 版本 2.7 已安装在核心设备上并且已添加到 PATH 环境变量。

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

  • 添加到 Greengrass 组角色的 IAM 策略,允许对目标 SNS 主题执行 sns:Publish 操作,如以下示例所示:

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

    利用该连接器,您可以动态覆盖输入消息负载中的默认主题。如果您的实施使用此功能,IAM 策略必须允许对所有目标主题的 sns:Publish 权限。您可以授予对资源的具体或条件访问权限(例如,通过使用通配符*命名方案)。 有关更多信息,请参阅IAM 用户指南中的添加和删除 IAM 策略

连接器参数

该连接器提供以下参数:

DefaultSNSArn

要将消息发布到的默认 SNS 主题的 ARN。目标主题可由输入消息负载中的 sns_topic_arn 属性覆盖。

注意

该组角色必须允许对所有目标主题的 sns:Publish 权限。有关更多信息,请参阅 要求

在控制台中显示名称:默认 SNS 主题 ARN

必需:true

类型:string

有效模式:arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$

创建连接器示例 (CLI)

以下 CLI 命令创建一个 ConnectorDefinition,其初始版本包含 SNS连接器。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MySNSConnector", "ConnectorArn": "arn:aws:greengrass:区域::/connectors/SNS/versions/2", "Parameters": { "DefaultSNSArn": "arn:aws-cn:sns:region:account-id:topic-name" } } ] }'

在 AWS IoT Greengrass 控制台 中,您可以从该组的 Connectors (连接器)页面添加一个连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)

输入数据

此连接器接受关于 MQTT 主题的 SNS 消息信息,然后将信息按原样发布到目标 SNS 主题。输入消息必须采用 JSON 格式。

主题筛选条件

sns/message

消息属性
request

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

必需:true

类型:包含以下属性的 object

message

字符串或 JSON 格式的消息内容。有关示例,请参阅示例输入

要发送 JSON,必须将 message_structure 属性设置为 json,并且消息必须是包含 default 密钥的字符串编码的 JSON 对象。

必需:true

类型:string

有效模式:.*

subject

消息主题。

必需:false

类型:ASCII 文本,最多 100 个字符。必须以字母、数字或标点符号开头。不得包含换行符或控制字符。

有效模式:.*

sns_topic_arn

要将消息发布到的 SNS 主题的 ARN。如果指定,则连接器将发布到该主题,而不是默认的主题。

注意

该组角色必须允许对任何目标主题的 sns:Publish 权限。有关更多信息,请参阅 要求

必需:false

类型:string

有效模式:arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$

message_structure

消息结构。

必需:false。要发送 JSON 消息,必须指定此属性。

类型:string

有效值:json

id

请求的任意 ID。此属性用于将输入请求映射到输出响应。如果指定,响应对象中的 id 属性将设置为该值。如果您不使用此功能,可以忽略此属性或指定空字符串。

必需:false

类型:string

有效模式:.*

限制

消息大小受最大 SNS 消息大小 (256 KB) 的限制。

示例输入:字符串消息

此示例发送一条字符串消息。它指定可选的 sns_topic_arn 属性,该属性会覆盖默认目标主题。

{ "request": { "subject": "Message subject", "message": "Message data", "sns_topic_arn": "arn:aws-cn:sns:region:account-id:topic2-name" }, "id": "request123" }
示例输入:JSON 消息

此示例以包含 default 密钥的字符串编码的 JSON 对象形式发送消息。

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

输出数据

此连接器将状态信息发布为输出数据。

主题筛选条件

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

示例用法

以下是 Lambda 功能将输入消息发送到连接器的示例。

注意

该 Python 功能使用 AWS IoT Greengrass Core 开发工具包 来发布 MQTT 消息。您可以使用以下 pip 命令在核心设备上安装 SDK 的 Python 版本:

pip install greengrasssdk
import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'sns/message' def create_request_with_all_fields(): return { "request": { "message": "Message from SNS Connector Test" }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print "Message To Publish: ", messageToPublish iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def function_handler(event, context): return

许可证

SNS 连接器包含以下第三方软件/许可:

此连接器按照 Greengrass 核心软件许可协议发布。

Changelog

下表描述了连接器每个版本中所做的更改。

版本

更改

2

进行了修复,以减少过多的日志记录。

1

首次发布。

Greengrass 组一次只能包含一个版本的连接器。

另请参阅