Receipt rule actions for AWS IoT
Project description
Actions for AWS IoT Rule
---AWS CDK v1 has reached End-of-Support on 2023-06-01. This package is no longer being updated, and users should migrate to AWS CDK v2.
For more information on how to migrate, see the Migrating to AWS CDK v2 guide.
This library contains integration classes to send data to any number of
supported AWS Services. Instances of these classes should be passed to
TopicRule
defined in @aws-cdk/aws-iot
.
Currently supported are:
- Republish a message to another MQTT topic
- Invoke a Lambda function
- Put objects to a S3 bucket
- Put logs to CloudWatch Logs
- Capture CloudWatch metrics
- Change state for a CloudWatch alarm
- Put records to Kinesis Data stream
- Put records to Kinesis Data Firehose stream
- Send messages to SQS queues
- Publish messages on SNS topics
Republish a message to another MQTT topic
The code snippet below creates an AWS IoT Rule that republish a message to another MQTT topic when it is triggered.
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, timestamp() as timestamp, temperature FROM 'device/+/data'"),
actions=[
actions.IotRepublishMqttAction("${topic()}/republish",
quality_of_service=actions.MqttQualityOfService.AT_LEAST_ONCE
)
]
)
Invoke a Lambda function
The code snippet below creates an AWS IoT Rule that invoke a Lambda function when it is triggered.
func = lambda_.Function(self, "MyFunction",
runtime=lambda_.Runtime.NODEJS_14_X,
handler="index.handler",
code=lambda_.Code.from_inline("""
exports.handler = (event) => {
console.log("It is test for lambda action of AWS IoT Rule.", event);
};""")
)
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, timestamp() as timestamp, temperature FROM 'device/+/data'"),
actions=[actions.LambdaFunctionAction(func)]
)
Put objects to a S3 bucket
The code snippet below creates an AWS IoT Rule that put objects to a S3 bucket when it is triggered.
bucket = s3.Bucket(self, "MyBucket")
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id FROM 'device/+/data'"),
actions=[actions.S3PutObjectAction(bucket)]
)
The property key
of S3PutObjectAction
is given the value ${topic()}/${timestamp()}
by default. This ${topic()}
and ${timestamp()}
is called Substitution templates. For more information see
this documentation.
In above sample, ${topic()}
is replaced by a given MQTT topic as device/001/data
. And ${timestamp()}
is replaced
by the number of the current timestamp in milliseconds as 1636289461203
. So if the MQTT broker receives an MQTT topic
device/001/data
on 2021-11-07T00:00:00.000Z
, the S3 bucket object will be put to device/001/data/1636243200000
.
You can also set specific key
as following:
bucket = s3.Bucket(self, "MyBucket")
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"),
actions=[
actions.S3PutObjectAction(bucket,
key="${year}/${month}/${day}/${topic(2)}"
)
]
)
If you wanna set access control to the S3 bucket object, you can specify accessControl
as following:
bucket = s3.Bucket(self, "MyBucket")
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),
actions=[
actions.S3PutObjectAction(bucket,
access_control=s3.BucketAccessControl.PUBLIC_READ
)
]
)
Put logs to CloudWatch Logs
The code snippet below creates an AWS IoT Rule that put logs to CloudWatch Logs when it is triggered.
import aws_cdk.aws_logs as logs
log_group = logs.LogGroup(self, "MyLogGroup")
iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id FROM 'device/+/data'"),
actions=[actions.CloudWatchLogsAction(log_group)]
)
Capture CloudWatch metrics
The code snippet below creates an AWS IoT Rule that capture CloudWatch metrics when it is triggered.
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, namespace, unit, value, timestamp FROM 'device/+/data'"),
actions=[
actions.CloudWatchPutMetricAction(
metric_name="${topic(2)}",
metric_namespace="${namespace}",
metric_unit="${unit}",
metric_value="${value}",
metric_timestamp="${timestamp}"
)
]
)
Change the state of an Amazon CloudWatch alarm
The code snippet below creates an AWS IoT Rule that changes the state of an Amazon CloudWatch alarm when it is triggered:
import aws_cdk.aws_cloudwatch as cloudwatch
metric = cloudwatch.Metric(
namespace="MyNamespace",
metric_name="MyMetric",
dimensions={"MyDimension": "MyDimensionValue"}
)
alarm = cloudwatch.Alarm(self, "MyAlarm",
metric=metric,
threshold=100,
evaluation_periods=3,
datapoints_to_alarm=2
)
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id FROM 'device/+/data'"),
actions=[
actions.CloudWatchSetAlarmStateAction(alarm,
reason="AWS Iot Rule action is triggered",
alarm_state_to_set=cloudwatch.AlarmState.ALARM
)
]
)
Put records to Kinesis Data stream
The code snippet below creates an AWS IoT Rule that put records to Kinesis Data stream when it is triggered.
import aws_cdk.aws_kinesis as kinesis
stream = kinesis.Stream(self, "MyStream")
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),
actions=[
actions.KinesisPutRecordAction(stream,
partition_key="${newuuid()}"
)
]
)
Put records to Kinesis Data Firehose stream
The code snippet below creates an AWS IoT Rule that put records to Put records to Kinesis Data Firehose stream when it is triggered.
import aws_cdk.aws_kinesisfirehose as firehose
import aws_cdk.aws_kinesisfirehose_destinations as destinations
bucket = s3.Bucket(self, "MyBucket")
stream = firehose.DeliveryStream(self, "MyStream",
destinations=[destinations.S3Bucket(bucket)]
)
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),
actions=[
actions.FirehosePutRecordAction(stream,
batch_mode=True,
record_separator=actions.FirehoseRecordSeparator.NEWLINE
)
]
)
Send messages to an SQS queue
The code snippet below creates an AWS IoT Rule that send messages to an SQS queue when it is triggered:
import aws_cdk.aws_sqs as sqs
queue = sqs.Queue(self, "MyQueue")
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"),
actions=[
actions.SqsQueueAction(queue,
use_base64=True
)
]
)
Publish messages on an SNS topic
The code snippet below creates and AWS IoT Rule that publishes messages to an SNS topic when it is triggered:
import aws_cdk.aws_sns as sns
topic = sns.Topic(self, "MyTopic")
topic_rule = iot.TopicRule(self, "TopicRule",
sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"),
actions=[
actions.SnsTopicAction(topic,
message_format=actions.SnsActionMessageFormat.JSON
)
]
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file aws-cdk.aws-iot-actions-1.204.0.tar.gz
.
File metadata
- Download URL: aws-cdk.aws-iot-actions-1.204.0.tar.gz
- Upload date:
- Size: 81.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c114f78965538b0e553144b3c55daa3f7335a9097bc607519ae3bf8f86d5228f |
|
MD5 | 787a566f46c9aa46b79b4bb7d1cd53c2 |
|
BLAKE2b-256 | 65ebea9dc1abe97a87cdb1444ad73e3dad7d35455e8fb2747bf6abcc1ba622d9 |
File details
Details for the file aws_cdk.aws_iot_actions-1.204.0-py3-none-any.whl
.
File metadata
- Download URL: aws_cdk.aws_iot_actions-1.204.0-py3-none-any.whl
- Upload date:
- Size: 80.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | af3443a7aec71e4a303eda16ee53fb1956d14e79ae791a1b79dc8b671a058560 |
|
MD5 | 693a3c85809dcff95c5a8eb15b83c41d |
|
BLAKE2b-256 | 3170a07d21183d7f299d65d85684f764ca5ecd52b64fa63c3eb701a87d0bfac5 |