Serverless APIs

Streaming de données avec AWS Kinesis et Lambda

Maksim Pecherskiy

Data Engineer

Last lesson

RGv3B.png

Streaming de données avec AWS Kinesis et Lambda

Giving access to data

htdz9.png

Streaming de données avec AWS Kinesis et Lambda

Simple API

XTKzt.png

Streaming de données avec AWS Kinesis et Lambda

Simple API

RFhY5.png

Streaming de données avec AWS Kinesis et Lambda

Simple API

SuISK.png

Streaming de données avec AWS Kinesis et Lambda

Add a trigger

jSRoQ.png

Streaming de données avec AWS Kinesis et Lambda

Test your new API

JtGop.png

Streaming de données avec AWS Kinesis et Lambda

Our first API

r2u54G.png

Streaming de données avec AWS Kinesis et Lambda

API parameters

Sample request
https://.../speederReporterApi?date=20200620
Sample event
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Streaming de données avec AWS Kinesis et 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")
Streaming de données avec AWS Kinesis et 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=" ")
Streaming de données avec AWS Kinesis et Lambda

Respond with data

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Streaming de données avec AWS Kinesis et 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",
      ...
  },

  ...
]
Streaming de données avec AWS Kinesis et Lambda

Trigger another Lambda

oJAqB.png

Streaming de données avec AWS Kinesis et 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):
  ...

Streaming de données avec AWS Kinesis et Lambda

speederAggregator ARN

oB7uh.png

Streaming de données avec AWS Kinesis et Lambda

Invoke

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Streaming de données avec AWS Kinesis et Lambda

Review

f44P0.png

Streaming de données avec AWS Kinesis et Lambda

Review

Oi7du.png

Streaming de données avec AWS Kinesis et Lambda

Review

8yfg4.png

Streaming de données avec AWS Kinesis et Lambda

Review

BTM2Q.png

Streaming de données avec AWS Kinesis et Lambda

Let's practice!

Streaming de données avec AWS Kinesis et Lambda

Preparing Video For Download...