API serverless

Streaming de données avec AWS Kinesis et Lambda

Maksim Pecherskiy

Data Engineer

Leçon précédente

RGv3B.png

Streaming de données avec AWS Kinesis et Lambda

Donner accès aux données

htdz9.png

Streaming de données avec AWS Kinesis et Lambda

API simple

XTKzt.png

Streaming de données avec AWS Kinesis et Lambda

API simple

RFhY5.png

Streaming de données avec AWS Kinesis et Lambda

API simple

SuISK.png

Streaming de données avec AWS Kinesis et Lambda

Ajouter un déclencheur

jSRoQ.png

Streaming de données avec AWS Kinesis et Lambda

Tester votre nouvelle API

JtGop.png

Streaming de données avec AWS Kinesis et Lambda

Notre première API

r2u54G.png

Streaming de données avec AWS Kinesis et Lambda

Paramètres d'API

Requête d'exemple
https://.../speederReporterApi?date=20200620
Événement d'exemple
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Streaming de données avec AWS Kinesis et Lambda

Gestionnaire 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")
Streaming de données avec AWS Kinesis et Lambda

Gestionnaire 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=" ")
Streaming de données avec AWS Kinesis et Lambda

Répondre avec des données

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

Réponse en direct

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

Déclencher une autre Lambda

oJAqB.png

Streaming de données avec AWS Kinesis et Lambda

Déclencher une autre 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

ARN de speederAggregator

oB7uh.png

Streaming de données avec AWS Kinesis et Lambda

Invoquer

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

Révision

f44P0.png

Streaming de données avec AWS Kinesis et Lambda

Révision

Oi7du.png

Streaming de données avec AWS Kinesis et Lambda

Révision

8yfg4.png

Streaming de données avec AWS Kinesis et Lambda

Révision

BTM2Q.png

Streaming de données avec AWS Kinesis et Lambda

Passons à la pratique !

Streaming de données avec AWS Kinesis et Lambda

Preparing Video For Download...