API-uri serverless

Date în flux cu AWS Kinesis și Lambda

Maksim Pecherskiy

Data Engineer

Lecția anterioară

RGv3B.png

Date în flux cu AWS Kinesis și Lambda

Acordarea accesului la date

htdz9.png

Date în flux cu AWS Kinesis și Lambda

API simplu

XTKzt.png

Date în flux cu AWS Kinesis și Lambda

API simplu

RFhY5.png

Date în flux cu AWS Kinesis și Lambda

API simplu

SuISK.png

Date în flux cu AWS Kinesis și Lambda

Adăugați un trigger

jSRoQ.png

Date în flux cu AWS Kinesis și Lambda

Testați noul API

JtGop.png

Date în flux cu AWS Kinesis și Lambda

Primul nostru API

r2u54G.png

Date în flux cu AWS Kinesis și Lambda

Parametrii API

Exemplu de cerere
https://.../speederReporterApi?date=20200620
Exemplu de eveniment
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Date în flux cu AWS Kinesis și Lambda

Handler Lambda

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")
Date în flux cu AWS Kinesis și Lambda

Handler Lambda

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=" ")
Date în flux cu AWS Kinesis și Lambda

Răspuns cu date

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Date în flux cu AWS Kinesis și Lambda

Răspuns live

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

  ...
]
Date în flux cu AWS Kinesis și Lambda

Declanșarea altui Lambda

oJAqB.png

Date în flux cu AWS Kinesis și Lambda

Declanșarea altui 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):
  ...

Date în flux cu AWS Kinesis și Lambda

ARN speederAggregator

oB7uh.png

Date în flux cu AWS Kinesis și Lambda

Invocare

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Date în flux cu AWS Kinesis și Lambda

Recapitulare

f44P0.png

Date în flux cu AWS Kinesis și Lambda

Recapitulare

Oi7du.png

Date în flux cu AWS Kinesis și Lambda

Recapitulare

8yfg4.png

Date în flux cu AWS Kinesis și Lambda

Recapitulare

BTM2Q.png

Date în flux cu AWS Kinesis și Lambda

Să exersăm!

Date în flux cu AWS Kinesis și Lambda

Preparing Video For Download...