Building better IoT Applications without Servers
Ian Massingham Technology Evangelist, AWS
IanMmmm
Development, It’s fun
What’s hard (and probably not fun)
about running applications?
Deployment
Operations
Scaling
Security
Cost Optimisation
Lifecycle Management
Why Serverless?
It helps to solve a lot of these issues
One implementation: AWS Lambda
(plus a few other bits & pieces)
How do you apply these techniques to IoT?
Before we get to that
Other problems you need to solve
Device connectivity. It might be intermittent
Authentication & Authorisation
Device Registration
Security & cryptographic materials handling
Deploying/scaling/updating your Business/App Logic
Persisting Device Data (with the right characteristics)
(Predictive) Analytics/Visualisation
Building on platforms helps
AWS IoT
So don’t build a platform, unless you’re building a platform. In
which case, fine, build a platform.
Building ‘Hello World’ (for IoT Developers)
Turns out, developers are creative
Sassy Ping PongScore Keeper
Source: https://www.hackster.io/youngd/ping-pong-showdown-eabaed
Slack-powered Doorbell
Source: www.theatlantic.com/notes/2016/07/make-every-week-2-a-silent-slack-powered-doorbell/490880/
Source: http://www.andrewmcgill.me/2016/08/19/make-every-week-sweetgreen-salad-button.html
EmergencySweet Green Ordering
Push a button to get directions to the right meal within your budget. (Integrate time of day, weather, Google Directions, Yelp, and Stripe)
Source: https://medium.com/@_adeel/nerding-out-with-the-amazon-iot-button-84a6e14b6b28#.ekd5hsnez
How does it work?Invoke a Lambda function
Put object in an S3 bucket
Insert, Update, Read from a DynamoDB table
Publish to an SNS Topic or Endpoint
Publish to a Kinesis stream
Kinesis Firehose > Redshift
Republish to AWS IoT
AWS IoT
All with no servers, of course
But wait, I live in the UK and I want to do this. Right now!
HARDWARE YOU WILL (& MIGHT) NEED
• A Raspberry Pi
• Electronics Kit • Try the SunFounder 37 modules Sensor Kit v2.0 for
Raspberry Pi 3, 2, Model B+ with 40-Pin GPIO Extension Board & Jump Wires
• http://www.amazon.co.uk/dp/B014PF05ZA • Example tutorial
• Raspberry Pi Sense Hat (optional fun) • https://www.raspberrypi.org/products/sense-hat/
SETTING UP FOR GPIO/SENSE HAT
Your own electronics/sensor build C (for embedded C)
http://wiringpi.com Python Wrapper Module for WiringPI
https://github.com/WiringPi/WiringPi-Python
For the Sense Hat Python Module
https://github.com/RPi-Distro/python-sense-hat
SETTING UP FOR AWS IOT
Use the AWS Console to create your device
Download the required crypto materials & save the C header file contents with your endpoint, cert, and key details
Download & set up your chosen AWS IoT SDK Get them at : https://aws.amazon.com/iot/sdk/
Building the C SDK on the Raspberry Pi requires the CppUTest library from: https://github.com/cpputest/cpputest/releases/tag/v3.6
Get started with the sample applications that come with the AWS SDKs
EXAMPLES & DEMOS
Emulating the AWS IoT Button (C++) https://github.com/ianmas-aws/iot-button-emulator
Controlling the Sense Hat via AWS IoT Device Shadow (Python) https://github.com/ianmas-aws/PiPyIoT
Go Build, Have Fun
Ian Massingham Technology Evangelist, AWS
IanMmmm
1.
2.
2.
3.
4.
Alert Someone: AWS IoT to AWS Lambda to SNS
Lambda Function
AWS IoT Rules Engine
PolicyPrivate Key & Certificate
Button
RuleSDK
AWS IoT
AWS Services
Execution Role Policy
SNS Topic
PermissionAction
SNS Topic Subscription
Rule: “Select * from ‘iotbutton/+’
Event Source
Function
SMS or Email
Count items or Track Usage: AWS IoT to DynamoDB to Dashboard
DynamoDB
Rules Engine
Dashboard
S3 Website
Lambda Function
PolicyPrivate Key & Certificate
Button
RuleSDK
AWS IoT
AWS Services
Execution Role
PolicyPermissionAction
Rule: “Select * from ‘iotbutton/+’
Event Source
FunctionDynamoDB API Gateway
Start or Stop Something : AWS IoT to AWS Lambda to an External Endpoint
Lambda Function
Rules Engine
PolicyPrivate Key & Certificate
Thing/Device
RuleSDK
AWS IoT AWS Services
Execution Role Policy
External Endpoint
Permission
Rule: Select * from ‘iotbutton/+’
Action
External API
LifX API