====== Timestream ====== ===== Example Lambda ===== 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={} ) ===== Schema ===== 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 | ===== Example Query ===== 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 ===== Sample Data ===== {{ :aws:dynamodb-brownbag-accessrequests-sample-data.csv |}}