5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[AWS]boto3でEC2のインスタンス料金を取得する

Last updated at Posted at 2018-05-16

python boto3でec2の料金を取得する

インスタンスの料金を自動で取れたら便利だなーと思っていたら、
料金取得APIがあるようなので叩いてみました。

コード

pricingクライアント生成と、APIを実行しレスポンス取得

api実行.py
import boto3

# pricingを指定
pricing = boto3.client("pricing",
                          aws_access_key_id='access_key',
                          aws_secret_access_key='secret_key',
                          region_name='us-east-1')

response = pricing.get_products(
            ServiceCode='AmazonEC2',
            # フィルタ条件。
            Filters=[
              {
                'Type': 'TERM_MATCH',
                'Field': 'instanceType',
                'Value': 't2.micro'
              },
              {
                  'Type': 'TERM_MATCH',
                  'Field': 'termType',
                  'Value': 'OnDemand'
              },
              {
                  'Type': 'TERM_MATCH',
                  'Field': 'location',
                  'Value': 'Asia Pacific (Tokyo)'
              },
              {
                  'Type': 'TERM_MATCH',
                  'Field': 'operatingSystem',
                  'Value': 'Linux'
              }
            ]
        )

※注意事項

  • 東京リージョンには存在しないAPIなのでregion_nameの指定には注意
  • フィルタ条件を指定しないと全料金が返却されるので量がとんでもないです。

私の場合は、インスタンスサイズの料金が1件のみ返却されるようにフィルタ条件を調整しています。
フィルタ条件の属性等については、参考のリンク先を参照してください。

以下、レスポンスから1時間当たりの値段を取得するコード。

responseから料金取得.py
import json

response = json.loads(response['PriceList'][0])

# 1時間当たりの料金を取得する
hour_fee = 0
for v in response['terms']['OnDemand'].values():
  for v2 in v['priceDimensions'].values():
    hour_fee = float(v2['pricePerUnit']['USD'])

print('1時間あたりの料金:', hour_fee)

取得できるオンデマンドのインスタンス料金は時間単位です。

その他

response['terms']['OnDemand']OnDemandReservedにするとリザーブドインスタンスの料金も取得できます。

稼働中のインスタンス取得のAPIと組み合わせると稼働中のインスタンスの料金を計算できるようになります。

また、同様の方法で他サービスの料金も取得できます。

参考

AWS 料金表 API の更新 – 新しいクエリとメタデータ関数

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?