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

SNS

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

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

ARNarn:aws-cn:greengrass:区域::/connectors/SNS/versions/1

要求

此连接器具有以下要求:

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

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

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

  • 添加到 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-cn:greengrass:区域::/connectors/SNS/versions/1", "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 核心软件许可协议发布。

另请参阅