😸

CloudWatch Alarmの難しさ

2024/12/24に公開

以下では、Application Load Balancer(ALB)を使ってEC2インスタンスを監視するときに、どんなポイントがあるのかを、ゆる〜くお話ししていきます。全体の流れや設定するサービスはいろいろあるんですが、正直なところ、CloudWatch Alarmの設定だけは公式ドキュメントをしっかり読んだ方がいい、というのが結論です。他の要素は実はそんなに難しくないのでご安心ください。


全体像をざっくりイメージ

  1. ALB

    • いわゆる「入口」で、リクエストを受け止めてEC2インスタンス(ターゲットグループ)に振り分けます。
    • 正常性チェックでヘルシーなインスタンスだけにトラフィックを送る頼れるやつ。
  2. EC2インスタンス

    • ALBからのリクエストを実際に処理するコンピュートリソースです。
    • CPU使用率やネットワークなどのメトリクスはCloudWatchで取得できます。
  3. CloudWatch Alarm

    • このメトリクスが一定の閾値を超えたら「アラーム!」となる仕組み。
    • SNS(通知)やLambdaなどに連絡を飛ばしてくれます。
  4. SNS(Discord通知)

    • アラームが鳴ったら「通知するよ」と教えてくれるサービスです。
    • Discord連携ならWebhook経由でチャットルームにピンポーンとお知らせできます。
  5. Lambda

    • アラーム発火時に、「EC2を再起動してくれ〜」とか「追加でこんな処理して〜」みたいなカスタムアクションを実行できます。

1. ポリシー設定はそこまで難しくない

AWSサービス同士を連携させるには、IAMポリシーという権限設定が必要になりますが、これはドキュメントやAWSコンソールでの案内どおりに進めていけばOK。

  • EC2からCloudWatchへメトリクスを送る権限
  • SNSに通知を送る権限
  • Lambdaが何を操作できるか…など

一度慣れてしまえばさほど苦戦しません。割と「これが必要だよ」「これは付けちゃダメだよ」みたいなガイドがあるので、それに従うだけです。


2. LambdaによるEC2再起動もさほど難しくない

EC2インスタンスが不調になったら、自動で再起動してほしい!ということ、よくありますよね。

  • Lambda関数を作って「EC2インスタンスを再起動する」コードを書く
  • CloudWatch Alarmで、「アラーム時にLambdaを呼び出す」と設定する

これだけで、モニターしてるメトリクスの閾値を超えたらLambdaが呼ばれて、自動でEC2を再起動してくれます。サンプルコードも結構転がっているので、あまり身構えなくて大丈夫ですよ。


3. SNS(Discord通知)も意外とカンタン

アラームが発生したら、みんなで使っているDiscordに「大変だ!」とアナウンスしたい場合は、SNSを介して通知させるのが王道ルートです。

  • SNSのトピックを作る
  • そのトピック宛にメールを送る or LambdaでWebhookを叩く

Discordに直接つなぐイメージが湧かないかもしれませんが、Webhookを作って、そのURL宛にSNS(またはLambda)から情報を送ってあげれば大丈夫です。WebhookにJSONデータをポストするだけなので、案外シンプルだったりします。


4. CloudWatch Alarmだけは公式ドキュメントを熟読推奨!

ここが本日のメインディッシュ。ALB×EC2監視の設定を組み合わせる上で、一番つまずきやすいのはCloudWatch Alarmの設計です。

  • どのメトリクスに対してアラームを仕掛けるか
    • ALBの4XX/5XXエラー?EC2のCPU使用率?ネットワーク?
  • どんな閾値で何秒間超えたらアラームにするか
    • 80%超えたら即アラーム?5分連続したらアラーム?
  • 統計や期間の設定
    • AverageSumMinimum? どれを取るのがベスト?
    • Periodは1分?5分?
  • Auto Scalingと連携したい場合のシナリオ
    • CPUが80%超えが3回続いたらインスタンス増やす…など

これらを誤設定すると、アラームが鳴りっぱなしになったり、逆に鳴ってほしいタイミングで鳴らなかったり、ハラハラさせられます。
公式ドキュメントには細かい設定例や推奨値などが載っているので、ぜひしっかり読んでおきましょう。慣れると「なるほど、こうすればいいのか!」と見えてきますよ。


まとめ

  • ポリシー設定: AWSサービス同士の連携権限を付けるだけなので、それほど難しくないです。
  • LambdaによるEC2再起動: コードを書いてアクションを紐づけるだけなので、思ったより簡単です。
  • SNS(Discord通知): Webhookやメール通知の設定をちょっとがんばればスムーズに連携できます。
  • CloudWatch Alarm: メトリクス選びや閾値、連続回数、Auto Scaling連携など考慮点が多く、ここだけは公式ドキュメントでじっくり勉強しましょう!

ALBでEC2インスタンスを監視する仕組みは、全体をざっくり掴んで、順番にサービスを設定していけばそんなに怖くありません。最大のポイントはCloudWatch Alarm。ここをきちんと設定できれば、後々の運用トラブルをグッと減らせます。

まずは小さなテスト環境を作ってアラームを発火させてみたり、Discordへの通知がちゃんと届くか試してみると、すんなり理解できるはずですよ。ぜひトライしてみてくださいね!

Discussion