AWS Health APIを活用する

# AWS Health APIとは
AWS Personal Health Dashboardに通知されるイベント情報を取得するAPIです。
AWS Personal Health Dashboardに通知されるAWS Health イベント（メンテナンス情報、障害情報、etc...）の様々な情報をAWS Health APIで取得してみました。

# AWS Health イベントとは

> AWS Health イベントは Health イベントとも呼ばれ、AWS Health が他の AWS サービスの代わりに送信する通知です。これらのイベントを使用して、アカウントに影響する可能性のある今後の変更や予定された変更について知ることができます。

[AWS Health の概念](https://docs.aws.amazon.com/ja_jp/health/latest/ug/aws-health-concepts-and-terms.html)より

「アカウント固有のイベント」と「パブリックイベント」がある

# どんなイベントを取得できるのか

## イベントタイプ一覧にあるものが取得できるイベント
AWS Health API [DescribeEventTypes](https://docs.aws.amazon.com/health/latest/APIReference/API_DescribeEventTypes.html)でイベントタイプ一覧を取得できます。

```Shell
aws health describe-event-types --region us-east-1 > types.json
```
※ AWS Health APIのエンドポイントは`us-east-1`のみ

> -DescribeEventTypesオペレーションは、オプションで指定されたフィルターと一致するイベントタイプを取得します。イベントタイプは、イベントに関する AWS のサービス、イベントタイプコード、およびカテゴリのテンプレート定義です。イベントタイプとイベントは、オブジェクト指向プログラミングのクラスとオブジェクトに似ています。AWS Health でサポートされるイベントタイプの数は、時間とともに増えます。

[AWS Health でサポートされているオペレーション](https://docs.aws.amazon.com/ja_jp/health/latest/ug/supported-operations.html)より
なのでドキュメントに一覧は載っていません。各自APIで確認が必要です。

## 対応しているイベントタイプ一覧

```Shell
cat types.json | jq '[.eventTypes[].code] | unique'
```

### イベントタイプの[カテゴリ](https://docs.aws.amazon.com/ja_jp/health/latest/ug/aws-health-concepts-and-terms.html#event-type-categories)
以下の3種に分かれています。
- アカウント通知
    - codeに`NOTIFICATION`や`NOTICE`とつく
- 問題
    - codeに`ISSUE`とつく
- 予定された変更
    - codeに`MAINTENANCE`や`SCHEDULED`とつく

## 対応サービス一覧
```Shell
cat types.json | jq '[.eventTypes[].service] | unique'
```

2022/12GAの`CodeCatalyst`にもいくつかのイベントカテゴリが対応してました。
```Shell
[
  "A2I",
  "A4B",
  "ABUSE",
  "ACCOUNT",
  "ACM",
  "ACMPRIVATECA",
  "ACTIVATECONSOLE",
  "AIRFLOW",
  "AMPLIFY",
  "AMPLIFYADMIN",
  "AMPLIFYUIBUILDER",
  "APIGATEWAY",
  "APPCONFIG",
  "APPFLOW",
  "APPLICATIONINSIGHTS",
  "APPLICATION_AUTOSCALING",
  "APPMESH",
  "APPRUNNER",
  "APPSTREAM",
  "APPSTREAM2",
  "APPSYNC",
  "APS",
  "ATHENA",
  "AUDITMANAGER",
  "AUTOSCALING",
  "AWIS",
  "BACKUP",
  "BATCH",
  "BILLING",
  "BRAKET",
  "CASSANDRA",
  "CHATBOT",
  "CHIME",
  "CLEANROOMS",
  "CLIENT_VPN",
  "CLOUD9",
  "CLOUDDIRECTORY",
  "CLOUDFORMATION",
  "CLOUDFRONT",
  "CLOUDHSM",
  "CLOUDSEARCH",
  "CLOUDSHELL",
  "CLOUDTRAIL",
  "CLOUDWATCH",
  "CLOUDWATCHSYNTHETICS",
  "CODEARTIFACT",
  "CODEBUILD",
  "CODECATALYST",
  "CODECOMMIT",
  "CODEDEPLOY",
  "CODEGURU_PROFILER",
  "CODEGURU_REVIEWER",
  "CODEPIPELINE",
  "CODESTAR",
  "CODEWHISPERER",
  "COGNITO",
  "COMPREHEND",
  "COMPREHENDMEDICAL",
  "COMPUTE_OPTIMIZER",
  "CONFIG",
  "CONNECT",
  "CONSOLEMOBILEAPP",
  "CONTROLTOWER",
  "DATABREW",
  "DATAEXCHANGE",
  "DATAPIPELINE",
  "DATASYNC",
  "DAX",
  "DEEPCOMPOSER",
  "DEEPLENS",
  "DEEPRACER",
  "DETECTIVE",
  "DEVICEFARM",
  "DEVOPS-GURU",
  "DIRECTCONNECT",
  "DISCOVERY",
  "DLM",
  "DMS",
  "DOCDB",
  "DRS",
  "DS",
  "DYNAMODB",
  "E2M",
  "EBS",
  "EBSONOUTPOSTS",
  "EC2",
  "ECR",
  "ECR_PUBLIC",
  "ECS",
  "EKS",
  "ELASTICACHE",
  "ELASTICBEANSTALK",
  "ELASTICFILESYSTEM",
  "ELASTICLOADBALANCING",
  "ELASTICMAPREDUCE",
  "ELASTICTRANSCODER",
  "ELEMENTAL",
  "EMR_SERVERLESS",
  "ES",
  "EVENTS",
  "EVENTS_SCHEDULER",
  "EVIDENTLY",
  "FARGATE",
  "FINSPACE",
  "FIREHOSE",
  "FIS",
  "FMS",
  "FORECAST",
  "FRAUDDETECTOR",
  "FREERTOS",
  "FSX",
  "GAMELIFT",
  "GAMESPARKS",
  "GEO",
  "GLACIER",
  "GLOBALACCELERATOR",
  "GLUE",
  "GRAFANA",
  "GREENGRASS",
  "GROUNDSTATION",
  "GUARDDUTY",
  "HEALTH",
  "HEALTHLAKE",
  "IAM",
  "IAMIDENTITYCENTER",
  "IAMROLESANYWHERE",
  "IMAGEBUILDER",
  "IMPORTEXPORT",
  "INFRASTRUCTUREPERFORMANCE",
  "INSPECTOR",
  "INSPECTOR2",
  "INTERNETCONNECTIVITY",
  "INTERNETMONITOR",
  "INTERREGIONVPCPEERING",
  "IOT",
  "IOT1CLICK",
  "IOTROBORUNNER",
  "IOTTWINMAKER",
  "IOT_ANALYTICS",
  "IOT_DEVICE_ADVISOR",
  "IOT_DEVICE_DEFENDER",
  "IOT_DEVICE_MANAGEMENT",
  "IOT_EVENTS",
  "IOT_FLEETWISE",
  "IOT_SITEWISE",
  "IQ",
  "IVS",
  "KAFKA",
  "KENDRA",
  "KENDRA_RANKING",
  "KINESIS",
  "KINESISANALYTICS",
  "KINESISSTREAMS",
  "KINESIS_VIDEO",
  "KMS",
  "LAKEFORMATION",
  "LAMBDA",
  "LAUNCHWIZARD",
  "LEX",
  "LICENSE_MANAGER",
  "LIGHTSAIL",
  "LOCATION",
  "LOOKOUTMETRICS",
  "LOOKOUTVISION",
  "MACHINELEARNING",
  "MACIE",
  "MAINFRAME_MODERNIZATION",
  "MANAGEDBLOCKCHAIN",
  "MANAGEMENTCONSOLE",
  "MARKETPLACE",
  "MEDIACONNECT",
  "MEDIACONVERT",
  "MEDIALIVE",
  "MEDIAPACKAGE",
  "MEDIASTORE",
  "MEDIATAILOR",
  "MEMORYDB",
  "MGH",
  "MGN",
  "MIGRATIONHUBORCHESTRATOR",
  "MIGRATIONHUBSTRATEGY",
  "MOBILEANALYTICS",
  "MOBILEHUB",
  "MOBILETARGETING",
  "MONITRON",
  "MQ",
  "MULTIPLE_SERVICES",
  "NATGATEWAY",
  "NEPTUNE",
  "NETWORKFIREWALL",
  "NETWORK_ACCESS_ANALYZER",
  "NIMBLE",
  "NOTIFICATIONS",
  "OPSWORKS",
  "OPSWORKS-CM",
  "OPSWORKS_CHEF",
  "OPSWORKS_PUPPET",
  "ORGANIZATIONS",
  "OUTPOSTS",
  "PANORAMA",
  "PERSONALIZE",
  "POLLY",
  "PRICING",
  "PROTON",
  "QLDB",
  "QUICKSIGHT",
  "RAM",
  "RDS",
  "REACHABILITY_ANALYZER",
  "REDSHIFT",
  "REFACTOR_SPACES",
  "REKOGNITION",
  "RESILIENCEHUB",
  "RESOURCEEXPLORER",
  "RESOURCE_GROUPS",
  "RISK",
  "ROBOMAKER",
  "ROUTE53",
  "ROUTE53APPRECOVERYCONTROLLER",
  "ROUTE53DOMAINREGISTRATION",
  "ROUTE53PRIVATEDNS",
  "ROUTE53RESOLVER",
  "RUM",
  "S3",
  "S3_OUTPOSTS",
  "S3_REPLICATION_TIME_CONTROL",
  "SAGEMAKER",
  "SDB",
  "SDK",
  "SECRETSMANAGER",
  "SECURITY",
  "SECURITYHUB",
  "SECURITYLAKE",
  "SERVERLESSREPO",
  "SERVICECATALOG",
  "SERVICEDISCOVERY",
  "SERVICEQUOTAS",
  "SES",
  "SHIELD",
  "SIGNIN",
  "SIMSPACEWEAVER",
  "SMS",
  "SNOWBALL",
  "SNS",
  "SQS",
  "SSM",
  "SSM-SAP",
  "SSM_INCIDENTS",
  "SSO",
  "STATES",
  "STORAGEGATEWAY",
  "SUMERIAN",
  "SUPPORTCENTER",
  "SWF",
  "TAG",
  "TEXTRACT",
  "TIMESTREAM",
  "TNB",
  "TRAFFICMIRRORING",
  "TRANSCRIBE",
  "TRANSFER",
  "TRANSIT_GATEWAY",
  "TRANSLATE",
  "TRUSTEDADVISOR",
  "VMIMPORTEXPORT",
  "VPC",
  "VPCE_PRIVATELINK",
  "VPN",
  "WAF",
  "WELLARCHITECTED",
  "WICKR",
  "WORKDOCS",
  "WORKMAIL",
  "WORKSPACES",
  "WORKSPACESWEB",
  "XRAY"
]
```

# 取得できないイベントはあるのか？

あるみたいです。
https://qiita.com/shu85t/items/1352cc9375c59d7514d7

> RDSのメンテナンス情報はその全てがメールやPHD(Personal Health Dashboard)に通知されるわけではありません(サポート確認済み)。そのようなものも把握したい場合は describe-pending-maintenance-actions コマンドで取得する方法があります。


# 実際にイベントを取得してみる

AWS Health API [DescribeEvents](https://docs.aws.amazon.com/health/latest/APIReference/API_DescribeEvents.html)でイベント一覧を取得できます。

```shell
aws health describe-events --region us-east-1 > events.json
```

filterで日時指定しないと、過去90日分まで取れます。


# 感想

APIを活用して取得→通知の仕組みなどに活用できそうです！

EventBridgeと統合されており、[EventBridgeを使用したイベントのモニタリング](https://docs.aws.amazon.com/ja_jp/health/latest/ug/cloudwatch-events-health.html)もできるため、別で検証しようと思います。

EventBridgeでは、

> アカウントに固有のAWS Healthイベントのみが配信されます

とあり、パブリックイベントの取得にはAWS Health APIの使用が必要そうです。

> AWS Health は、ベストエフォートベースでイベントを配信します。イベントが常に EventBridge に配信されるとは限りません。

なので、これのカバーにもAWS Health APIが活用できそうです。