API không máy chủ

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Maksim Pecherskiy

Data Engineer

Bài trước

RGv3B.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Cấp quyền truy cập dữ liệu

htdz9.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

API đơn giản

XTKzt.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

API đơn giản

RFhY5.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

API đơn giản

SuISK.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Thêm trigger

jSRoQ.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Kiểm thử API mới

JtGop.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

API đầu tiên của chúng ta

r2u54G.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Tham số API

Yêu cầu mẫu
https://.../speederReporterApi?date=20200620
Sự kiện mẫu
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Trình xử lý 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")
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Trình xử lý 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=" ")
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Phản hồi với dữ liệu

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Phản hồi trực tiếp

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",
      ...
  },

  ...
]
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Kích hoạt Lambda khác

oJAqB.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Kích hoạt Lambda khác

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):
  ...

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

ARN của speederAggregator

oB7uh.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Gọi hàm (invoke)

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Ôn tập

f44P0.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Ôn tập

Oi7du.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Ôn tập

8yfg4.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Ôn tập

BTM2Q.png

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Hãy thực hành!

Xử lý dữ liệu streaming với AWS Kinesis và Lambda

Preparing Video For Download...