CloudWatch メトリクスのグラフを SNS トピックに通知するアプリケーションを作った
2019/04/22 14:44
2024/12/30 17:55
CloudWatch メトリクスのグラフを単純に SNS トピックに通知するアプリケーションを Serverless Application Repository に登録しました。
- GitHub のリポジトリはこちらです: 53ningen/GetMetricWidgetImage
- 関連記事: CloudWatch メトリクスのグラフを AWS CLI から取得する
1. ユースケース
例えば通知先のトピックのサブスクライバは基本的にメッセージを処理する Lambda 関数を想定しています。利用例としては以下のようなものが思い浮かびます。
- メッセージを処理して E メールを送信する
- Slack に通知する
例えば Billing のグラフを毎日とある Slack チャンネルに送信することにより課金状況をコンソールにログインせず確認できたり、システムの稼働状況(負荷やジョブキューの状況など)を毎時 Slack チャンネルに投稿してくれると便利そうだと思います。
2. 利用方法
README に書いてあるとおり Serverless Application Repository を利用する方法と、デプロイスクリプトを利用する方法があります。
2.1. Serverless Application Repository を利用する方法
- 設定ファイル を入力し、ご自身の S3 バケットにアップロードします
- 通知先の SNS トピックを作成します
- 該当アプリケーション にアクセスして、パラメータを入力しデプロイ
2.2. デプロイスクリプトを利用する方法
- git clone git@github.com:53ningen/GetMetricWidgetImage.git
- .env.template .env を実行し、.env ファイルを更新してください 3, cp config.template.yaml config.yaml を実行し config.yaml ファイルを更新してください 4. ./scripts/update_config を実行すると S3 バケットにファイルを転送します 5. ./scripts/deploy を実行するとサーバーレスアプリケーションをデプロイします
2.3. お使いの SAM テンプレートにネストして組み込みたい場合
以下の内容を Resource 配下に追加します
GetMetricWidgetImage:
Type: AWS::Serverless::Application
Properties:
Location:
ApplicationId: arn:aws:serverlessrepo:us-east-1:247601741829:applications/GetMetricWidgetImage
SemanticVersion: 1.0.0
Parameters:
ConfigBucket: YOUR_VALUE
ConfigKey: YOUR_VALUE
NotificationTargetTopicArn: YOUR_VALUE
# RetentionInDays: '7' # Uncomment to override default value
# Schedule: 'rate(60 minutes)' # Uncomment to override default value
3. デモ
一番ありがちなパターンっぽい Billing のグラフを取得して Slack に投稿するアプリケーションを簡単にデプロイできるものをつくっておきました。
3.1. 動作イメージ
こんな風に Slack に Billing のグラフが投稿されます
3.2. デプロイ方法
- config.yaml をいい塩梅に編集します
- デフォルトのテンプレートにはまさに Billing のグラフを取得する設定が記載されています
- message_format の channel には通知したい Slcak チャンネルを指定すると良いと思います
- config.yaml の編集が終わったら S3 バケットにアップロードします
log_level: INFO
message_format: '{"image":"{hex_image}", "title":"{title}", "initial_comment":"{title}", "channel": "#random"}'
items:
-
metrics:
-
- AWS/Billing
- EstimatedCharges
- Currency
- USD
-
period: 21600
stat: Maximum
view: timeSeries
width: 1200
height: 400
stacked: false
start: 20160 # minutes
timezone: +0900
region: us-east-1
title: AWS/Billing,EstimatedCharges,Currency,USD
- つづいて アプリケーションのページ へアクセスし、設定の欄に必要事項を入力します
- ConfigBucket: config.yaml をアップロードした S3 バケット名
- ConfigKey: config.yaml の S3 オブジェクトキー
- IAMUsername: KMS キーにアクセス可能にしたい IAM ユーザー名
- Schedule: cron 式 or rate 式でグラフの取得を行うスケジュールを指定します
- SlackVerificationToken: Slack Channel 投稿に使う SlackVerificationToken を取得して、この欄に記入します
- I acknowledge that this app creates custom IAM roles, resource policies and deploys nested applications. にチェックを入れて、[デプロイ] を選択します
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english