VPoT兼CTO室マネージャーの岩本 (iwamot) です。プレイヤーとしては、おもにクラウド運用を担当しています。
先日「IPアドレス制限のあるURLを死活監視したい」と同僚から相談され、Amazon Route 53ヘルスチェックによる監視を実装しました。
シンプルな実装ですが、工夫した点もあるため、事例として共有します。
要件
- 監視対象は、AWSのALBやCloudFrontで特定クライアントにのみ公開しているURL
- IPアドレス制限のないURLはPingdomで死活監視しているが、今回は利用不可
- PingdomのIPアドレスをクロールして許可するのは手間だし、自動化も面倒
アーキテクチャ
実装した死活監視のアーキテクチャは以下の通りです。
Route 53ヘルスチェックを設定し、ALBやCloudFrontのURLを監視するようにしました。利用は初めてですが、特に難しいところはありませんでした。
また、CloudWatchアラームも設定し、異常が検知された(HealthCheckStatusメトリクスの値が「0」となった)場合に、SNSトピックに通知が飛ぶようにもしました。こちらも簡単で、メトリクスがus-east-1
に記録される点に注意が必要な程度です。
重要な、ヘルスチェック元IPアドレスの許可については、下表のように設定しました。
監視対象 | IPアドレスの定義先 | 許可ルールの設定先 |
---|---|---|
ALB | マネージドプレフィックスリスト | セキュリティグループ |
CloudFront | WAF IPセット(詳しくは別記事を参照) | Web ACL |
Route 53ヘルスチェックを選んだ理由
- 監視対象がAWS上のワークロードのため一元的に管理できる
- マネージドサービスのため開発が不要
- マネージドプレフィックスリストが提供されているためアクセス許可が簡単
- 料金が安い(URL1件あたり月1.5ドル程度)
工夫した点
監視対象は複数あるとのことだったので、社内用Terraformモジュールを作成し、横展開しやすくしました。現時点で10件のURLを監視中です。
provider "aws" { region = "us-east-1" alias = "us_east_1" } module "http-healthcheck" { source = "git@github.com:enechange/terraform-modules.git//http-healthcheck?ref=x.x.x" providers = { aws.us_east_1 = aws.us_east_1 } name = "prod-example" # ヘルスチェック名 url = "https://example.com/login" # 監視対象のURL sns_topic_arn = aws_sns_topic.in_us_east_1.arn # 通知先SNSトピックのARN }
まとめ
Route 53ヘルスチェックを使うことで、IPアドレス制限ありのURLでも、手軽に安く死活監視が実現できました。
また、ちょっとした工夫として、社内用Terraformモジュールを作成しました。おかげで、横展開がスムーズにできています。
Route 53ヘルスチェックをまだ試したことのない方は、簡単に設定・破棄できますので、気軽に試していただくことをお勧めします。