Skip to content

Instantly share code, notes, and snippets.

@ghsatpute
Created November 22, 2018 12:03
Show Gist options
  • Save ghsatpute/610e3c7e81cf1bdda8dd79c61e88b133 to your computer and use it in GitHub Desktop.
Save ghsatpute/610e3c7e81cf1bdda8dd79c61e88b133 to your computer and use it in GitHub Desktop.
Get AWS billing by CloudFormation stack
import com.amazonaws.regions.Regions;
import com.amazonaws.services.costexplorer.AWSCostExplorer;
import com.amazonaws.services.costexplorer.AWSCostExplorerClientBuilder;
import com.amazonaws.services.costexplorer.model.DateInterval;
import com.amazonaws.services.costexplorer.model.GetCostAndUsageRequest;
import com.amazonaws.services.costexplorer.model.GetCostAndUsageResult;
import com.amazonaws.services.costexplorer.model.Group;
import com.amazonaws.services.costexplorer.model.GroupDefinition;
import com.amazonaws.services.costexplorer.model.GroupDefinitionType;
import com.amazonaws.services.costexplorer.model.MetricValue;
import com.amazonaws.services.costexplorer.model.ResultByTime;
import java.util.Map;
/*
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.453</version>
</dependency>
*/
/*
* Created by Ganesh Satpute on 21/11/18 5:33 PM.`
*/
public class AwsBillingUtils {
public static void main(String[] args) {
AWSCostExplorer awsCostExplorer = AWSCostExplorerClientBuilder.standard()
.withRegion(Regions.US_WEST_2)
.build();
GroupDefinition groupDefinition = new GroupDefinition().withType(GroupDefinitionType.TAG).withKey("aws:cloudformation:stack-name");
GetCostAndUsageRequest costAndUsageRequest
= new GetCostAndUsageRequest()
.withTimePeriod(new DateInterval().withStart("2018-11-01").withEnd("2018-11-30"))
.withGroupBy(groupDefinition)
.withGranularity("MONTHLY")
.withMetrics("BlendedCost");
GetCostAndUsageResult costAndUsage = awsCostExplorer.getCostAndUsage(costAndUsageRequest);
for(ResultByTime resultByTime: costAndUsage.getResultsByTime()) {
for(Group group: resultByTime.getGroups()) {
String stack = "aws:cloudformation:stack-name$stack-name";
if (group.getKeys().contains(stack)) {
Map<String, MetricValue> metrics = group.getMetrics();
System.out.println("Cost for stack " + stack + " is : " + metrics.get("BlendedCost"));
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment