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