Serverless API’s

Streaming data met AWS Kinesis en Lambda

Maksim Pecherskiy

Data Engineer

Vorige les

RGv3B.png

Streaming data met AWS Kinesis en Lambda

Toegang geven tot data

htdz9.png

Streaming data met AWS Kinesis en Lambda

Eenvoudige API

XTKzt.png

Streaming data met AWS Kinesis en Lambda

Eenvoudige API

RFhY5.png

Streaming data met AWS Kinesis en Lambda

Eenvoudige API

SuISK.png

Streaming data met AWS Kinesis en Lambda

Voeg een trigger toe

jSRoQ.png

Streaming data met AWS Kinesis en Lambda

Test je nieuwe API

JtGop.png

Streaming data met AWS Kinesis en Lambda

Onze eerste API

r2u54G.png

Streaming data met AWS Kinesis en Lambda

API-parameters

Voorbeeldverzoek
https://.../speederReporterApi?date=20200620
Voorbeeldevent
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Streaming data met AWS Kinesis en 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 data met AWS Kinesis en 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 data met AWS Kinesis en Lambda

Reageren met data

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Streaming data met AWS Kinesis en 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 data met AWS Kinesis en Lambda

Start een andere Lambda

oJAqB.png

Streaming data met AWS Kinesis en Lambda

Start een andere 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 data met AWS Kinesis en Lambda

speederAggregator-ARN

oB7uh.png

Streaming data met AWS Kinesis en Lambda

Aanroepen

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

Herhaling

f44P0.png

Streaming data met AWS Kinesis en Lambda

Herhaling

Oi7du.png

Streaming data met AWS Kinesis en Lambda

Herhaling

8yfg4.png

Streaming data met AWS Kinesis en Lambda

Herhaling

BTM2Q.png

Streaming data met AWS Kinesis en Lambda

Laten we oefenen!

Streaming data met AWS Kinesis en Lambda

Preparing Video For Download...