Je eerste live lambda!

Streaming data met AWS Kinesis en Lambda

Maksim Pecherskiy

Data Engineer

Vorige les

StkGt.png

Streaming data met AWS Kinesis en Lambda

Deze les

Zb4Va.png

Streaming data met AWS Kinesis en Lambda

Common log-indeling

bc75da5f-1bf6-444c-80ad-49c180e1b8de 23:16:06.000 3FTEX1G5XAK844393 -76.6990172 2.481207 40
ff8e7131-408d-463b-8d07-d016419b0656 20:26:44.000 2LAXX1C8XAK844292 114.39239199999999 36.097577 90
f29a5b3d-d0fa-43c0-9e1a-e2a5cdb8be7a 8:10:47.000 3FTEX1G5XAK844393 108.58068100000001 34.79925 37
Streaming data met AWS Kinesis en Lambda

S3-bestanden lezen

import pandas as pd

results in:

Response:
{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'pandas'",
  "errorType": "Runtime.ImportModuleError"
}
Streaming data met AWS Kinesis en Lambda

De handler bijwerken

#lambda_function.py
import json, boto3, pandas as pd
# Initialiseer clients
...

SPEED_ALERT_THRESHOLD = 45 ALERT_PHONE_NUMBER = "+1234567890"
# Helperfunctie om een dataframe uit geschreven records te halen def get_new_data(event): pd.read_csv()... ... return data
# Lambda handler def record_created_handler(event, context): data = get_new_data(event) ... sns.publish() ...
Streaming data met AWS Kinesis en Lambda

get_new_data()

def get_new_data(event):
    # Maak een lijst om nieuwe objectkeys op te slaan.
    written_objects = []

    # Itereer over elke S3-eventrecord.
    for record in event['Records']:

        # Haal de variabelen op om te controleren
        event_name = record['eventName']
        bucket_name = record['s3']['bucket']['name']
        obj_key = record['s3']['object']['key']
Streaming data met AWS Kinesis en Lambda

get_new_data()

def get_new_data(event):
        ...
        # Verifieer dat het event uit de sd-vehicle-data-bucket komt.
        if event_name == 'ObjectCreated:Put' and bucket_name == 'sd-vehicle-data':

obj = s3.get_object(Bucket=bucket_name, Key = obj_key) df = pd.read_csv(obj['Body'], delimiter = " ", names=["record_id", "timestamp", "vin", "lon", "lat", "speed"])
written_objects.append(df)
# Voeg nieuwe records samen tot één dataframe. return pd.concat(written_objects)
Streaming data met AWS Kinesis en Lambda

record_created_handler()

SPEED_ALERT_THRESHOLD = 45
ALERT_PHONE_NUMBER = "+1234567890"
...
def record_created_handler(event, context):
    # Roep de helperfunctie aan
    data = get_new_data(event)

## Bepaal de topsnelheden top_speeds = data.groupby(['vin'])['speed'].max().reset_index()
## Filter snelheden boven de limiet van 45 too_fast = top_speeds.loc[top_speeds.speed > SPEED_ALERT_THRESHOLD, :]
Streaming data met AWS Kinesis en Lambda

record_created_handler()

SPEED_ALERT_THRESHOLD = 45
ALERT_PHONE_NUMBER = "+1234567890"
...

def record_created_handler(event, context):
    ...
    ## Stuur SMS
    sns.publish(PhoneNumber=ALERT_PHONE_NUMBER,
        Message="Speeding Alert \n" + too_fast.to_string())

## Dit gaat nog nergens heen, maar we moeten iets retourneren. totals = data.groupby(['vin'])['speed'].max().reset_index() return totals.to_csv(sep=" ", index=False)
Streaming data met AWS Kinesis en Lambda

De Lambda-functie testen

jBpMo.png

KodWB.png

Streaming data met AWS Kinesis en Lambda

Omgevingsvariabelen toevoegen

import os
os.environ.get("ENV_VARIABLE_NAME", "DEFAULT_VALUE")
import os
SPEED_ALERT_THRESHOLD = os.environ.get("SPEED_ALERT_THRESHOLD", 45)
ALERT_PHONE_NUMBER = os.environ.get("ALERT_PHONE_NUMBER", None)
...

def record_created_handler(event, context):
    ...
Streaming data met AWS Kinesis en Lambda

Omgevingsvariabelen toevoegen

7jD6x.png

Streaming data met AWS Kinesis en Lambda

Omgevingsvariabelen toevoegen

eDRTX.png

Streaming data met AWS Kinesis en Lambda

yKjWC.png

Streaming data met AWS Kinesis en Lambda

Een trigger toevoegen

gLmbZD.png

Streaming data met AWS Kinesis en Lambda

Een trigger toevoegen

7F08p.png

Streaming data met AWS Kinesis en Lambda

Een trigger toevoegen

bPUtX.png

Streaming data met AWS Kinesis en Lambda

Terugblik

ZAbfT.png

Streaming data met AWS Kinesis en Lambda

Terugblik

m9jlv.png

Streaming data met AWS Kinesis en Lambda

Terugblik

GTlyD.png

Streaming data met AWS Kinesis en Lambda

Terugblik

XddOW.png

Streaming data met AWS Kinesis en Lambda

Laten we oefenen!

Streaming data met AWS Kinesis en Lambda

Preparing Video For Download...