ECS のヘルスチェックの猶予期間内でも UnHealthyHostCount が記録される理由を教えてください

2023.02.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

障害検知のため ELB の UnHealthyHostCount メトリクスを監視するアラームを設定していますが、ECS のデプロイタイミングでアラーム状態になりました。
「ヘルスチェックの猶予期間」を設定しているので、デプロイタイミングのヘルスチェック失敗は記録されない認識でしたが、なぜアラーム状態になったのでしょうか。 アラーム状態になる理由と、デプロイタイミングでアラームを抑止する方法を教えてください。

どう対応すればいいの?

デプロイ期間中は CloudWatch アラームの無効化をご検討ください。

ヘルスチェックの猶予期間(healthCheckGracePeriodSeconds)は、ECS サービスがヘルスチェック結果を無視する期間となります。そのため、ヘルスチェックの猶予期間中も、ヘルスチェックは実施され、ヘルスチェック結果に応じて UnHealthyHostCount などの CloudWatch メトリクスも記録されます。

サービス定義パラメータ - Amazon ECS

healthCheckGracePeriodSeconds

…(中略)…

この間は、ECS サービススケジューラはヘルスチェックのステータスを無視します。

デプロイタイミングにヘルスチェック失敗が想定され、デプロイ中の CloudWatch アラームのアクションを抑止したい場合は、アクションの無効化をご検討ください。

CloudWatch アラームは一時的なアクションの無効化をサポートしており、無効化された状態ではアラーム状態になってもアクションは実施されません。そのため、デプロイ前に、CloudWatch アラームを無効化し、デプロイ完了後に、再度 CloudWatch アラームを有効化することで、アラーム状態への遷移によるアクションを抑止できます。

CloudWatch Alarm を有効化/無効化する方法 | DevelopersIO

なお、デプロイタイミングが決まっているなど、特定の期間だけアラームを抑止したい場合は、Metric Math 関数を利用した方法もご検討ください。

CloudWatch アラームのダウンタイム(特定期間の発報抑止)を Metric Math を使用して実現してみた | DevelopersIO

参考資料

アラームを無効または有効にするには、DisableAlarmActions および EnableAlarmActions API アクション、または AWS CLI の disable-alarm-actions および enable-alarm-actions コマンドを使用します。