AWS Health APIから取得できるイベントタイプを確認してみた

クラウドでコスト削減はこちら

こんにちは、臼田です。

今回はAWS Health APIから現在確認できるイベントタイプを取得してみました。

AWS Health APIってなに?

AWS Health APIはre:Invent2016で発表されたAWS Personal Health DashboardのAPIです。

AWS Personal Health DashboardはAWSの障害情報等を確認できますが、確認だけではなく、CloudWatch Eventから自動的に次の動作を設定したり出来て頼もしい機能です。

詳細は下記の資料を御覧ください。

下記のように予定されたイベントを検知して、通知を上げることも可能です。

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

ドキュメントには下記のようにあります。

イベントタイプ

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

AWS Health でサポートされているオペレーション - AWS Health

随時追加される可能性があり、ドキュメントに直接一覧は乗っていないようです。

というわけで、awscliとjqを駆使して取得してみました。

イベントタイプ一覧

2018/02/05現在のものです。

イベントタイプを取得

describe-event-types APIを利用して取得可能です。なお、エンドポイントはus-east-1のみとなっているので、普段別リージョンを利用している場合には、明示的にリージョンを指定する必要があります。

1
aws health describe-event-types --region us-east-1 > health.json

イベントタイプの件数

1
2
cat health.json | jq ".[] | length"
434

イベントが存在するサービス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
cat health.json | jq "[.eventTypes[].service] | unique"
[
 "A4B",
 "ABUSE",
 "ACCOUNT",
 "ACM",
 "APIGATEWAY",
 "APPSTREAM",
 "ATHENA",
 "AUTOSCALING",
 "AWIS",
 "BATCH",
 "BILLING",
 "CHIME",
 "CLOUD9",
 "CLOUDDIRECTORY",
 "CLOUDFORMATION",
 "CLOUDFRONT",
 "CLOUDHSM",
 "CLOUDSEARCH",
 "CLOUDTRAIL",
 "CLOUDWATCH",
 "CODEBUILD",
 "CODECOMMIT",
 "CODEDEPLOY",
 "CODEPIPELINE",
 "CODESTAR",
 "COGNITO",
 "COMPREHEND",
 "CONFIG",
 "CONNECT",
 "DATAPIPELINE",
 "DAX",
 "DEVICEFARM",
 "DIRECTCONNECT",
 "DISCOVERY",
 "DMS",
 "DS",
 "DYNAMODB",
 "EBS",
 "EC2",
 "ECR",
 "ECS",
 "ELASTICACHE",
 "ELASTICBEANSTALK",
 "ELASTICFILESYSTEM",
 "ELASTICLOADBALANCING",
 "ELASTICMAPREDUCE",
 "ELASTICTRANSCODER",
 "ES",
 "EVENTS",
 "FIREHOSE",
 "GAMELIFT",
 "GLACIER",
 "GLUE",
 "GREENGRASS",
 "GUARDDUTY",
 "IAM",
 "IMPORTEXPORT",
 "INSPECTOR",
 "INTERNETCONNECTIVITY",
 "IOT",
 "IOT_DEVICE_MANAGEMENT",
 "KINESIS",
 "KINESISANALYTICS",
 "KMS",
 "LAMBDA",
 "LEX",
 "LIGHTSAIL",
 "MACHINELEARNING",
 "MACIE",
 "MANAGEMENTCONSOLE",
 "MARKETPLACE",
 "MEDIACONVERT",
 "MEDIALIVE",
 "MEDIAPACKAGE",
 "MEDIASTORE",
 "MEDIATAILOR",
 "MGH",
 "MOBILEANALYTICS",
 "MOBILEHUB",
 "MOBILETARGETING",
 "MQ",
 "OPSWORKS",
 "ORGANIZATIONS",
 "POLLY",
 "QUICKSIGHT",
 "RDS",
 "REDSHIFT",
 "REKOGNITION",
 "RESOURCE_GROUPS",
 "RISK",
 "ROUTE53",
 "ROUTE53DOMAINREGISTRATION",
 "ROUTE53PRIVATEDNS",
 "S3",
 "SAGEMAKER",
 "SDB",
 "SECURITY",
 "SERVICECATALOG",
 "SES",
 "SHIELD",
 "SNS",
 "SQS",
 "SSM",
 "SSO",
 "STATES",
 "STORAGEGATEWAY",
 "SWF",
 "TESTSERVICE",
 "VPC",
 "VPN",
 "WAF",
 "WORKDOCS",
 "WORKMAIL",
 "WORKSPACES",
 "XRAY"
]

最近追加されたCloud9等も含まれていて、アップデートされていることがわかります。

EC2のイベントタイプ一覧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
cat health.json | jq '.eventTypes[] | select(.service == "EC2")'
{
 "category": "issue",
 "code": "AWS_EC2_API_ISSUE",
 "service": "EC2"
}
{
 "category": "accountNotification",
 "code": "AWS_EC2_BILLING_NOTIFICATION",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_CLASSIC_NETWORK_HEALTH_INTERNET_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_CLASSIC_NETWORK_HEALTH_INTER_AZ_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_CLASSIC_NETWORK_HEALTH_INTRA_AZ_ISSUE",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_DEDICATED_HOST_NETWORK_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_DEDICATED_HOST_POWER_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_DEDICATED_HOST_RETIREMENT_SCHEDULED",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_DEDICATED_HOST_UNDER_RESERVATION_REPLACE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_DNS_RESOLUTION_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_INSTANCE_AUTO_RECOVERY_FAILURE",
 "service": "EC2"
}
{
 "category": "accountNotification",
 "code": "AWS_EC2_INSTANCE_AUTO_RECOVERY_NO_ACTION",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_INSTANCE_AUTO_RECOVERY_SUCCESS",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_INSTANCE_NETWORK_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_INSTANCE_POWER_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_INSTANCE_REBOOT_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_INSTANCE_RETIREMENT_EXPEDITED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_NETWORK_CONNECTIVITY_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_OPERATIONAL_ISSUE",
 "service": "EC2"
}
{
 "category": "accountNotification",
 "code": "AWS_EC2_OPERATIONAL_NOTIFICATION",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_EXPEDITED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_POWER_CONNECTIVITY_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_RI_MARKETPLACE_BANK_ACCOUNT_UPDATE_REQUIRED",
 "service": "EC2"
}
{
 "category": "scheduledChange",
 "code": "AWS_EC2_SYSTEM_REBOOT_MAINTENANCE_SCHEDULED",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_VPC_NETWORK_HEALTH_INTERNET_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_VPC_NETWORK_HEALTH_INTER_AZ_ISSUE",
 "service": "EC2"
}
{
 "category": "issue",
 "code": "AWS_EC2_VPC_NETWORK_HEALTH_INTRA_AZ_ISSUE",
 "service": "EC2"
}

EC2のcodeだけ抽出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
cat health.json | jq '.eventTypes[] | select(.service == "EC2") | .code'
"AWS_EC2_API_ISSUE"
"AWS_EC2_BILLING_NOTIFICATION"
"AWS_EC2_CLASSIC_NETWORK_HEALTH_INTERNET_ISSUE"
"AWS_EC2_CLASSIC_NETWORK_HEALTH_INTER_AZ_ISSUE"
"AWS_EC2_CLASSIC_NETWORK_HEALTH_INTRA_AZ_ISSUE"
"AWS_EC2_DEDICATED_HOST_NETWORK_MAINTENANCE_SCHEDULED"
"AWS_EC2_DEDICATED_HOST_POWER_MAINTENANCE_SCHEDULED"
"AWS_EC2_DEDICATED_HOST_RETIREMENT_SCHEDULED"
"AWS_EC2_DEDICATED_HOST_UNDER_RESERVATION_REPLACE"
"AWS_EC2_DNS_RESOLUTION_ISSUE"
"AWS_EC2_INSTANCE_AUTO_RECOVERY_FAILURE"
"AWS_EC2_INSTANCE_AUTO_RECOVERY_NO_ACTION"
"AWS_EC2_INSTANCE_AUTO_RECOVERY_SUCCESS"
"AWS_EC2_INSTANCE_NETWORK_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_POWER_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_REBOOT_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_RETIREMENT_EXPEDITED"
"AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED"
"AWS_EC2_INSTANCE_STORE_DRIVE_PERFORMANCE_DEGRADED"
"AWS_EC2_NETWORK_CONNECTIVITY_ISSUE"
"AWS_EC2_OPERATIONAL_ISSUE"
"AWS_EC2_OPERATIONAL_NOTIFICATION"
"AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_EXPEDITED"
"AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED"
"AWS_EC2_POWER_CONNECTIVITY_ISSUE"
"AWS_EC2_RI_MARKETPLACE_BANK_ACCOUNT_UPDATE_REQUIRED"
"AWS_EC2_SYSTEM_REBOOT_MAINTENANCE_SCHEDULED"
"AWS_EC2_VPC_NETWORK_HEALTH_INTERNET_ISSUE"
"AWS_EC2_VPC_NETWORK_HEALTH_INTER_AZ_ISSUE"
"AWS_EC2_VPC_NETWORK_HEALTH_INTRA_AZ_ISSUE"

scheduledChangeで絞ってみる

1
2
3
4
5
6
7
8
9
10
11
12
cat health.json | jq '.eventTypes[] | select(.service == "EC2" and .category == "scheduledChange") | .code'
"AWS_EC2_DEDICATED_HOST_NETWORK_MAINTENANCE_SCHEDULED"
"AWS_EC2_DEDICATED_HOST_POWER_MAINTENANCE_SCHEDULED"
"AWS_EC2_DEDICATED_HOST_RETIREMENT_SCHEDULED"
"AWS_EC2_INSTANCE_NETWORK_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_POWER_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_REBOOT_MAINTENANCE_SCHEDULED"
"AWS_EC2_INSTANCE_RETIREMENT_EXPEDITED"
"AWS_EC2_INSTANCE_RETIREMENT_SCHEDULED"
"AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_EXPEDITED"
"AWS_EC2_PERSISTENT_INSTANCE_RETIREMENT_SCHEDULED"
"AWS_EC2_SYSTEM_REBOOT_MAINTENANCE_SCHEDULED"

上記ブログで設定されたSNS通知でどのようなイベントがトリガーになるかわかります。

S3も見てみる

1
2
3
4
5
6
7
8
9
cat health.json | jq '.eventTypes[] | select(.service == "S3") | .code'
"AWS_S3_API_ISSUE"
"AWS_S3_INCREASED_GET_API_ERROR_RATES"
"AWS_S3_INCREASED_GET_API_LATENCY"
"AWS_S3_INCREASED_PUT_API_ERROR_RATES"
"AWS_S3_INCREASED_PUT_API_LATENCY"
"AWS_S3_OPEN_ACCESS_BUCKET_NOTIFICATION"
"AWS_S3_OPERATIONAL_ISSUE"
"AWS_S3_OPERATIONAL_NOTIFICATION"

OPEN_ACCESS_BUCKET_NOTIFICATIONとあり単純なヘルスチェック以上も期待できそうですね。

まとめ

AWS Health機能が様々なサービスを網羅していて、単純な死活以外にも通知してくれそうであることが垣間見えたかと思います。

リソースの監視方法には色んな方法がありますが、AWS Health APIを利用したり、これをトリガーにCloudWatch Eventを設定しておくという選択肢も検討してみてはいかがでしょうか?

監視したいリソースについてAPIが対応しているかは、上記のコマンドで最新の状況を確認してみましょう。

Invent2017japan portal