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から自動的に次の動作を設定したり出来て頼もしい機能です。
詳細は下記の資料を御覧ください。
re:Growth 2016で「AWS Personal Health Dashboardの可能性」について話してきました! #cmdevio #reinvent
下記のように予定されたイベントを検知して、通知を上げることも可能です。
どんなイベントを取得できるのか
ドキュメントには下記のようにあります。
イベントタイプ
DescribeEventTypes オペレーションでは、オプションで指定したフィルタに一致するイベントタイプを取得します。イベントタイプは、イベントに関する AWS のサービス、イベントタイプコード、およびカテゴリのテンプレート定義とみなすことができます。イベントタイプとイベントは、オブジェクト指向プログラミングのクラスとオブジェクトに似ています。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が対応しているかは、上記のコマンドで最新の状況を確認してみましょう。