
こんにちは。
クロスインダストリー第1本部クラウドコンサルティング2課の古屋です。
EC2インスタンスのスペックアップやコスト削減のためにインスタンスタイプを変更した際、それまで正常に動いていたAmazon CloudWatch アラーム(以下、CloudWatchアラーム)が突然「データ不足」になってしまった、、、という経験はありませんか?
「インスタンスタイプを変更しただけなのになぜ?」と疑問に思う方も多いはずです。 今回は、この事象がなぜ起こるのか、そしてどのように解決すればよいのかを解説していきます。
対象
- AWS初級レベルの方
- CloudWatchアラームの設定管理を行っている方
- EC2の運用保守を担当されている方
結論
CloudWatchアラームを作成済みのEC2インスタンスにおいて、インスタンスタイプを変更した際は、アラームの設定画面の中で、メトリクスを特定するための条件(ディメンション)を修正する必要があります。
事象:インスタンスタイプ変更後「データ不足」になる
例えば、以下のような手順を踏んだ際にこの事象が発生します。
1.t2.micro のEC2インスタンスを作成する。

2.t2.micro のEC2インスタンスに対して、「メモリ使用率が80%を超えたら通知」というCloudWatchアラームを作成する。

3.業務負荷の増加に伴い、インスタンスタイプを t2.medium に変更する。

4.インスタンス起動後、CloudWatchアラームのステータスを確認すると、アラーム状態でも正常状態でもなく、「データ不足」と表示される。

インスタンス自体は正常に稼働し、新しいメトリクスも収集されている(CloudWatch エージェントが動いている)はずなのに、アラーム側では「データが届いていない」と判断されてしまいます。
原因:メトリクスを識別する「ディメンション」の不一致
なぜデータ不足になるのか。その理由は、CloudWatchがメトリクスを特定するために使用する 「ディメンション」 にあります。
例えばCloudWatch エージェントの設定ファイル内で 「ディメンション」にインスタンスタイプを含んでいる 場合があります。

この場合、メモリ使用率のようなカスタムメトリクスでCloudWatchアラームを作成しようと思うとインスタンスIDに加えインスタンスタイプを選択することになります。
この状態でインスタンスタイプを t2.medium に変更すると、EC2から送られてくる新しいデータのディメンションは InstanceType: t2.medium に変わります。
しかし、既存のアラームは依然として 「InstanceIdが i-xxxxxxxx0631 かつ InstanceTypeが t2.micro」 のデータを監視し続けるため、「条件に合致するデータが見つからない=データ不足」となってしまうのです。
解決方法:アラーム設定の更新
解決策は非常にシンプルです。アラームの設定を新しいインスタンスタイプに合わせて修正します。
1.CloudWatchコンソールから対象のアラームを選択し、「編集」 をクリックします。
2.「メトリクスと条件の指定」セクションで、「InstanceType」 の値を、新しいタイプ(例:t2.medium)に変更します。

3.設定を保存します。
数分待つとアラームが新しいデータを正しく拾い始め、「OK」または「アラーム」状態に復帰します。
まとめ
EC2インスタンスのタイプ変更は頻繁に行われる運用作業ですが、付随するCloudWatchアラームの見落としは意外と多い落とし穴です。
- インスタンスタイプを変えたらアラームも確認!
- 「データ不足」になったらディメンションの不一致を疑う!
これを意識するだけで、監視が漏れてしまうリスクを未然に防ぐことができます。 同様の事象でお困りの方の助けになれば幸いです。