서버리스 API

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

Maksim Pecherskiy

Data Engineer

지난 수업

RGv3B.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

데이터 액세스 제공

htdz9.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

간단한 API

XTKzt.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

간단한 API

RFhY5.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

간단한 API

SuISK.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

트리거 추가

jSRoQ.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

새 API 테스트

JtGop.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

첫 번째 API

r2u54G.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

API 매개변수

요청 예시
https://.../speederReporterApi?date=20200620
이벤트 예시
{
  "queryStringParameters": {
    "date": "20200620"
  },
  "isBase64Encoded": false
}
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

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")
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

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=" ")
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

데이터로 응답하기

def lambda_handler(event, context):
    ...
    return {
        'statusCode': 200,
        'headers': {
            "content-type" : "application/json"
        },
        'body': df.to_json()
    }
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

실시간 응답

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

  ...
]
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

다른 Lambda 트리거

oJAqB.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

다른 Lambda 트리거

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

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

speederAggregator ARN

oB7uh.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

호출하기

def trigger_recalc():
  ...
  lambda_client.invoke(
    FunctionName='arn:aws:lambda:us-east-1:458913182630:function:speederAggregator',
    InvocationType='Event', # (or RequestResponse)
  )
AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

리뷰

f44P0.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

리뷰

Oi7du.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

리뷰

8yfg4.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

리뷰

BTM2Q.png

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

연습해 봅시다!

AWS Kinesis와 Lambda로 배우는 스트리밍 데이터

Preparing Video For Download...