agent: |
fnVe3YhjJYlysqrihdF1AWS RDS Cost Analysis based on Instance Type
AWS RDS Cost Analysis based on Instance Type
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This task involves comparing daily cost of all RDS Instances in an AWS Account, helping organizations choose the most economical options for their database needs while optimizing their AWS budget
inputs
outputs
import pandas as pd
from datetime import datetime, timedelta, timezone
# Assuming df is your DataFrame and last_n_days is defined
# Example: last_n_days = 30
if df is not None:
#print("DataFrame Columns:", list(df.columns))
# Convert 'lineItem/UsageStartDate' to datetime and ensure it's in UTC
df['lineItem/UsageStartDate'] = pd.to_datetime(df['lineItem/UsageStartDate'], utc=True)
# Filter out negative costs
df = df[df['lineItem/UnblendedCost'] >= 0]
# Adjust the cutoff date to the start of the day in UTC
cutoff_date = (datetime.utcnow() - timedelta(days=last_n_days)).replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=timezone.utc)
rds_df = df[(df['lineItem/UsageStartDate'] > cutoff_date) &
(df['product/ProductName'] == 'Amazon Relational Database Service') &
(df['product/instanceType'].notna())]
'''# First full day after cutoff
first_full_day_after_cutoff = cutoff_date + timedelta(days=1)
rds_df = rds_df[rds_df['lineItem/UsageStartDate'] >= first_full_day_after_cutoff]'''
if not rds_df.empty:
# Group by 'lineItem/UsageStartDate' and 'product/instanceType' for RDS
rds_result = rds_df.groupby([rds_df['lineItem/UsageStartDate'].dt.date, 'product/instanceType']).agg(
usage_hours=('lineItem/UsageAmount', 'sum'),
usage_cost=('lineItem/UnblendedCost', 'sum')
).reset_index()
#print("Number of rows in result DataFrame:", len(rds_result))
# Plotting the RDS cost data
context.plot.xlabel = 'Date'
context.plot.ylabel = 'RDS Usage Cost($)'
context.plot.title = f'RDS Cost Usage (Last {last_n_days} Days)'
for instance_type in rds_result['product/instanceType'].unique():
instance_data = rds_result[rds_result['product/instanceType'] == instance_type]
x = instance_data['lineItem/UsageStartDate'].tolist()
y = instance_data['usage_cost'].tolist()
#print(f"Instance Type: {instance_type}")
#print(f"Sample Dates (x): {x[:5]}")
#print(f"Sample Costs (y): {y[:5]}")
context.plot.add_trace(name=f"RDS- {instance_type}", xpts=x, ypts=y, tracetype="line")
else:
print("No data available for RDS in the specified time frame.")
else:
print("DataFrame is empty. Exiting.")
#context.proceed=False
copied