API sans serveur

Données en continu avec AWS Kinesis et Lambda

Maksim Pecherskiy

Data Engineer

Leçon précédente

RGv3B.png

Données en continu avec AWS Kinesis et Lambda

Donner accès aux données

htdz9.png

Données en continu avec AWS Kinesis et Lambda

API simple

XTKzt.png

Données en continu avec AWS Kinesis et Lambda

API simple

RFhY5.png

Données en continu avec AWS Kinesis et Lambda

API simple

SuISK.png

Données en continu avec AWS Kinesis et Lambda

Ajouter un déclencheur

jSRoQ.png

Données en continu avec AWS Kinesis et Lambda

Tester votre nouvelle API

JtGop.png

Données en continu avec AWS Kinesis et Lambda

Notre première API

r2u54G.png

Données en continu 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
}
Données en continu 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")
Données en continu 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=" ")
Données en continu 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()
    }
Données en continu 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",
      ...
  },

  ...
]
Données en continu avec AWS Kinesis et Lambda

Déclencher une autre Lambda

oJAqB.png

Données en continu 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):
  ...

Données en continu avec AWS Kinesis et Lambda

ARN de speederAggregator

oB7uh.png

Données en continu avec AWS Kinesis et Lambda

Appeler (invoke)

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Données en continu avec AWS Kinesis et Lambda

Révision

f44P0.png

Données en continu avec AWS Kinesis et Lambda

Révision

Oi7du.png

Données en continu avec AWS Kinesis et Lambda

Révision

8yfg4.png

Données en continu avec AWS Kinesis et Lambda

Révision

BTM2Q.png

Données en continu avec AWS Kinesis et Lambda

Passons à la pratique !

Données en continu avec AWS Kinesis et Lambda

Preparing Video For Download...