CloudWatch メトリクスのグラフを SNS トピックに通知するアプリケーションを作った

CloudWatch メトリクスのグラフを単純に SNS トピックに通知するアプリケーションを Serverless Application Repository に登録しました。

1. ユースケース

例えば通知先のトピックのサブスクライバは基本的にメッセージを処理する Lambda 関数を想定しています。利用例としては以下のようなものが思い浮かびます。

  • メッセージを処理してEメールを送信する
  • Slack に通知する

例えば Billing のグラフを毎日とある Slack チャンネルに送信することにより課金状況をコンソールにログインせず確認できたり、システムの稼働状況(負荷やジョブキューの状況など)を毎時 Slack チャンネルに投稿してくれると便利そうだと思います。

2. 利用方法

README に書いてあるとおり Serverless Application Repository を利用する方法と、デプロイスクリプトを利用する方法があります。

2.1. Serverless Application Repository を利用する方法

  1. 設定ファイル を入力し、ご自身の S3 バケットにアップロードします
  2. 通知先の SNS トピックを作成します
  3. 該当アプリケーション にアクセスして、パラメータを入力しデプロイ

2.2. デプロイスクリプトを利用する方法

  1. git clone git@github.com:53ningen/GetMetricWidgetImage.git
  2. .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 に投稿するアプリケーションを簡単にデプロイできるものをつくっておきました。

GetMetricWidgetImage/demo/GetMetricWidgetImageAndNotifySlack at master · 53ningen/GetMetricWidgetImage

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. にチェックを入れて、[デプロイ] を選択します

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください