Serverlose APIs

Datenstreaming mit AWS Kinesis und Lambda

Maksim Pecherskiy

Data Engineer

Letzte Lektion

RGv3B.png

Datenstreaming mit AWS Kinesis und Lambda

Zugriff auf Daten gewähren

htdz9.png

Datenstreaming mit AWS Kinesis und Lambda

Einfache API

XTKzt.png

Datenstreaming mit AWS Kinesis und Lambda

Einfache API

RFhY5.png

Datenstreaming mit AWS Kinesis und Lambda

Einfache API

SuISK.png

Datenstreaming mit AWS Kinesis und Lambda

Trigger hinzufügen

jSRoQ.png

Datenstreaming mit AWS Kinesis und Lambda

Neue API testen

JtGop.png

Datenstreaming mit AWS Kinesis und Lambda

Unsere erste API

r2u54G.png

Datenstreaming mit AWS Kinesis und Lambda

API-Parameter

Beispielanfrage
https://.../speederReporterApi?date=20200620
Beispiel-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

Mit Daten antworten

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

Live-Antwort

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

Weitere Lambda auslösen

oJAqB.png

Datenstreaming mit AWS Kinesis und Lambda

Weitere Lambda auslösen

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

Aufrufen

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

Rückblick

f44P0.png

Datenstreaming mit AWS Kinesis und Lambda

Rückblick

Oi7du.png

Datenstreaming mit AWS Kinesis und Lambda

Rückblick

8yfg4.png

Datenstreaming mit AWS Kinesis und Lambda

Rückblick

BTM2Q.png

Datenstreaming mit AWS Kinesis und Lambda

Lass uns üben!

Datenstreaming mit AWS Kinesis und Lambda

Preparing Video For Download...