Arbeta med Firehose-leveransströmmen

Strömdata med AWS Kinesis och Lambda

Maksim Pecherskiy

Data Engineer

Redo att skapa ström

KF414O.png

Strömdata med AWS Kinesis och Lambda

Redo att skapa ström

YgVbe.png

Strömdata med AWS Kinesis och Lambda

Redo att skapa ström

BBYB4.png

Strömdata med AWS Kinesis och Lambda

Redo att skapa ström

Ue73e.png

Strömdata med AWS Kinesis och Lambda

Redo att skapa ström

qUq0E.png

Strömdata med AWS Kinesis och Lambda

Hämta Roll-ARN

qH99c.png

Strömdata med AWS Kinesis och Lambda

Initiera boto3-klienten

import boto3

firehose = boto3.client('firehose', 
                        aws_access_key_id=AWS_KEY_ID, 
                        aws_secret_access_key=AWS_SECRET, 
                        region_name='us-east-1')
Strömdata med AWS Kinesis och Lambda

Skapa strömmen!

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"
}
)
Strömdata med AWS Kinesis och Lambda

Svar vid skapande av ström

print(res['DeliveryStreamARN'])
# New Stream's ARN
"arn:aws:firehose:us-east-1:0000000:deliverystream/gps-delivery-stream"
Strömdata med AWS Kinesis och Lambda

Strömmen är redo

z0Fp4.png

Strömdata med AWS Kinesis och Lambda

Skriva till strömmen

La0zZ.png

Strömdata med AWS Kinesis och Lambda

Telematikutrustning

OGHUHC.png

Strömdata med AWS Kinesis och Lambda

Sändning av telematikdata

wCJz8.png

Strömdata med AWS Kinesis och Lambda

Enskild post

{

'record_id': '939ed1d1-1740-420c-8906-445278573c7f', # <-- Unique record id
'timestamp': '4:25:06.000', # <-- time of measurement
'vin': '4FTEX4944AK844294', # <-- vehicle id
'lon': 106.9447146, # <-- vehicle location longitude
'lat': -6.3385652, # <-- vehicle location latitude
'speed': 25 # <-- vehicle speed
}
Strömdata med AWS Kinesis och Lambda

Poster strömmar in

vRg6A.png

Strömdata med AWS Kinesis och Lambda

Ett annat användningsfall

gu6oT.png

Strömdata med AWS Kinesis och Lambda

Ett annat användningsfall

XFD7E.png

Strömdata med AWS Kinesis och Lambda

Mönster

h7hUU.png

Strömdata med AWS Kinesis och Lambda

Skicka en post

res = firehose.put_record(

DeliveryStreamName='gps-delivery-stream',
Record = { 'Data': payload }
)
Strömdata med AWS Kinesis och Lambda

Skicka en post

    Record = {
        'Data': payload 
    }
Strömdata med AWS Kinesis och Lambda

Skicka en post

Hur vår post ser ut
record = {
 'record_id': '939ed1d1-1740-420c-8906-445278573c7f',
 'timestamp': '4:25:06.000','vin': '4FTEX4944AK844294',
 'lon': 106.9447146,'lat': -6.338565200000001,
 'speed': 25}
Vad vi vill skicka (en sträng)
"939ed1d1-1740-420c-8906-445278573c7f 4:25:06.000 
4FTEX4944AK844294 106.9447146 -6.338565200000001 25"
Strömdata med AWS Kinesis och Lambda

Skicka en post

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"
Strömdata med AWS Kinesis och Lambda

Sätt ihop det

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"
Strömdata med AWS Kinesis och Lambda

Sätt ihop det

res = firehose.put_record(
    DeliveryStreamName='gps-delivery-stream',
    Record = {
        'Data': payload + "\n" #<-- Line break!
    }
)
Strömdata med AWS Kinesis och Lambda

Skapade filer

McYNJ.png

Strömdata med AWS Kinesis och Lambda

Exempeldata

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
Strömdata med AWS Kinesis och Lambda

Skapade filer

X0px9.png

Strömdata med AWS Kinesis och Lambda

Skapa S3-klient

# 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')
Strömdata med AWS Kinesis och Lambda

Läs data till en DataFrame

# 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"]))
Strömdata med AWS Kinesis och 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
Strömdata med AWS Kinesis och Lambda

Repetition

qUq0E.png

Strömdata med AWS Kinesis och Lambda

Repetition

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",
}
)
Strömdata med AWS Kinesis och Lambda

Repetition

wCJz8.png

Strömdata med AWS Kinesis och Lambda

Repetition

Strömdata med AWS Kinesis och Lambda

Repetition

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
Strömdata med AWS Kinesis och Lambda

Nu kör vi en övning!

Strömdata med AWS Kinesis och Lambda

Preparing Video For Download...