Package: aws-cdk.aws-iot-actions-alpha
Actions for AWS IoT Rule---The APIs of higher level constructs in this module are experimental and under active development.
They are subject to non-backward compatible changes or removal in any future version. These are
not subject to theSemantic Versioningmodel and breaking changes will be
announced in the release notes. This means that while you may use them, you may need to update
your source code when upgrading to a newer version of this package.This library contains integration classes to send data to any number of
supported AWS Services. Instances of these classes should be passed toTopicRuledefined inaws-cdk-lib/aws-iot.Currently supported are:Republish a message to another MQTT topicInvoke a Lambda functionPut objects to a S3 bucketPut logs to CloudWatch LogsCapture CloudWatch metricsChange state for a CloudWatch alarmPut records to Kinesis Data streamPut records to Kinesis Data Firehose streamSend messages to SQS queuesPublish messages on SNS topicsWrite messages into columns of DynamoDBPut messages IoT Events inputSend messages to HTTPS endpointsRepublish a message to another MQTT topicThe 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 functionThe 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_LATEST,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 bucketThe code snippet below creates an AWS IoT Rule that puts 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 propertykeyofS3PutObjectActionis given the value${topic()}/${timestamp()}by default. This${topic()}and${timestamp()}is called Substitution templates. For more information seethis documentation.
In above sample,${topic()}is replaced by a given MQTT topic asdevice/001/data. And${timestamp()}is replaced
by the number of the current timestamp in milliseconds as1636289461203. So if the MQTT broker receives an MQTT topicdevice/001/dataon2021-11-07T00:00:00.000Z, the S3 bucket object will be put todevice/001/data/1636243200000.You can also set specifickeyas 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 specifyaccessControlas 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 LogsThe code snippet below creates an AWS IoT Rule that puts logs to CloudWatch Logs
when it is triggered.importaws_cdk.aws_logsaslogslog_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 metricsThe 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}")])Start Step Functions State MachineThe code snippet below creates an AWS IoT Rule that starts a Step Functions State Machine
when it is triggered.state_machine=stepfunctions.StateMachine(self,"SM",definition_body=stepfunctions.DefinitionBody.from_chainable(stepfunctions.Wait(self,"Hello",time=stepfunctions.WaitTime.duration(Duration.seconds(10)))))iot.TopicRule(self,"TopicRule",sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),actions=[actions.StepFunctionsStateMachineAction(state_machine)])Change the state of an Amazon CloudWatch alarmThe code snippet below creates an AWS IoT Rule that changes the state of an Amazon CloudWatch alarm when it is triggered:importaws_cdk.aws_cloudwatchascloudwatchmetric=cloudwatch.Metric(namespace="MyNamespace",metric_name="MyMetric",dimensions_map={"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 streamThe code snippet below creates an AWS IoT Rule that puts records to Kinesis Data
stream when it is triggered.importaws_cdk.aws_kinesisaskinesisstream=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 streamThe code snippet below creates an AWS IoT Rule that puts records to Put records
to Kinesis Data Firehose stream when it is triggered.importaws_cdk.aws_kinesisfirehose_alphaasfirehoseimportaws_cdk.aws_kinesisfirehose_destinations_alphaasdestinationsbucket=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 queueThe code snippet below creates an AWS IoT Rule that send messages
to an SQS queue when it is triggered:importaws_cdk.aws_sqsassqsqueue=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 topicThe code snippet below creates and AWS IoT Rule that publishes messages to an SNS topic when it is triggered:importaws_cdk.aws_snsassnstopic=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)])Write attributes of a message to DynamoDBThe code snippet below creates an AWS IoT rule that writes all or part of an
MQTT message to DynamoDB using the DynamoDBv2 action.importaws_cdk.aws_dynamodbasdynamodb# table: dynamodb.Tabletopic_rule=iot.TopicRule(self,"TopicRule",sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),actions=[actions.DynamoDBv2PutItemAction(table)])Put messages IoT Events inputThe code snippet below creates an AWS IoT Rule that puts messages
to an IoT Events input when it is triggered:importaws_cdk.aws_iotevents_alphaasioteventsimportaws_cdk.aws_iamasiam# role: iam.IRoleinput=iotevents.Input(self,"MyInput",attribute_json_paths=["payload.temperature","payload.transactionId"])topic_rule=iot.TopicRule(self,"TopicRule",sql=iot.IotSql.from_string_as_ver20160323("SELECT * FROM 'device/+/data'"),actions=[actions.IotEventsPutMessageAction(input,batch_mode=True,# optional property, default is 'false'message_id="${payload.transactionId}",# optional property, default is a new UUIDrole=role)])Send Messages to HTTPS EndpointsThe code snippet below creates an AWS IoT Rule that sends messages
to an HTTPS endpoint when it is triggered: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'"))topic_rule.add_action(actions.HttpsAction("https://example.com/endpoint",confirmation_url="https://example.com",headers=[actions.HttpActionHeader(key="key0",value="value0"),actions.HttpActionHeader(key="key1",value="value1")],auth=actions.HttpActionSigV4Auth(service_name="serviceName",signing_region="us-east-1")))Write Data to Open Search ServiceThe code snippet below creates an AWS IoT Rule that writes data
to an Open Search Service when it is triggered:importaws_cdk.aws_opensearchserviceasopensearch# domain: opensearch.Domaintopic_rule=iot.TopicRule(self,"TopicRule",sql=iot.IotSql.from_string_as_ver20160323("SELECT topic(2) as device_id, year, month, day FROM 'device/+/data'"))topic_rule.add_action(actions.OpenSearchAction(domain,id="my-id",index="my-index",type="my-type"))