Serverlösa API:er

Strömdata med AWS Kinesis och Lambda

Maksim Pecherskiy

Data Engineer

Förra lektionen

RGv3B.png

Strömdata med AWS Kinesis och Lambda

Ge åtkomst till data

htdz9.png

Strömdata med AWS Kinesis och Lambda

Enkelt API

XTKzt.png

Strömdata med AWS Kinesis och Lambda

Enkelt API

RFhY5.png

Strömdata med AWS Kinesis och Lambda

Enkelt API

SuISK.png

Strömdata med AWS Kinesis och Lambda

Lägg till en trigger

jSRoQ.png

Strömdata med AWS Kinesis och Lambda

Testa ditt nya API

JtGop.png

Strömdata med AWS Kinesis och Lambda

Vårt första API

r2u54G.png

Strömdata med AWS Kinesis och Lambda

API-parametrar

Exempelbegäran
https://.../speederReporterApi?date=20200620
Exempelhändelse
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Strömdata med AWS Kinesis och Lambda

Lambda-hanterare

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")
Strömdata med AWS Kinesis och Lambda

Lambda-hanterare

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=" ")
Strömdata med AWS Kinesis och Lambda

Svara med data

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Strömdata med AWS Kinesis och Lambda

Live-svar

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",
      ...
  },

  ...
]
Strömdata med AWS Kinesis och Lambda

Trigga en annan Lambda

oJAqB.png

Strömdata med AWS Kinesis och Lambda

Trigga en annan 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):
  ...

Strömdata med AWS Kinesis och Lambda

speederAggregator ARN

oB7uh.png

Strömdata med AWS Kinesis och Lambda

Anropa

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Strömdata med AWS Kinesis och Lambda

Sammanfattning

f44P0.png

Strömdata med AWS Kinesis och Lambda

Sammanfattning

Oi7du.png

Strömdata med AWS Kinesis och Lambda

Sammanfattning

8yfg4.png

Strömdata med AWS Kinesis och Lambda

Sammanfattning

BTM2Q.png

Strömdata med AWS Kinesis och Lambda

Nu kör vi en övning!

Strömdata med AWS Kinesis och Lambda

Preparing Video For Download...