Slide 1

Slide 1 text

serverless IoT-Applications BED-Con 2017 Niko Will, innoQ @n1ko_w1ll

Slide 2

Slide 2 text

@n1ko_w1ll about me > Developer since 2005 > living in a Smarthome since 2012 > became an IoT Geek > before: worked on Bosch IoT Suite for 2 years > now: Consultant at innoQ > follow me on Twitter: @n1ko_w1ll

Slide 3

Slide 3 text

@n1ko_w1ll agenda > microservices approach > AWS, Lambda & IoT > use-cases > JITR | on-boarding | pairing > list / search things | command & control | telemetry > connected / disconnected / LWT > encrypted file transfer | firmware update

Slide 4

Slide 4 text

@n1ko_w1ll microservice approach

Slide 5

Slide 5 text

@n1ko_w1ll microservices approach > fault tolerance > scalability > agility > visibility > security > cost-efficiency

Slide 6

Slide 6 text

@n1ko_w1ll microservices approach thing mobile client browser IoT-application API Gateway MQTT Broker database Users Devices Policies Rules Analytics …

Slide 7

Slide 7 text

@n1ko_w1ll microservices approach API Gateway MQTT Broker database Devices … microservices Devices Devices … … Message Broker Service Discovery IAM Keystore API Gateway API Gateway MQTT Broker MQTT Broker Service Discovery Service Discovery Message Broker Message Broker IAM IAM Keystore HSM docker / kubernetes

Slide 8

Slide 8 text

@n1ko_w1ll microservices approach Devices microservices docker / kubernetes Alert Manager prometheus Grafana fluentd Kibana elasticsearch operations (DevOps) logging monitoring alerting

Slide 9

Slide 9 text

@n1ko_w1ll source: https://www.memecenter.com/fun/5802169/what-could-possibly-go-wrong

Slide 10

Slide 10 text

@n1ko_w1ll AWS

Slide 11

Slide 11 text

@n1ko_w1ll AWS Amazon S3 Amazon Elasticsearch Amazon Kinesis Amazon SNS Amazon SQS Amazon DynamoDB Amazon Cognito Amazon API Gateway AWS Lambda Amazon CloudWatch AWS IoT State Fast Data

Slide 12

Slide 12 text

@n1ko_w1ll AWS Lambda

Slide 13

Slide 13 text

@n1ko_w1ll AWS Lambda > Functions-as-a-Service (FaaS) > serverless > „small“ functions > stateless compute containers > event-driven

Slide 14

Slide 14 text

@n1ko_w1ll AWS Lambda > advantages > scalable > pay-per-execution / pay-as-you-go > no upfront capacity planning > significantly reduce operational cost

Slide 15

Slide 15 text

@n1ko_w1ll AWS Lambda > disadvantages > vendor lock-in > startup latency > testing > debugging > execution duration

Slide 16

Slide 16 text

@n1ko_w1ll

Slide 17

Slide 17 text

@n1ko_w1ll AWS IoT

Slide 18

Slide 18 text

@n1ko_w1ll AWS IoT > managed service > message broker > rules engine > shadows > registry > security

Slide 19

Slide 19 text

@n1ko_w1ll message broker > topic based > publish / subscribe > topic wildcards > protocols > MQTT > MQTT + WebSockets > HTTP $aws/events/presence/connected/clientId $aws/events/presence/disconnected/clientId $aws/things/thingName/shadow/update $aws/things/thingName/shadow/update/delta

Slide 20

Slide 20 text

@n1ko_w1ll rules engine > SQL-like syntax > augument or filter data > rule actions > state stores > fast data pipelines > CloudWatch > Lambda > republish SELECT *, newuuid() AS requestId, clientId() AS clientId, timestamp() AS timestamp, topic(2) AS deviceId, topic(4) AS sensorId FROM 'device/+/sensor/+/v1' WHERE temperature > 50 AND color <> 'red'

Slide 21

Slide 21 text

@n1ko_w1ll shadows > JSON document > current state of thing > connection independent > supports client tokens > supports versioning > MQTT topics > RESTful API { "state" : { "desired" : { "color" : "RED" }, "reported" : { "color" : „GREEN" } }, "metadata" : { "desired" : { "color" : { "timestamp" : 12345 } }, "reported" : { "color" : { "timestamp" : 12345 } } }, "version" : 10, "clientToken" : "UniqueClientToken", "timestamp": 123456789 }

Slide 22

Slide 22 text

@n1ko_w1ll registry > manage your things > physical device or sensor > logical entity > attributes > thing types { "version": 3, "thingName": "MyLightBulb", "defaultClientId": "MyLightBulb", "thingTypeName": "LightBulb", "attributes": { "model": "123", "wattage": "75" } }

Slide 23

Slide 23 text

@n1ko_w1ll security > mutual authentication with X509 certificates + TLS 1.2 > or SigV4 for HTTPS and WebSockets > bring your own certificate > JITR > Atmel ECC508 > policy based access with dynamic values > role based rules action execution

Slide 24

Slide 24 text

@n1ko_w1ll use-cases

Slide 25

Slide 25 text

@n1ko_w1ll just in time registration (JITR) thing AWS IoT Device Registry $aws/events/certificates/ registered/caCertificateID IoT Policy IoT Rule AWS Lambda

Slide 26

Slide 26 text

@n1ko_w1ll on-boarding thing AWS IoT AWS Lambda custom/clientId/register IoT Rule IoT Policy Device Shadow Amazon DynamoDB

Slide 27

Slide 27 text

@n1ko_w1ll thing IoT Policy Device Shadow mobile client AWS Lambda Amazon Cognito Amazon API Gateway AWS IoT thing pairing exchange OAuth token for AWS credentials

Slide 28

Slide 28 text

@n1ko_w1ll list / search things things mobile client AWS Lambda Amazon Cognito Amazon API Gateway AWS IoT Amazon DynamoDB

Slide 29

Slide 29 text

@n1ko_w1ll command & control thing mobile client AWS Lambda Amazon Cognito Amazon API Gateway AWS IoT Device Shadow

Slide 30

Slide 30 text

@n1ko_w1ll command & control thing mobile client Amazon Cognito AWS IoT Device Shadow

Slide 31

Slide 31 text

@n1ko_w1ll command & control thing Amazon Cognito AWS IoT Amazon Echo AWS Lambda Alexa Skill Device Shadow

Slide 32

Slide 32 text

@n1ko_w1ll telemetry AWS IoT things Amazon Kinesis Amazon DynamoDB telemetry rule telemetry topic Amazon EMR

Slide 33

Slide 33 text

@n1ko_w1ll { "state": { "reported": { "connected": true } } } { "state": { "reported": { "connected": true } } } connected / disconnected / LWT Device Shadow thing AWS IoT shadow update topic

Slide 34

Slide 34 text

@n1ko_w1ll { "state": { "reported": { "connected": true } } } { "state": { "reported": { "connected": false } } } { "state": { "reported": { "connected": false } } } connected / disconnected / LWT Device Shadow thing AWS IoT shadow update topic

Slide 35

Slide 35 text

@n1ko_w1ll { "state": { "reported": { "connected": true } } } { "state": { "reported": { "connected": false } } } connected / disconnected / LWT Device Shadow thing AWS IoT LWT rule custom LWT topic LWT { "state": { "reported": { "connected": false } } } shadow update topic republish

Slide 36

Slide 36 text

@n1ko_w1ll encrypted file transfer Amazon S3 thing AWS IoT AWS Lambda AWS KMS

Slide 37

Slide 37 text

@n1ko_w1ll firmware update Device Shadow AWS Lambda thing AWS IoT Amazon S3 Amazon DynamoDB

Slide 38

Slide 38 text

@n1ko_w1ll summary > scalable plattform > common IoT use-cases > w/o own infrastructure > w/o upfront capacity planning > very secure > very extensible

Slide 39

Slide 39 text

@n1ko_w1ll Thank you. Questions? Comments @n1ko_w1ll Niko Will [email protected] innoQ Deutschland GmbH Krischerstr. 100 40789 Monheim am Rhein Germany Phone: +49 2173 3366-0 innoQ Schweiz GmbH Gewerbestr. 11 CH-6330 Cham Switzerland Phone: +41 41 743 0116 www.innoq.com Ohlauer Straße 43 10999 Berlin Germany Phone: +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany Phone: +49 2173 3366-0 Kreuzstraße 16
 80331 München Germany Phone: +49 2173 3366-0