Serverless APIs

Datenstreaming mit AWS Kinesis und Lambda

Maksim Pecherskiy

Data Engineer

Last lesson

RGv3B.png

Datenstreaming mit AWS Kinesis und Lambda

Giving access to data

htdz9.png

Datenstreaming mit AWS Kinesis und Lambda

Simple API

XTKzt.png

Datenstreaming mit AWS Kinesis und Lambda

Simple API

RFhY5.png

Datenstreaming mit AWS Kinesis und Lambda

Simple API

SuISK.png

Datenstreaming mit AWS Kinesis und Lambda

Add a trigger

jSRoQ.png

Datenstreaming mit AWS Kinesis und Lambda

Test your new API

JtGop.png

Datenstreaming mit AWS Kinesis und Lambda

Our first API

r2u54G.png

Datenstreaming mit AWS Kinesis und Lambda

API parameters

Sample request
https://.../speederReporterApi?date=20200620
Sample event
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Datenstreaming mit AWS Kinesis und Lambda

Lambda handler

import json, boto3
import awswrangler as wr
import pandas as pd

session = boto3.Session(aws_access_key_id = AWS_KEY, aws_secret_access_key = AWS_SECRET, region_name="us-east-1")
Datenstreaming mit AWS Kinesis und Lambda

Lambda handler

def lambda_handler(event, context):
    filter_date = event['queryStringParameters']['date']

df = wr.s3.read_csv( f"s3://sd-vehicle-data/speeders_daily/{filter_date}.csv", boto3_session=session, delimiter=" ")
Datenstreaming mit AWS Kinesis und Lambda

Respond with data

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Datenstreaming mit AWS Kinesis und Lambda

Live response

https://.../default/speederReporterApi?date=20200621
[
  {
      "record_id":"939ed1d1-1740-420c-8906-445278573c7f",
      "timestamp":"4:25:06.000",
      "vin":"4FTEX4944AK844294",
      "lon":106.9447146,
      "lat":-6.3385652,
      "speed":25
  },
  {
      "record_id":"f29a5b3d-d0fa-43c0-9e1a-e2a5cdb8be7a",
      ...
  },

  ...
]
Datenstreaming mit AWS Kinesis und Lambda

Trigger another Lambda

oJAqB.png

Datenstreaming mit AWS Kinesis und Lambda

Trigger another Lambda

def trigger_recalc():
  lambda_client = boto3.client("s3", 
                            aws_access_key_id = AWS_KEY, 
                            aws_secret_access_key = AWS_SECRET, 
                            region_name = 'us-east-1')

def lambda_handler(event, context):
  ...

Datenstreaming mit AWS Kinesis und Lambda

speederAggregator ARN

oB7uh.png

Datenstreaming mit AWS Kinesis und Lambda

Invoke

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Datenstreaming mit AWS Kinesis und Lambda

Review

f44P0.png

Datenstreaming mit AWS Kinesis und Lambda

Review

Oi7du.png

Datenstreaming mit AWS Kinesis und Lambda

Review

8yfg4.png

Datenstreaming mit AWS Kinesis und Lambda

Review

BTM2Q.png

Datenstreaming mit AWS Kinesis und Lambda

Let's practice!

Datenstreaming mit AWS Kinesis und Lambda

Preparing Video For Download...