- What is this architecture?
- What is CBOR?
- Where is this architecture applicable?
- How do I launch it?
- I ran into an issue with cdk deploy, what do I do?
- Is there a quick way to test it?
- How does the system work?
This architecture shows how to take messages on specific IoT topics and convert them to/from CBOR format. Messages sent to the cbor/input
topic in CBOR format come out on the json/output
topic in JSON format. Messages sent to the json/input
topic in JSON format come out on the cbor/output
topic in CBOR format.
This architecture is applicable for customers that are looking for examples of how to convert messages from one format to another. This architecture shows how to work with JSON payloads as well as CBOR binary payloads. With this architecture customers can start to build systems that convert and re-route messages to appropriate destinations easily.
Install the AWS CDK with npm if you haven't already like this:
$ npm i -g aws-cdk
Then run cdk deploy
.
If you'd like to see the CloudFormation template that will be launched when you do this you can first do cdk synth
and review it.
Open a Github issue and provide as much context as possible. cdk deploy
in this project requires a JDK to be installed since the CDK code was written in Java. If you don't have a JDK installed you'll need to install one before running the deployment command.
Yes, there are two bash scripts to test converting from JSON to CBOR and from CBOR to JSON. The scripts don't receive the response via MQTT though so you'll need to use your own MQTT client to subscribe to the appropriate topics and see the responses.
Run ./send-json-test-message.sh
. The following message will be sent to the json/input
topic:
{
"message": "Hello from a bash script"
}
The output will show up on the cbor/output
topic in binary format. In the AWS IoT console's MQTT it should look like this:
a1676d657373616765781848656c6c6f2066726f6d2061206261736820736372697074
Run ./send-cbor-test-message.sh
. A binary message will be sent to the cbor/input
topic. In the AWS IoT console's MQTT it should look like this:
a1676d657373616765781a48656c6c6f2066726f6d20612062617368207363726970742032
The output will show up on the json/output
topic and should look like this:
{
"message": "Hello from a bash script 2"
}
Two Java Lambda functions are set up to convert from JSON to CBOR and CBOR to JSON.
When a JSON message is sent to the json/input
topic the AWS IoT Rules Engine sends the payload to the com.awssamples.iot.cbor.handler.handlers.HandleJsonEvent::handleRequest
method in AWS Lambda. This function takes the entire input as a String and calls CBORObject.FromJSONStrong
to automatically convert the payload from JSON to CBOR. The result is then sent to the json/output
topic.
When a CBOR message is sent to the cbor/input
topic the AWS IoT Rules Engine converts the payload to base64. The base64 payload is then put into a Java Map in an entry named data
and shipped to the com.awssamples.iot.cbor.handler.handlers.HandleCborEvent::handleRequest
function in AWS Lambda. This function base64 decodes the data
entry, calls CBORObject.Read
to convert the CBOR payload to a CBOR object, and then calls the CBOR object's ToJSONString
method to get the JSON payload. The result is then sent to the json/output
topic.