ablog

不器用で落着きのない技術者のメモ

CloudWatch アラームを AWS Chatbot 経由で Slack に通知する

CloudWatch アラームを AWS Chatbot から Slack に連携して通知してみた。

  • CloudWatch アラームは Redshift への接続数 > 5 というシンプルなものにした
  • SNS トピックは KMS カスタマー管理型キーで暗号化した(マネージドキーは Cloudwatch からアクセスできないため)

設定手順

KMSカスタマー管理型キーを作成する

CloudWatch からはマネージドキーにアクセスできないため(キーポリシーを編集できないため)、カスタマー管理型キーを作成する

{
    "Version": "2012-10-17",
    "Id": "key-consolepolicy-3",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudwatch.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt",
                "kms:GenerateDataKey*"
            ],
            "Resource": "*"
        }
    ]
}
SNS トピックを作成する

CloudWatch アラームから AWS Chatbot へイベントを中継するために SNS トピックを作成する。

  • マネジメントコンソール -[Amazon SNS]-[トピック]-[SNSトピックの作成]をクリック
    • タイプ:スタンダード
    • 名前:cloudwatch-test-sns
    • 表示名:cloudwatch-test-sns
    • 暗号化
      • [暗号化の有効化]を選択
      • カスタマーマスターキー:alias/sns-key … 作成したキーを選択
  • トピック作成後に、[サブスクリプションの作成]をクリック
    • プロトコル:Eメール
    • エンドポイント:<メールアドレスを入力>
  • 入力したメールアドレスにメールが届くので、本文の "Confirm subscription" のリンクをクリック


CloudWatch アラームを作成する

Amazon Redshift のDB接続数を CloudWatch アラームで設定する。

  • マネジメントコンソール -[CloudWatch]-[アラーム]-[アラーム状態]-[アラームの作成]をクリック
    • メトリクスの選択-[Redshift]-[クラスター別の集計]-[任意のクラスター]-[DatabaseConnections] を選択
  • メトリクス
    • メトリクス名:DatabaseConnections
    • ClusterIdentifier:awsredshift-redshift-cluster-2(選択した ClusterIdentifier)
    • 統計:平均値
    • 期間:1分
  • 条件
    • しきい値の種類:静的
    • DatabaseConnections が次の時...:より大きい(> しきい値
    • …よりも:5
  • 通知
    • アラーム状態トリガー:アラーム状態
    • SNS トピックを選択
      • 既存の SNS トピックを選択
      • 通知の送信先:cloudwatch-test-sns
  • アラーム名:awsredshift-redshift-cluster-2-DatabaseConnections-ALL
AWS Chatbot でクライアント・チャンネルを設定する

AWS Chatbot で SNS トピックから Slack へ連携する設定をする。

  • マネジメントコンソール -[AWS Chatbot]-[新しいクライアントを設定]をクリック
  • 設定したワークスペースを選択し、[新しいチャネルを設定]をクリック
    • 設定名:cloudwatch_test
    • Slack チャネル:パブリック
    • パブリックチャネル:random
    • アクセス許可
      • IAMロール:テンプレートを使用して IAM ロールを作成する
      • ロール名:cloudwatch-chat-test
      • ポリシーテンプレート:通知のアクセス許可
    • SNSトピック
      • トピック:cloudwatch-test-sns

テスト

  • Redshift に 6 本接続を張って、Slack に通知されることを確認した。
# plsql で 6 本接続する
$ psql "host=redshift-cluster-2.********.ap-northeast-1.redshift.amazonaws.com user=awsuser dbname=dev port=5439"
  • アラーム状態になる。

f:id:yohei-a:20211027214132p:plain

  • Slack に通知される。

f:id:yohei-a:20211027214152p:plain