[Python]請求金額をLineに通知しよう

Lambda

やっとここまで来た気がする

ここまでの仕組みを合体!

1.事前に取得していたLineAPIキーをパラメータストアに登録する

当然、キーは隠しますよ?

2.新規に作成したlambda関数に、レイヤーセットして・・・

Pandasさんがないと、Requestが使えないから注意!!

3.もちろんIAMの修正しますよ?

新規にlambda関数作成したときにできたロールに[CloudWatch][SSM]が触れるポリシーを
付与します ※ポリシー詳細は前回までの記事参照のこと

4.pythonにて実装する

import json
import boto3
import datetime
import requests

def lambda_handler(event, context):
    # 各種値取得
    strLINEAPIKEY = Get_Parameter()
    strDailyBilling = Get_Billing()     
    # メッセージ送信
    Send_Line(strLINEAPIKEY,strDailyBilling)
    
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }
    
# パラメータストアからAPIキー取得
def Get_Parameter():
    client = boto3.client('ssm', region_name='ap-northeast-1')
    response = client.get_parameter(
        Name="LINENOTIFYKEY",
        WithDecryption=False
    )
    return (str(response['Parameter']['Value']))

# CloudWatchから料金取得
def Get_Billing():
    client = boto3.client('cloudwatch', region_name='us-east-1')
    response = client.get_metric_statistics(
        Namespace='AWS/Billing',
        MetricName='EstimatedCharges',
        Dimensions=[
            {
                'Name':'Currency',
                'Value': 'USD'
            },
        ],
        Period=86400,
        StartTime = datetime.datetime.now() - datetime.timedelta(days=1) ,
        EndTime = datetime.datetime.now(),
        Statistics=['Maximum']
    )
    today = datetime.datetime.now()
    str_today = (today.strftime('%Y/%m/%d'))
    return (str_today + " AWS Billing :  $" + str(response['Datapoints'][0]['Maximum']))

# LineNotifyでメッセージ送信
def Send_Line(strLINEAPIKEY,strDailyBilling):
    headerparam = {"Authorization" : "Bearer "+ strLINEAPIKEY} 
    messagesparam = {"message": strDailyBilling }
    requests.post("https://notify-api.line.me/api/notify",headers=headerparam,params=messagesparam)

関数化してみたりしたけど、もっとスマートに書けそう。ひよこーど🐤だわー。

5.実行してみると・・・。

来たよ来たよ!ちゃんと来た!
・・・ん?(。´・ω・) お金かかってるナ・・・?

まとめ

やってみると、仕組みはそんなに難しくないのかもしれないと思いつつも
PGをしばらくやってないので、勘は鈍いしセンスも皆無・・・。
今回はLineを使ったけど、slackでもAWS SNS 使っても出来るかもね。

おわり。


コメント

タイトルとURLをコピーしました