Lambda langsung pertama Anda!

Streaming Data dengan AWS Kinesis dan Lambda

Maksim Pecherskiy

Data Engineer

Pelajaran sebelumnya

StkGt.png

Streaming Data dengan AWS Kinesis dan Lambda

Pelajaran ini

Zb4Va.png

Streaming Data dengan AWS Kinesis dan Lambda

Format log umum

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 dengan AWS Kinesis dan Lambda

Membaca file S3

import pandas as pd

results in:

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

Memperbarui handler

#lambda_function.py
import json, boto3, pandas as pd
# Inisialisasi klien
...

SPEED_ALERT_THRESHOLD = 45 ALERT_PHONE_NUMBER = "+1234567890"
# Fungsi helper untuk mengambil dataframe dari record yang ditulis def get_new_data(event): pd.read_csv()... ... return data
# Handler Lambda def record_created_handler(event, context): data = get_new_data(event) ... sns.publish() ...
Streaming Data dengan AWS Kinesis dan Lambda

get_new_data()

def get_new_data(event):
    # Buat daftar untuk menyimpan key objek baru.
    written_objects = []

    # Iterasi setiap record event S3.
    for record in event['Records']:

        # Ambil variabel untuk diperiksa
        event_name = record['eventName']
        bucket_name = record['s3']['bucket']['name']
        obj_key = record['s3']['object']['key']
Streaming Data dengan AWS Kinesis dan Lambda

get_new_data()

def get_new_data(event):
        ...
        # Verifikasi event dibuat dari bucket sd-vehicle-data.
        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)
# Gabungkan record baru menjadi satu dataframe. return pd.concat(written_objects)
Streaming Data dengan AWS Kinesis dan Lambda

record_created_handler()

SPEED_ALERT_THRESHOLD = 45
ALERT_PHONE_NUMBER = "+1234567890"
...
def record_created_handler(event, context):
    # Panggil helper
    data = get_new_data(event)

## Kecepatan tertinggi top_speeds = data.groupby(['vin'])['speed'].max().reset_index()
## Kecepatan yang melebihi 45 too_fast = top_speeds.loc[top_speeds.speed > SPEED_ALERT_THRESHOLD, :]
Streaming Data dengan AWS Kinesis dan Lambda

record_created_handler()

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

def record_created_handler(event, context):
    ...
    ## Kirim SMS
    sns.publish(PhoneNumber=ALERT_PHONE_NUMBER,
        Message="Peringatan Ngebut \n" + too_fast.to_string())

## Belum digunakan, tapi perlu mengembalikan sesuatu. totals = data.groupby(['vin'])['speed'].max().reset_index() return totals.to_csv(sep=" ", index=False)
Streaming Data dengan AWS Kinesis dan Lambda

Uji fungsi Lambda

jBpMo.png

KodWB.png

Streaming Data dengan AWS Kinesis dan Lambda

Menambahkan variabel lingkungan

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 dengan AWS Kinesis dan Lambda

Menambahkan variabel lingkungan

7jD6x.png

Streaming Data dengan AWS Kinesis dan Lambda

Menambahkan variabel lingkungan

eDRTX.png

Streaming Data dengan AWS Kinesis dan Lambda

yKjWC.png

Streaming Data dengan AWS Kinesis dan Lambda

Menambahkan pemicu

gLmbZD.png

Streaming Data dengan AWS Kinesis dan Lambda

Menambahkan pemicu

7F08p.png

Streaming Data dengan AWS Kinesis dan Lambda

Menambahkan pemicu

bPUtX.png

Streaming Data dengan AWS Kinesis dan Lambda

Ulasan

ZAbfT.png

Streaming Data dengan AWS Kinesis dan Lambda

Ulasan

m9jlv.png

Streaming Data dengan AWS Kinesis dan Lambda

Ulasan

GTlyD.png

Streaming Data dengan AWS Kinesis dan Lambda

Ulasan

XddOW.png

Streaming Data dengan AWS Kinesis dan Lambda

Ayo berlatih!

Streaming Data dengan AWS Kinesis dan Lambda

Preparing Video For Download...