[AWS]boto3でEC2のインスタンス料金を取得する
python boto3でec2の料金を取得する
インスタンスの料金を自動で取れたら便利だなーと思っていたら、
料金取得APIがあるようなので叩いてみました。
コード
pricingクライアント生成と、APIを実行しレスポンス取得
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時間当たりの値段を取得するコード。
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']
のOnDemand
をReserved
にするとリザーブドインスタンスの料金も取得できます。
稼働中のインスタンス取得のAPIと組み合わせると稼働中のインスタンスの料金を計算できるようになります。
また、同様の方法で他サービスの料金も取得できます。
参考
Author And Source
この問題について([AWS]boto3でEC2のインスタンス料金を取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/ysks-y/items/ec871428e3142f6875e7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .