AWS IoT Greengrass Version 1 entered the extended life phase on June 30, 2023. For more information, see the AWS IoT Greengrass V1 maintenance policy. After this date, AWS IoT Greengrass V1 won't release updates that provide features, enhancements, bug fixes, or security patches. Devices that run on AWS IoT Greengrass V1 won't be disrupted and will continue to operate and to connect to the cloud. We strongly recommend that you migrate to AWS IoT Greengrass Version 2, which adds significant new features and support for additional platforms.
SNS connector
The SNS connector publishes messages to an Amazon SNS topic. This enables web servers, email addresses, and other message subscribers to respond to events in the Greengrass group.
This connector receives SNS message information on an MQTT topic, and then sends the message to a specified SNS topic. You can optionally use custom Lambda functions to implement filtering or formatting logic on messages before they are published to this connector.
This connector has the following versions.
Version |
ARN |
---|---|
4 |
|
3 |
|
2 |
|
1 |
|
For information about version changes, see the Changelog.
Requirements
This connector has the following requirements:
Connector Parameters
This connector provides the following parameters:
Create Connector Example (AWS CLI)
The following CLI command creates a ConnectorDefinition
with an initial version that contains the SNS connector.
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" } } ] }'
In the AWS IoT Greengrass console, you can add a connector from the group's Connectors page. For more information, see Getting started with Greengrass connectors (console).
Input data
This connector accepts SNS message information on an MQTT topic, and then publishes the message as is to the target SNS topic. Input messages must be in JSON format.
- Topic filter in subscription
-
sns/message
- Message properties
-
request
-
Information about the message to send to the SNS topic.
Required:
true
Type:
object
that includes the following properties:message
-
The content of the message as a string or in JSON format. For examples, see Example input.
To send JSON, the
message_structure
property must be set tojson
and the message must be a string-encoded JSON object that contains adefault
key.Required:
true
Type:
string
Valid pattern:
.*
subject
-
The subject of the message.
Required:
false
Type: ASCII text, up to 100 characters. This must begin with a letter, number, or punctuation mark. This must not include line breaks or control characters.
Valid pattern:
.*
sns_topic_arn
-
The ARN of the SNS topic to publish messages to. If specified, the connector publishes to this topic instead of the default topic.
Note
The group role must allow
sns:Publish
permission to any target topics. For more information, see Requirements.Required:
false
Type:
string
Valid pattern:
arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$
message_structure
-
The structure of the message.
Required:
false
. This must be specified to send a JSON message.Type:
string
Valid values:
json
id
-
An arbitrary ID for the request. This property is used to map an input request to an output response. When specified, the
id
property in the response object is set to this value. If you don't use this feature, you can omit this property or specify an empty string.Required:
false
Type:
string
Valid pattern:
.*
- Limits
-
The message size is bounded by a maximum SNS message size of 256 KB.
- Example input: String message
-
This example sends a string message. It specifies the optional
sns_topic_arn
property, which overrides the default destination topic.{ "request": { "subject": "Message subject", "message": "Message data", "sns_topic_arn": "arn:aws:sns:
region
:account-id
:topic2-name" }, "id": "request123" } - Example input: JSON message
-
This example sends a message as a string encoded JSON object that includes the
default
key.{ "request": { "subject": "Message subject", "message": "{ \"default\": \"Message data\" }", "message_structure": "json" }, "id": "request123" }
Output data
This connector publishes status information as output data on an MQTT topic.
- Topic filter in subscription
-
sns/message/status
- Example output: Success
-
{ "response": { "sns_message_id": "f80a81bc-f44c-56f2-a0f0-d5af6a727c8a", "status": "success" }, "id": "request123" }
- Example output: Failure
-
{ "response" : { "error": "InvalidInputException", "error_message": "SNS Topic Arn is invalid", "status": "fail" }, "id": "request123" }
Usage Example
Use the following high-level steps to set up an example Python 3.7 Lambda function that you can use to try out the connector.
Note
-
If you use other Python runtimes, you can create a symlink from Python3.x to Python 3.7.
-
The Get started with connectors (console) and Get started with connectors (CLI) topics contain detailed steps that show you how to configure and deploy an example Twilio Notifications connector.
Make sure you meet the requirements for the connector.
For the group role requirement, you must configure the role to grant the required permissions and make sure the role has been added to the group. For more information, see Managing the Greengrass group role (console) or Managing the Greengrass group role (CLI).
-
Create and publish a Lambda function that sends input data to the connector.
Save the example code as a PY file. Download and unzip the AWS IoT Greengrass Core SDK for Python. Then, create a zip package that contains the PY file and the
greengrasssdk
folder at the root level. This zip package is the deployment package that you upload to AWS Lambda.After you create the Python 3.7 Lambda function, publish a function version and create an alias.
-
Configure your Greengrass group.
-
Add the Lambda function by its alias (recommended). Configure the Lambda lifecycle as long-lived (or
"Pinned": true
in the CLI). -
Add the connector and configure its parameters.
-
Add subscriptions that allow the connector to receive input data and send output data on supported topic filters.
Set the Lambda function as the source, the connector as the target, and use a supported input topic filter.
Set the connector as the source, AWS IoT Core as the target, and use a supported output topic filter. You use this subscription to view status messages in the AWS IoT console.
-
-
Deploy the group.
-
In the AWS IoT console, on the Test page, subscribe to the output data topic to view status messages from the connector. The example Lambda function is long-lived and starts sending messages immediately after the group is deployed.
When you're finished testing, you can set the Lambda lifecycle to on-demand (or
"Pinned": false
in the CLI) and deploy the group. This stops the function from sending messages.
Example
The following example Lambda function sends an input message to the connector.
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
The SNS connector includes the following third-party software/licensing:
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/MIT License
This connector is released under the
Greengrass Core Software License Agreement
Changelog
The following table describes the changes in each version of the connector.
Version |
Changes |
---|---|
4 |
Added the |
3 |
Upgraded the Lambda runtime to Python 3.7, which changes the runtime requirement. |
2 |
Fix to reduce excessive logging. |
1 |
Initial release. |
A Greengrass group can contain only one version of the connector at a time. For information about upgrading a connector version, see Upgrading connector versions.
See also
-
Integrate with services and protocols using Greengrass connectors
-
Publish action
in the Boto 3 documentation -
What is Amazon Simple Notification Service? in the Amazon Simple Notification Service Developer Guide