クラウドあるあるですが、ちょっと参考程度にいじった機能が高額だったり、停止し忘れたりして高額請求を食らうことがあります。

しかも、しばらく気が付かずに、凄い請求金額になってしまった事故を起こすこともあります。

この機能がおいくらになりますよって有効化する前に教えてくれれば良いんですが、設定によっては、無料だったり、高額になったり極端なサービスもあります。

事前に見積りは可能ですが、使ったことがない機能とかは、見積りと設定が具体的にリンクしないので、わかりにくいです。

なので、毎日コストチェックすることが重要なのかなぁ と思います。

しかし、毎日コンソールにログインして、請求金額を見続けるのも面倒です。

ということで、スクリプトを作って、通知するようにしてみました。

これで、ちょっと安心出来ますよ

 

python3で書きました。

python3で、ociライブラリをインストールしてお使い下さい。

oci cliも使えるようにして、コンフィグを作成しておくと、ユーザーのプリンシパルを使います。

 


#!/usr/bin/python3
 
#
# 月費用通知スクリプト
#
 
import sys
import oci
import datetime
import argparse
 
TENANTID="ocid1.tenancy.oc1..aaaaaaaacosd44hogep4t5eehgphogekb56vphoge2vlphjgeukjhf54www"
topicid = "ocid1.onstopic.oc1.ap-osaka-1.amaaaaaajhogehaaw65pzjzc3e9999klroooc6iwzzzzxr3rfcbawkh9876"
topictitle = "OCI 月費用"
nonotify = False
 
today = datetime.date.today()
sdate = datetime.datetime(today.year, today.month, 1,0,0,0)
edate = datetime.datetime(today.year, today.month, today.day, 0, 0, 0)
 
config = oci.config.from_file("~/.oci/config","DEFAULT")
usageapicl:oci.usage_api.UsageapiClient = oci.usage_api.UsageapiClient(config)
notifydatacl = oci.ons.NotificationDataPlaneClient(config)
 
DEBUG=False
 
if DEBUG==False :
    parser = argparse.ArgumentParser(description="using \n \nex)\n costchk.py")
    parser.add_argument('--topicid', help='通知トピックID')
    parser.add_argument('--nonotify', action='store_true', help='通知無効')
    args = parser.parse_args()
    if args.topicid is not None:
        topicid = args.topicid
    if args.nonotify is not None:
        nonotify = args.nonotify
 
#通知
def notifyMessage(msg) :
    notifydatacl.publish_message(topicid,oci.ons.models.MessageDetails(
        title=topictitle,
        body=msg
        ),message_type="RAW_TEXT")
 
#コスト報告
def reportcost() :
    res:oci.response.Response = usageapicl.request_summarized_usages( oci.usage_api.models.RequestSummarizedUsagesDetails(
        tenant_id=TENANTID,
        time_usage_started=sdate,
        time_usage_ended=edate,
        granularity=oci.usage_api.models.RequestSummarizedUsagesDetails.GRANULARITY_MONTHLY,
        query_type=oci.usage_api.models.RequestSummarizedUsagesDetails.QUERY_TYPE_COST
    ))
    result:oci.usage_api.models.UsageAggregation=res.data
 
    for item in result.items:
        amount = item.computed_amount
        currency = item.currency
        if ( amount is not None ) :
            msg = " {0} {1} {2:%Y/%m/%d}-{3:%d} ".format(currency,round(amount,1),sdate,edate)
            print(msg)
            if nonotify == False:
                notifyMessage(msg)
 
reportcost()

TENANTIDは、ご自身のテナンシOCIDに修正して下さい。

topicidは、修正するか、引数で指定しても良いです。

このスクリプトをcronなんかで、毎日実行させれば、費用を通知してくれます。

通知するには、通知サービスを作成してトピックを作っておいて下さいね。

 

Joomla templates by a4joomla