====== 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 |}}