バナーナナブログ

宮城県仙台市より、日々思ったことを綴っていくウェブログです。

AWS料金とEC2の状況を確認して通知するプログラムを作ってLINEで送信してみた

どうも。

前回の記事でLINEのMessaging APIを使ってみましたが、一番シンプルなテキスト形式でした。
smdbanana.hatenablog.com
公式アカウントとかから送られてくるメッセージってもっとこう、、、オシャレですね。

あのオシャレなメッセージも作ろうと思えば作れるんです。

前回Messaging APIを作成したデベロッパーの画面で、左のメニューにある「ツール」を開くと
Flex Message Simulator があるのでこちらを開きます。

f:id:smdbanana:20200202010417p:plain

「Showcase」からベースとするテンプレを選択し、中身をいじっていきます。
整形できたら「View as JSON」でjson形式で内容を確認できます。

f:id:smdbanana:20200202010448p:plain

こんな感じです。

私はよくAWSのEC2インスタンスを停止し忘れて無駄な料金が発生することが多かったので
「定期的にAWS料金とEC2の状況を確認して通知する」プログラムを作ってLINEで結果を送ってみようと思いました。

f:id:smdbanana:20200202010509p:plain
AWSの Lambda -> 関数 -> 関数の作成
を開き、「一から作成」で関数を作成します。(私はPython3.8を選択しました)

関数が作成されたら下部にある「実行ロール」にある
「IAMコンソールで****ロールを表示します。」のリンクを押下し、IAMの設定画面に遷移します。

f:id:smdbanana:20200202010640p:plain

アクセス権限タブにある「ポリシーをアタッチします」を押下。
f:id:smdbanana:20200202010654p:plain

f:id:smdbanana:20200202010712p:plain

ポリシーから「AmazonEC2ReadOnlyAccess」を選択し、「ポリシーのアタッチ」を押下。
これでLambdaからEC2の起動状況がわかるようになります。

次は料金のプロットを有効にするため設定を行います。
マイアカウントから「Billingの設定」を押下し、コスト管理設定の「請求アラートを受け取る」のチェックを有効にします。
これをすることで、CloudWatchのログに料金のプロットが行われるようになります。

f:id:smdbanana:20200202010823p:plain

さて、またLambdaの関数画面に戻ります。
料金を調べるためCloudWatchにアクセスしたり、EC2の状況をみるためEC2へアクセスしたりするので応答時間がそれなりにかかります。
「基本設定」ブロックの「タイムアウト」を適当に伸ばしてあげてください。

f:id:smdbanana:20200202010853p:plain 10秒位あれば多分大丈夫。

プログラムはこんな感じですかね。
AWSのコストとEC2の状況をLINEで報告するLambda

boto3 がキモです。
AWSサービス関連を色々操作できます。
(このプログラムでは「EC2の状態確認」「料金確認」の2つに使ってます。)

プログラムが完成したら、最後に定期実行の設定を行います。 Lambdaの関数画面上部の「Designer」の左側に「+トリガーを追加」があると思います。

トリガーの選択で「CloudWatch Events」を選択します。

f:id:smdbanana:20200202010908p:plain

トリガーの追加をします。適当にスケジュール名や説明を入力し、ルールタイプをスケジュール式にします。

f:id:smdbanana:20200202011007p:plain

cron(00 12 * * ? *)

cronの時間はUTCで指定する必要があるので、JST(日本時間)のためには+9時間が実行タイミングとなります。 (上の例では21時に実行)

これで準備完了。 あとは時間になるのを待つだけです。

f:id:smdbanana:20200202011030p:plain

定期実行されることを確認しました。 料金状況も記載あるし、EC2各インスタンスの状況も見えている。

これでEC2停止忘れで数日後に切ない気持ちになる、ということはなくなりましたとさ。

私からは、以上です。