1
0

AWSの障害情報をSlackにリアルタイム通知するCloudFormationテンプレートの実装

Posted at

はじめに

AWSを利用していると、サービスの障害情報を迅速に把握することが非常に重要です。本記事では、AWSの障害情報をSlackに通知する仕組みを、CloudFormationを使って構築する方法を紹介します。この仕組みを導入することで、障害発生時に対応することが可能となり、システムの信頼性を向上させることができます。

以下が今回紹介するCloudFormationテンプレートのコードです。このテンプレートを使用することで、AWS HealthDashboardからの障害情報をSNSトピックを通じてSlackに通知する設定を自動で行うことができます。

template.yaml
AWSTemplateFormatVersion: 2010-09-09
Description: AWS-health-check

Resources:
  # Chatbot
  HealthCheckChatbot:
    Type: AWS::Chatbot::SlackChannelConfiguration
    Properties:
      ConfigurationName: health_notification
      SlackChannelId: "**********"
      SlackWorkspaceId: "**********"
      IamRoleArn: !Sub arn:aws:iam::${AWS::AccountId}:role/chatbot-role
      GuardrailPolicies:
            - !Sub arn:aws:iam::${AWS::AccountId}:policy/guardrail-role
      SnsTopicArns:
        - !Ref HealthCheckTopic

  # SNS Topic
  HealthCheckTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: health_notification
      KmsMasterKeyId: "alias/key-sns"

  HealthCheckTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      Topics:
        - !Ref HealthCheckTopic
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              Service: "events.amazonaws.com"
            Action: "sns:Publish"
            Resource: !Ref HealthCheckTopic
            Condition:
              ArnEquals:
                aws:SourceArn: !Sub arn:aws:events:ap-northeast-1:${AWS::AccountId}:rule/eventbridge_cloudformation

  HealthCheckTopicSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Endpoint: https://global.sns-api.chatbot.amazonaws.com
      Protocol: HTTPS
      TopicArn: !Ref HealthCheckTopic

  # EventBridge
  HealthCheckEventRule:
    Type: AWS::Events::Rule
    Properties:
      Name: health_notification
      EventPattern:
        source:
          - "aws.health"
        detail-type:
          - "AWS Health Event"
      State: ENABLED
      Targets:
        - Arn: !Ref HealthCheckTopic
          Id: "HealthCheckTarget"

各リソースの説明

HealthCheckChatbot

このリソースはAWS Chatbotを設定し、Slackのチャンネルに通知を送るための設定を行います。SlackChannelIdとSlackWorkspaceIdはご自身のSlackワークスペースの情報を入力してください。
また、IamRoleArnにはAWS Chatbotが使用するIAMロールを指定します。

HealthCheckTopic

SNSトピックを作成します。このトピックがAWS HealthDashboardからの通知を受け取り、Slackに転送する役割を担います。

HealthCheckTopicPolicy

このリソースはSNSトピックに対するポリシーを設定し、Amazon EventBridgeがSNSトピックにメッセージを発行できるようにします。

HealthCheckTopicSubscription

SNSトピックに対するサブスクリプションを作成します。エンドポイントとしてAWS ChatbotのAPIを指定し、通知をSlackに送信します。

HealthCheckEventRule

EventBridgeのルールを設定し、AWS HealthからのイベントをキャッチしてSNSトピックに送信します。

KMSの設定

SNS Topic内で設定するKMSキーは、デフォルトのAWS マネージド型キーだと権限が足りないためEventBridgeからメッセージを受信することができません。
そのため、カスタマー管理型のキーを作成する必要があります。

KmsMasterKeyId: "alias/key-sns"

具体的にどんな権限が必要かというと

{
    "Sid": "Allow Eventbirdge",
    "Effect": "Allow",
    "Principal": {
        "Service": "events.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
    ],
    "Resource": "*"
}

さいごに

無料のAWSアカウントだと障害情報の通知が届かないので気をつけてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0