さくらのクラウドを利用していますか。
弊社ではさくらのクラウドを利用して構築したサーバーの運用・保守を行っています。
日々の運用の中で、月ごとの利用料金を自動的に取得・集計したいというニーズは少なくありません。
そこで今回は、さくらのクラウドのAPIを活用して、利用料を月単位で取得・出力するPythonスクリプトを作成しました。
このスクリプトを活用すれば、各アカウントごとの月次料金の自動集計などにも応用できる可能性がありますね。
【前提条件】
さくらのクラウド アカウント(APIキー/シークレットを取得済み)
Python 3.7 以上
requests, tabulate,csv ライブラリがインストールされていること
スクリプト
CSV形式で月ごとの利用料を取得する場合
※API_TOKENやAPI_SECRETは差し替えてください。
import requests
import csv
API_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
API_SECRET = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY'
SAKURA_API_AUTH_STATUS = "https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/auth-status"
SAKURA_API_BILL_CONTRACT = "https://secure.sakura.ad.jp/cloud/zone/tk1a/api/system/1.0/bill/by-contract"
# 1. accountid取得
res = requests.get(SAKURA_API_AUTH_STATUS, auth=(API_TOKEN, API_SECRET))
accountid = res.json().get('Account', {}).get('ID')
if not accountid:
print('accountidが取得できませんでした')
exit(1)
# 2. 請求情報取得
res2 = requests.get(f'{SAKURA_API_BILL_CONTRACT}/{accountid}', auth=(API_TOKEN, API_SECRET))
bills = res2.json().get('Bills', [])
# 3. CSV形式で出力
headers = ['請求ID', '開始日', '終了日', '金額', '消費税', '支払状況', '支払期限']
table = []
for bill in bills:
table.append([
bill.get('BillID'),
bill.get('BillPeriodStartAt', '')[:10],
bill.get('BillPeriodEndAt', '')[:10],
bill.get('Amount'),
bill.get('InvoiceSummary')[0]['Tax'] if bill.get('InvoiceSummary') else '',
'済' if bill.get('Paid') else '未',
bill.get('PayLimit', '')[:10]
])
with open('sakura_bills.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(headers)
writer.writerows(table)
print('✅ sakura_bills.csv に出力しました')
表形式で月ごとの利用料を取得する場合
※API_TOKENやAPI_SECRETは差し替えてください。
import requests
import json
from tabulate import tabulate
API_TOKEN = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
API_SECRET = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYY'
SAKURA_API_AUTH_STATUS = "https://secure.sakura.ad.jp/cloud/zone/tk1a/api/cloud/1.1/auth-status"
SAKURA_API_BILL_CONTRACT = "https://secure.sakura.ad.jp/cloud/zone/tk1a/api/system/1.0/bill/by-contract"
# 1. accountid取得
res = requests.get(SAKURA_API_AUTH_STATUS, auth=(API_TOKEN, API_SECRET))
accountid = res.json().get('Account', {}).get('ID')
if not accountid:
print('accountidが取得できませんでした')
exit(1)
# 2. 請求情報取得
res2 = requests.get(f'{SAKURA_API_BILL_CONTRACT}/{accountid}', auth=(API_TOKEN, API_SECRET))
bills = res2.json().get('Bills', [])
# 3. 表形式で整形表示
table = []
for bill in bills:
table.append([
bill.get('BillID'),
bill.get('BillPeriodStartAt', '')[:10],
bill.get('BillPeriodEndAt', '')[:10],
bill.get('Amount'),
bill.get('InvoiceSummary')[0]['Tax'] if bill.get('InvoiceSummary') else '',
'済' if bill.get('Paid') else '未',
bill.get('PayLimit', '')[:10]
])
headers = ['請求ID', '開始日', '終了日', '金額', '消費税', '支払状況', '支払期限']
print(tabulate(table, headers, tablefmt='github', numalign='right', stralign='center'))
【参考サイト】
https://manual.sakura.ad.jp/cloud/api/billapi.html
https://manual.sakura.ad.jp/cloud-api/1.1/bill/index.html
終わりに
さくらのクラウドでは、公式マニュアルに豊富なAPI一覧が掲載されており、今回のような利用料金の取得だけでなく、
サーバーの構築やディスク作成、ネットワーク設定など、さまざまな操作をAPI経由で自動化することが可能です。
今回は利用料取得に焦点を当てましたが、サーバーやディスクのプロビジョニングも実行できます。
手作業での運用から一歩進んで、よりスマートで再現性の高いインフラ管理を実現するために、
APIの活用は今後ますます重要になってきますね。