AWS Timestream is a specialised database optimised to record a stream of time based events such as logging IOT events.
import json import boto3 import time from datetime import datetime ''' # Sample Event data { "awsAccountId": "12348765", "actionType": "NewRequest", "status": "Approved" } ''' def get_current_time_year_month(): yearmonth = datetime.now().strftime('%Y-%m') daytime = datetime.now().strftime('%d-%H:%M:%S') return yearmonth, daytime def get_current_time(): return str(int(round(time.time() * 1000))) # this produces an invalid time error from timestream #return datetime.now().strftime('%Y-%m-%d_%H:%M:%S') def lambda_handler(event, context): print("event is", event) DATABASE_NAME='BrownBag-AccessRequests' TABLE_NAME='Requests' client = boto3.client('timestream-write') region_name='eu-west-1' ts_database = DATABASE_NAME #response = client.list_databases() #print("List database:-", response) dimensions = [ {'Name': 'actionType', 'Value': event['actionType']}, {'Name': 'status', 'Value': event['status']}, {'Name': 'account', 'Value': event['awsAccountId']} ] measure1 = { 'Dimensions': dimensions, 'MeasureName': 'Status', 'MeasureValue': event['status'], 'MeasureValueType': 'VARCHAR', 'Time': get_current_time() } records = [measure1] response = client.write_records(DatabaseName=DATABASE_NAME, TableName=TABLE_NAME, Records=records, CommonAttributes={} )
DESCRIBE "BrownBag-AccessRequests"."Requests"
| Column | Type | Timestream attribute type | 
|---|---|---|
| actionType | varchar | DIMENSION | 
| account | varchar | DIMENSION | 
| status | varchar | DIMENSION | 
| measure_name | varchar | MEASURE_NAME | 
| time | timestamp | TIMESTAMP | 
| measure_value::varchar | varchar | MEASURE_VALUE | 
SHOW DATABASES SELECT * FROM "BrownBag-AccessRequests"."Requests" SELECT * FROM "BrownBag-AccessRequests"."Requests" WHERE TIME BETWEEN ago(15m) AND now() ORDER BY TIME DESC LIMIT 10