Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vvalorous/c0a9f10d6ac68a2ff64a0aef4f29d494 to your computer and use it in GitHub Desktop.
Save vvalorous/c0a9f10d6ac68a2ff64a0aef4f29d494 to your computer and use it in GitHub Desktop.
Data of CloudWatch (CPUUtilization of EC2) is put in DynamoDB. Please running in AWS Lambda every hour 10 minutes.
from __future__ import print_function
import boto3
import pytz
from datetime import datetime
from dateutil.relativedelta import relativedelta
print('Loading function')
def lambda_handler(event, context):
try:
tokyo = pytz.timezone('Asia/Tokyo')
table_name = 'ec2_cpuutilization'
sts = boto3.client('sts')
result = sts.assume_role(
RoleArn = 'arn:aws:iam::XXXXXXXXXXXX:role/DevReadOnlyRole',
RoleSessionName = 'kokeshi',
)
credentials = result['Credentials']
session = boto3.Session(
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken'],
)
filters = [
{
'Name': 'tag:ec2_name',
'Values': [
'www01',
],
},
]
ec2 = session.client('ec2')
instance = ec2.describe_instances(
Filters = filters,
)
instance_id = instance['Reservations'][0]['Instances'][0]['InstanceId']
an_hour_ago = datetime.now(tokyo) - relativedelta(hours = 1)
eighty_minutes_ago = datetime.now(tokyo) - relativedelta(minutes = 80)
now = datetime.now(tokyo)
cloudwatch_client = session.client('cloudwatch')
result = cloudwatch_client.get_metric_statistics(
Namespace = 'AWS/EC2',
MetricName = 'CPUUtilization',
Dimensions = [
{
'Name': 'InstanceId',
'Value': instance_id,
},
],
StartTime = eighty_minutes_ago,
EndTime = now,
Period = 60,
Statistics = [
'Maximum',
],
Unit = 'Percent',
)
day = an_hour_ago.strftime('%Y/%m/%d')
hour = an_hour_ago.strftime('%H')
save_data = {}
for i in range(60):
minute = '%02d' % (i)
time = hour + ':' + minute + ':00'
save_data[time] = 0
datapoints = result['Datapoints']
for datapoint in datapoints:
tmp_timestamp = datapoint['Timestamp'] + relativedelta(hours = 9)
tmp_date = tmp_timestamp.strftime('%H:%M:%S')
tmp_hour = tmp_timestamp.strftime('%H')
if hour == tmp_hour:
save_data[tmp_date] = datapoint['Maximum']
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(table_name)
for key, value in save_data.items():
result = table.put_item(
Item = {
'day' : str(day),
'time' : str(key),
'percent' : str(value),
},
)
except Exception as e:
print(e)
print('NG')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment