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 でサポートされるイベントタイプの数は、時間とともに増えることが予想されます。
随時追加される可能性があり、ドキュメントに直接一覧は乗っていないようです。
というわけで、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が対応しているかは、上記のコマンドで最新の状況を確認してみましょう。