AWS: Obtain BlendedCost billing data

There may be a case when you might want to use Get-CECostAndUsage Cmdlet, however I thought it might be helpful to document some examples. The AWS documentation doesn't display any example. Below is my attempt to come up with some examples, which I found useful for me, may be someone else does too.


Running the Cmdlet without any parameters, doesn’t reveal what we are looking for, so I checked the command reference: None of the parameters appear to be mandatory, still I got this error without any parameters:

"Time period is required"


I guessed period is DateInterval, so went ahead and created it for sample, but hit another parameter required error:

"Granularity can only be MONTHLY or DAILY"

I made sure again I provided Granularity, trying DAILY and hit another parameter 'metric' missing:

"Selected metrics cannot be null"

Valid values for metric are BlendedCost, UnblendedCost, UsageQuantity, NormalizedUsageAmount, AmortizedCost. I tried one of them and hit another error:

Sounds good so far, I had to enable cost explorer access to my user. So now I activated IAM user/role access to billing information to grant my IAM user access to billing info. And here is the result:

I’m sure heading somewhere. After expanding the ResultsByTime object, I could eventually land to a result I was looking for that looked similar to the Cost Management Dashboard on the AWS console

Here is from the AWS web console billing home:


So, here is what I added to a script, so I get to know the cost for current month right away:


Please note, accessing Cost Explorer APIs are chargeable.





 #Print cost details for the Account for current month
$currDate = Get-Date
$firstDay = Get-Date $currDate -Day 1 -Hour 0 -Minute 0 -Second 0
$lastDay = Get-Date $firstDay.AddMonths(1).AddSeconds(-1)
$firstDayFormat = Get-Date $firstDay -Format 'yyyy-MM-dd'
$lastDayFormat = Get-Date $lastDay -Format 'yyyy-MM-dd'

$interval = New-Object Amazon.CostExplorer.Model.DateInterval
$interval.Start = $firstDayFormat
$interval.End = $lastDayFormat

$costUsage = Get-CECostAndUsage -TimePeriod $interval -Granularity MONTHLY -Metric BlendedCost