「boto3」を使ってAWSの料金を表示する

概要

  1. 準備 python,boto3をインストール、Cloudwatchで料金のアラームを作成しておく必要があります。

  2. AWSのcloudwatchに接続する 下記のリンクにPythonでAWSに接続する方法があります。 「boto3」を使い,AWSに接続する方法

  3. 作成したアラームの情報を抜き出す boto3.client.get_metric_statistics() もしくは boto3.client.get_metric_data() を使い、情報を抽出します。 下記で示す例ではboto3.client.get_metric_statistics()を使っています。

4.1日の使用料を抜き出す 抽出したデータからさらに必要な値を抽出し、出力する

今回は、今日1日で使用した額を表示できる様にしました。

#coding:utf-8
import boto3
from boto3.session import Session
import datetime
import dateutil.tz
import re

accesskey = "************************"
secretkey = "************************"
region    = "us-east-1"

#cloudwatchに接続
session = Session(
                  aws_access_key_id=accesskey,
                  aws_secret_access_key=secretkey,
                  region_name=region)

client = session.client('cloudwatch')

#1日の最大値、最小値を抜き出す
get_metric_statistics_max = client.get_metric_statistics(
                        Namespace='AWS/Billing',
                        MetricName='EstimatedCharges',
                        Dimensions=[
                            {
                                'Name': 'Currency',
                                'Value': 'USD'
                            }
                        ],
                        StartTime=datetime.datetime.today() - datetime.timedelta(days=1),
                        EndTime=datetime.datetime.today(),
                        Period=86400,
                        Statistics=['Maximum']
                        )

get_metric_statistics_min = client.get_metric_statistics(
                        Namespace='AWS/Billing',
                        MetricName='EstimatedCharges',
                        Dimensions=[
                            {
                                'Name': 'Currency',
                                'Value': 'USD'
                            }
                        ],
                        StartTime=datetime.datetime.today() - datetime.timedelta(days=1),
                        EndTime=datetime.datetime.today(),
                        Period=86400,
                        Statistics=['Minimum']
                        )
#get_metric_stastics_*から最大最小を抜き出し、1日の料金を表示する
max = re.findall('[0-9]{2}.[0-9]{1}',str(get_metric_statistics_max))
min = re.findall('[0-9]{2}.[0-9]{1}',str(get_metric_statistics_min))
answer = float(max[1]) -float(min[1])
print(str(answer)+"$")