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

2018.02.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

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

AWS Health APIってなに?

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

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

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

re:Growth 2016で「AWS Personal Health Dashboardの可能性」について話してきました! #cmdevio #reinvent

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

AWS HealthでEC2の予定されたイベントの通知にアクションを設定する #reinvent

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

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

イベントタイプ

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

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

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

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

イベントタイプ一覧

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

イベントタイプを取得

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

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

イベントタイプの件数

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

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

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のイベントタイプ一覧

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だけ抽出

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で絞ってみる

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も見てみる

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が対応しているかは、上記のコマンドで最新の状況を確認してみましょう。