やっとここまで来た気がする
ここまでの仕組みを合体!
1.事前に取得していたLineAPIキーをパラメータストアに登録する

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

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 使っても出来るかもね。
おわり。
コメント