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

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

SNS 连接器

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

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

此连接器具有以下版本。

Version

ARN

4

arn:aws:greengrass:region::/connectors/SNS/versions/4

3

arn:aws:greengrass:region::/connectors/SNS/versions/3

2

arn:aws:greengrass:region::/connectors/SNS/versions/2

1

arn:aws:greengrass:region::/connectors/SNS/versions/1

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

Requirements

此连接器具有以下要求:

Version 3 - 4
  • Amazon IoT Greengrass Core 软件 v1.9.3 版或更高版本。

  • Python版本 3.7 或 3.8 安装在核心设备上并添加到 PATH 环境变量中。

    注意

    要使用 Python 3.8,请运行以下命令以创建从默认 Python 3.7 安装文件夹到已安装的 Python 3.8 二进制文件的符号链接。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    这会将设备配置为满足 Amazon IoT Greengrass 的 Python 要求。

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

  • 这些区域有:Greengrass 组角色配置为允许sns:Publish操作,如以下示例 IAM 策略中所示。

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

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

    对于组角色要求,您必须将角色配置为授予所需权限,并确保角色已添加到组中。有关更多信息,请参阅 管理 Greengrass 组角色(控制台)管理 Greengrass 组角色 (CLI)

Versions 1 - 2
  • Amazon IoT Greengrass核心软件版本 v1.7 或更高版本。

  • Python安装在核心设备上并添加到 PATH 环境变量中。

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

  • 这些区域有:Greengrass 组角色配置为允许sns:Publish操作,如以下示例 IAM 策略中所示。

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

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

    对于组角色要求,您必须将角色配置为授予所需权限,并确保角色已添加到组中。有关更多信息,请参阅 管理 Greengrass 组角色(控制台)管理 Greengrass 组角色 (CLI)

Connector of

该连接器提供以下参数:

Version 4
DefaultSNSArn

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

注意

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

在Amazon IoT控制台:默认 SNS 主题 ARN

:必需true

类型:string

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

IsolationMode

此连接器的容器化模式。默认值为 GreengrassContainer,这意味着连接器在 Amazon IoT Greengrass 容器内的隔离运行时环境中运行。

注意

组的默认容器化设置不适用于连接器。

在Amazon IoT控制台:容器隔离模式

:必需false

类型:string

有效值:GreengrassContainerNoContainer

有效模式:^NoContainer$|^GreengrassContainer$

Versions 1 - 3
DefaultSNSArn

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

注意

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

在Amazon IoT控制台:默认 SNS 主题 ARN

:必需true

类型:string

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

创建连接器示例 (Amazon CLI)

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

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

在Amazon IoT Greengrass控制台中添加连接器,您可以从组的连接器页. 有关更多信息,请参阅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 权限。有关更多信息,请参阅Requirements

:必需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:sns:region:account-id:topic2-name" }, "id": "request123" }
示例输入:JSON 消息

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

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

输出数据

此连接器将状态信息发布为 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" }

用法示例

使用以下概括步骤设置可用于尝试连接器的示例 Python 3.7 Lambda 函数。

注意
  1. 确保满足连接器的要求

    对于组角色要求,您必须将角色配置为授予所需权限,并确保角色已添加到组中。有关更多信息,请参阅 管理 Greengrass 组角色(控制台)管理 Greengrass 组角色 (CLI)

  2. 创建并发布将输入数据发送到连接器的 Lambda 函数。

    示例代码保存为 PY 文件。下载并解压缩Amazon IoT Greengrass适用于 Python 的核心工具包. 然后,创建一个 zip 包,其中在根级别包含 PY 文件和 greengrasssdk 文件夹。此 zip 包是您上传到的部署包Amazon Lambda.

    创建 Python 3.7 Lambda 函数后,发布函数版本并创建别名。

  3. 配置 Greengrass 组。

    1. 通过函数的别名添加 Lambda(推荐)。将 Lambda 生命周期配置为长时间生存(或"Pinned": true)。

    2. 添加连接器并配置其参数

    3. 添加允许连接器接收输入数据并针对支持的主题筛选条件发送输出数据的订阅。

      • 将 Lambda 函数设置为源,将连接器设置为目标,并使用支持的输入主题筛选条件。

      • 将连接器设置为源,将 Amazon IoT Core 设置为目标,并使用支持的输出主题筛选条件。您可以使用此订阅查看中的状态消息。Amazon IoT控制台。

  4. 部署组。

  5. 在Amazon IoT控制台、测试页面上,订阅输出数据主题以查看连接器中的状态消息。示例 Lambda 函数是长时间生存的,并且在部署组后立即开始发送消息。

    完成测试后,您可以将 Lambda 生命周期设置为按需(或"Pinned": false)并部署组。这会阻止函数发送消息。

Example

以下示例 Lambda 函数将输入消息发送到连接器。

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 lambda_handler(event, context): return

Licenses

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

此连接器在Greengrass 核心软件许可协议.

Changelog

下表介绍每一版的连接器中的更改。

Version

更改

4

增加了用于配置连接器容器化模式的 IsolationMode 参数。

3

已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。

2

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

1

首次发布。

Greengrass 组每次只能包含一个连接器版本。有关升级连接器版本的信息,请参阅升级连接器版本

另请参阅