AWS IoT Button and Lambda to power a blockchain project - AWS Serverless Web Day
-
Upload
aws-germany -
Category
Technology
-
view
714 -
download
2
Transcript of AWS IoT Button and Lambda to power a blockchain project - AWS Serverless Web Day
June 2016
AWS IoT+ Lambda to
power a blockchain project
by Johann Romefort
About Johann
• Tech Evangelist @Stylight
• 15+ years in tech
• In Germany for 2 years
• 7 years in San Francisco
doing startups
• Organizer of many meetups
2
Agenda
3
• Overview of the project & constraints
• Configure your AWS IoT Button
• Introduction to AWS IoT
• The MQTT Client
• Connecting it to Lambda
Technologies involved
4
• AWS IoT
• Lambda
• SQS
• Node.JS
• Ethereum
Overview of the project
5
• Creation of a digital certificate of attendance on the
blockchain
• Minimal UI and input mechanism
• Scan ticket, Press button and done!
Project Diagram: 10000 feet overview
6
7
1
2
3
scanTicket
getOrder
generateCertificate
4
5
writeToBlockchain
Project Diagram: 5000 feet overview
Project Constraints
8
• Should run on local computer with no access possible from
outside
• No access to keyboard or touch screen
• Certificate should be easy to verify, impossible to fake,
permanent
• Serverless
The Live Setup
• MacBook Pro running
local blockchain node
• AWS IoT button for user
input
What is Blockchain?
• Blockchain is the technology behind Bitcoin
• Bitcoin was created in 2008 by Satoshi Nakamoto
• Blockchain is literally a chain of blocks.
• A blockchain is immutable – no one can change
the data once it’s been written on the chain.
What is Blockchain?
What can I do with an immutable
distributed ledger?
• Cryptocurrencies
• Property titles
• Notarised acts
• Digital Certificates
• And more…
Why AWS IoT, Button and Lambda +
SQS?
13
• Simpler input command / device one can think about
• Very simple setup
• Communication with SQS allows for a simple client
running inside a firewall and subscribing to a queue
topic in the cloud
AWS IoT Button• Programmable version of the
Dash Button
• Easy Wifi configuration
• Connect directly to AWS IoT
• Interactions:
• Normal press
• Long press
• Double press
14
Configure your AWS IoT Button
15
Connect to button WIFI
network
16
Introduction to AWS IoT
17
• Serverless way to connect your IoT devices and start
processing data
• Supports MQTT, HTTP
• Secure - communication through use of X.509 Certificates
• Can connect huge amount of sensors, store and process the
data in real-time
AWS IoT Architecture
18source: http://docs.aws.amazon.com/iot/latest/developerguide/aws-iot-how-it-works.html
Source: https://aws.amazon.com/iot/how-it-works/
What’s a Thing?
20
• An IoT Device
• Eg: Intel Edison, Arduino Yun + sensors / actuators
• In our case an AWS IoT button
What’s the Message Broker?
21
• Used to securely exchange messages following the publish-
subscribe pattern, between IoT applications and Things.
• MQTT to publish/subscribe
• HTTP to publish
What’s the Rule Engine?
22
• Used to process messages and talk to other
AWS components like Lambda, DynamoDB,
etc
• SQL-Based language to select specific
messages to be passed along.
What are Thing Shadows?
23
• Devices sometimes go offline
• A Thing Shadow provide a persistent
representation of a Thing
• A Thing can sync its state to its Thing
Shadow
AWS IoT Console
24
Let’s look at the MQTT Client
25
• Message Queue Telemetry
Transport
• A lightweight publish-subscribe
messaging protocol for small
sensors and mobile devices,
optimized for high-latency or
unreliable networks
MQTT Client
26
• Generate ClientID
• Subscribe to topic iotbutton/+
• Press the button
• Watch event flowing
Don’t have a AWS IoT Button?
27
• Just use the MQTT Client to simulate a
payload
What do we want to do?
28
• Use the button as input device to validate the transaction
on the blockchain - Writing the transaction is a permanent
operation, certificate will be available forever.
• Send a SQS message to a topic our client is listening to.
Create your SQS Queue
29
Writing the Lambda
30
Configure the Policy Document
31
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Action": [
"sqs:SendMessage",
"sqs:GetQueueUrl"
],
"Effect": "Allow",
"Resource": "arn:aws:sqs:us-west-2:882247834355:buttonPressed"
}
]
}
Testing our Lambda
32
• Write client
code to listen to
SQS
• Use either AWS
IoT Button or
MQTT to test
the whole chain
Testing our Lambda
Going further
34
• We don’t need lambda!
• We can use SQS directly from
AWS IoT Rule Engine
Questions?
Follow me on twitter: @romefort
Check our blog: tech.stylight.com