Werken met de Firehose-deliverystream

Streaming data met AWS Kinesis en Lambda

Maksim Pecherskiy

Data Engineer

Klaar om stream te maken

KF414O.png

Streaming data met AWS Kinesis en Lambda

Klaar om stream te maken

YgVbe.png

Streaming data met AWS Kinesis en Lambda

Klaar om stream te maken

BBYB4.png

Streaming data met AWS Kinesis en Lambda

Klaar om stream te maken

Ue73e.png

Streaming data met AWS Kinesis en Lambda

Klaar om stream te maken

qUq0E.png

Streaming data met AWS Kinesis en Lambda

Role ARN ophalen

qH99c.png

Streaming data met AWS Kinesis en Lambda

boto3-client initialiseren

import boto3

firehose = boto3.client('firehose', 
                        aws_access_key_id=AWS_KEY_ID, 
                        aws_secret_access_key=AWS_SECRET, 
                        region_name='us-east-1')
Streaming data met AWS Kinesis en Lambda

Maak de stream aan!

res = firehose.create_delivery_stream(

DeliveryStreamName = "gps-delivery-stream",
DeliveryStreamType = "DirectPut",
S3DestinationConfiguration = {
"RoleARN": "arn:aws:iam::0000000:role/firehoseDeliveryRole",
"BucketARN": "arn:aws:s3:::sd-vehicle-data"
}
)
Streaming data met AWS Kinesis en Lambda

Respons van create stream

print(res['DeliveryStreamARN'])
# ARN van de nieuwe stream
"arn:aws:firehose:us-east-1:0000000:deliverystream/gps-delivery-stream"
Streaming data met AWS Kinesis en Lambda

Stream is klaar

z0Fp4.png

Streaming data met AWS Kinesis en Lambda

Schrijven naar stream

La0zZ.png

Streaming data met AWS Kinesis en Lambda

Telematica-hardware

OGHUHC.png

Streaming data met AWS Kinesis en Lambda

Telematica-gegevens verzenden

wCJz8.png

Streaming data met AWS Kinesis en Lambda

Eén record

{

'record_id': '939ed1d1-1740-420c-8906-445278573c7f', # <-- Unieke record-id
'timestamp': '4:25:06.000', # <-- tijdstip van meting
'vin': '4FTEX4944AK844294', # <-- voertuig-id
'lon': 106.9447146, # <-- lengtegraad voertuiglocatie
'lat': -6.3385652, # <-- breedtegraad voertuiglocatie
'speed': 25 # <-- snelheid voertuig
}
Streaming data met AWS Kinesis en Lambda

Records komen binnen

vRg6A.png

Streaming data met AWS Kinesis en Lambda

Nog een usecase

gu6oT.png

Streaming data met AWS Kinesis en Lambda

Nog een usecase

XFD7E.png

Streaming data met AWS Kinesis en Lambda

Patronen

h7hUU.png

Streaming data met AWS Kinesis en Lambda

Een record versturen

res = firehose.put_record(

DeliveryStreamName='gps-delivery-stream',
Record = { 'Data': payload }
)
Streaming data met AWS Kinesis en Lambda

Een record versturen

    Record = {
        'Data': payload 
    }
Streaming data met AWS Kinesis en Lambda

Een record versturen

Hoe ons record eruitziet
record = {
 'record_id': '939ed1d1-1740-420c-8906-445278573c7f',
 'timestamp': '4:25:06.000','vin': '4FTEX4944AK844294',
 'lon': 106.9447146,'lat': -6.338565200000001,
 'speed': 25}
Wat we willen versturen (één string)
"939ed1d1-1740-420c-8906-445278573c7f 4:25:06.000 
4FTEX4944AK844294 106.9447146 -6.338565200000001 25"
Streaming data met AWS Kinesis en Lambda

Een record versturen

payload = " ".join(
    str(value) for value in record.values()
)
print(payload)
"939ed1d1-1740-420c-8906-445278573c7f 4:25:06.000 
4FTEX4944AK844294 106.9447146 -6.338565200000001 25"
Streaming data met AWS Kinesis en Lambda

Alles samenvoegen

record = {
 'record_id': '939ed1d1-1740-420c-8906-445278573c7f',
 'timestamp': '4:25:06.000','vin': '4FTEX4944AK844294',
 'lon': 106.9447146,'lat': -6.338565200000001, 'speed': 25}

payload = " ".join( str(value) for value in record.values() )
#"939ed1d1-1740-420c-8906-445278573c7f 4:25:06.000 4FTEX4944AK844294 106.9447146 -6.338565200000001 25"
Streaming data met AWS Kinesis en Lambda

Alles samenvoegen

res = firehose.put_record(
    DeliveryStreamName='gps-delivery-stream',
    Record = {
        'Data': payload + "\n" #<-- Regelafbreking!
    }
)
Streaming data met AWS Kinesis en Lambda

Bestanden gemaakt

McYNJ.png

Streaming data met AWS Kinesis en Lambda

Voorbeeldgegevens

939ed1d1-1740-420c-8906-445278573c7f 4:25:06.000 4FTEX4944AK844294 106.9447146 -6.338565200000001 25
f29a5b3d-d0fa-43c0-9e1a-e2a5cdb8be7a 8:10:47.000 3FTEX1G5XAK844393 108.58068100000001 34.79925 37
ff8e7131-408d-463b-8d07-d016419b0656 20:26:44.000 2LAXX1C8XAK844292 114.39239199999999 36.097577 90
bc75da5f-1bf6-444c-80ad-49c180e1b8de 23:16:06.000 3FTEX1G5XAK844393 -76.6990172 2.481207 40
7bdcf779-444e-4313-83da-140461933aeb 22:28:44.000 5FTEX1MAXAK844295 -47.0145295 -21.4649238 40
Streaming data met AWS Kinesis en Lambda

Bestanden gemaakt

X0px9.png

Streaming data met AWS Kinesis en Lambda

S3-client maken

# Create boto3 S3 client.
s3 = boto3.client('s3', 
                  aws_access_key_id=AWS_KEY_ID, 
                  aws_secret_access_key=AWS_SECRET, 
                  region_name='us-east-1')
Streaming data met AWS Kinesis en Lambda

Data in DataFrame lezen

# Get the object from S3
obj_data = s3.get_object(Bucket='sd-vehicle-data', Key=KEY_YOU_COPIED)
# Read read the object into a DataFrame
vehicle_data = pd.read_csv(
    data['Body'], 
    delimiter = " ", 
    names=["record_id", "timestamp", "vin", "lon", "lat", "speed"]))
Streaming data met AWS Kinesis en Lambda

vehicle_data

record_id timestamp vin lon lat speed
0 939ed1d1... 4:25:06.000 4FTEX4944AK844294 106.945 -6.33857 25
1 f29a5b3d... 8:10:47.000 3FTEX1G5XAK844393 108.581 34.7993 37
2 ff8e7131... 20:26:44.000 2LAXX1C8XAK844292 114.392 36.0976 90
3 bc75da5f... 23:16:06.000 3FTEX1G5XAK844393 -76.699 2.48121 40
4 7bdcf779... 22:28:44.000 5FTEX1MAXAK844295 -47.0145 -21.4649 40
Streaming data met AWS Kinesis en Lambda

Herhaling

qUq0E.png

Streaming data met AWS Kinesis en Lambda

Herhaling

res = firehose.create_delivery_stream(

DeliveryStreamName = "gps-delivery-stream",
DeliveryStreamType = "DirectPut",
S3DestinationConfiguration = {
"RoleARN": "arn:aws:iam::0000000:role/firehoseDeliveryRole",
"BucketARN": "arn:aws:s3:::sd-vehicle-data",
}
)
Streaming data met AWS Kinesis en Lambda

Herhaling

wCJz8.png

Streaming data met AWS Kinesis en Lambda

Herhaling

Streaming data met AWS Kinesis en Lambda

Herhaling

record_id timestamp vin lon lat speed
0 939ed1d1... 4:25:06.000 4FTEX4944AK844294 106.945 -6.33857 25
1 f29a5b3d... 8:10:47.000 3FTEX1G5XAK844393 108.581 34.7993 37
2 ff8e7131... 20:26:44.000 2LAXX1C8XAK844292 114.392 36.0976 90
3 bc75da5f... 23:16:06.000 3FTEX1G5XAK844393 -76.699 2.48121 40
4 7bdcf779... 22:28:44.000 5FTEX1MAXAK844295 -47.0145 -21.4649 40
Streaming data met AWS Kinesis en Lambda

Laten we oefenen!

Streaming data met AWS Kinesis en Lambda

Preparing Video For Download...