📝

Personal Health Dashboardのイベントをメールで通知するCloudFormationテンプレートを作ってみた

3 min read

CloudWatchの請求アラームを作成するCloudFormationテンプレートを作ってみたのついでみたいなノリで作ってみました。
Personal Health Dashboardについては公式ドキュメントをご覧ください。

テンプレート

HealthEvent.json
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "Create EventsRule to notify Personal Health Dashboard events",
  "Parameters": {
    "EmailAddress": {
      "Description": "Enter your EmailAddress",
      "Type": "String"
    }
  },
  "Resources": {
    "EventsRule": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Name": "NotifyHealthEvent_Rule",
        "Description": "Personal Health Dashboardのイベントを通知するルール",
        "EventPattern": "{\"source\":[\"aws.health\"]}",
        "State": "ENABLED",
        "Targets": [
          {
            "Arn": {
              "Ref": "SNSTopic"
            },
            "Id": "Id123"
          }
        ],
        "EventBusName": "default"
      }
    },
    "SNSTopic": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "DisplayName": "NotifyHealthEvent_Topic",
        "TopicName": "NotifyHealthEvent_Topic"
      }
    },
    "SNSTopicPolicy": {
      "Type": "AWS::SNS::TopicPolicy",
      "Properties": {
        "PolicyDocument": {
          "Fn::Sub": "{\"Version\":\"2008-10-17\",\"Id\":\"__default_policy_ID\",\"Statement\":[{\"Sid\":\"__default_statement_ID\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":[\"SNS:GetTopicAttributes\",\"SNS:SetTopicAttributes\",\"SNS:AddPermission\",\"SNS:RemovePermission\",\"SNS:DeleteTopic\",\"SNS:Subscribe\",\"SNS:ListSubscriptionsByTopic\",\"SNS:Publish\",\"SNS:Receive\"],\"Resource\":\"${SNSTopic}\",\"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"${AWS::AccountId}\"}}},{\"Sid\":\"AWSEvents_${EventsRule}_Id123\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"sns:Publish\",\"Resource\":\"${SNSTopic}\"}]}"
        },
        "Topics": [
          {
            "Ref": "SNSTopic"
          }
        ]
      }
    },
    "SNSSubscription": {
      "Type": "AWS::SNS::Subscription",
      "Properties": {
        "TopicArn": {
          "Ref": "SNSTopic"
        },
        "Endpoint": {
          "Ref": "EmailAddress"
        },
        "Protocol": "email",
        "Region": {
          "Ref": "AWS::Region"
        }
      }
    }
  }
}

簡単な説明

  • EventBridgeルール
    {\"source\":[\"aws.health\"]}ですべてのhealthイベントを取得
  • SNSトピック
    NotifyHealthEvent_Topicという名前のトピックを作成
    トピックポリシーはコンソールで作成するときと同様のもの
  • SNSサブスクリプション
    通知先にメールアドレスを設定
    メールアドレスはCloudFormationスタック作成時にパラメーターで設定

まとめ

今回はPersonal Health Dashboardのイベントをメールで通知するCloudFormationテンプレートを紹介しました。
参考になれば幸いです。
Former2最高!