Automating AWS Billing Reports and Email Notifications with Shell Scripting

Automating AWS Billing Reports and Email Notifications with Shell Scripting

1. Introduction: This documentation outlines the process of automating the retrieval of AWS billing details and sending daily email reports to a manager using a shell script. The script utilizes AWS CLI for querying billing data, jq for JSON parsing, and crontab for scheduling the script to run daily.

2. Requirements: Ensure the following requirements are met:

  • AWS CLI is installed and configured with necessary permissions.

  • jq JSON processor is installed on the system.

  • AWS SES is set up and verified to send emails from.

  • crontab is available on your system.

3. Installation ofjq:

# Update package index
sudo apt-get update

# Install jq
sudo apt-get install jq

For other Linux distributions or macOS, you can use their respective package managers to install jq.

4. Script Overview and Configuration:

The provided shell script retrieves AWS billing details for the current day and formats them into an email report. Below is an overview of the script's functionality:

  • Retrieves the current date and the next day's date.

  • Queries AWS Cost Explorer API to fetch cost and usage data for the current day.

  • Parses the JSON output to extract the total unblended cost.

  • Formats the billing report including the date and the total cost.

  • Sends the report via email using AWS SES.

#!/bin/bash

CURRENT_DATE=$(date +"%Y-%m-%d")
NEXT_DATE=$(date -d "${CURRENT_DATE} + 1 day" +"%Y-%m-%d")

#API to get the Unblended Cost from the aws account
COST=$(aws ce get-cost-and-usage \
  --time-period Start=${CURRENT_DATE},End=${NEXT_DATE} \
  --granularity DAILY \
  --metrics "UnblendedCost")

#Printing the aws cost
echo -e "printing cost $COST"

#Retriving the Cost value from the Total Cost Json
ACTUAL_AWS_COST=$(echo "$COST" | jq '.ResultsByTime[0].Total.UnblendedCost.Amount')

#Printing the Actual Cost
echo -e "Printing Actual cost $ACTUAL_AWS_COST"

#Formating the Data for Sending to the email body
OUTPUT="AWS Daily Billing Report\n\nDate: $CURRENT_DATE\nEstimated Cost: $ACTUAL_AWS_COST USD"

#Printing the Output
echo -e "$OUTPUT"

# Send email using AWS SES
aws ses send-email \
  --from "youremail@gmail.com" \
  --to "youremail@gmail.com" \
  --subject "AWS Daily Billing Report" \
  --text "$OUTPUT"

5. Execution:

  • Save the script to a file (e.g., aws_billing_report.sh).

  • Make the script executable: chmod 744 aws_billing_report.sh.

6. Configuringcrontab: To schedule the script to run automatically every day at 5 PM, follow these steps:

  • Open your terminal and type:
crontab -e

Add the following line to the crontab file:

0 17 * * * /path/to/aws_billing_report.sh

This cron job runs the script /path/to/aws_billing_report.sh every day at 5 PM. Adjust the path to your script accordingly.

6. OutPut: Output when i run script manually

7. Email: Email

8. Conclusion: By following this documentation, you can automate the process of retrieving AWS billing details and sending daily reports via email. This script enhances efficiency and facilitates better monitoring of AWS costs.