Continuous Validationを使った継続的なリソース監視
Terraformのヘルスチェック機能の1つであるCoutinuous Validationについて紹介したいと思います。
Continuous Validationをお使いになるには、Terraform Cloud PlusまたはTerraform Enterpriseのライセンスが必要です。
Continuous Validationは、Terraformで作成したリソースが適切な状態であるかを定期的にチェックする機能です。適切でない状態を検知した場合はTerraform Cloud上にFailedと表示されます。また、通知の設定をすることでメールやSlack等に通知することも可能です。ここで言っている「適切な状態」は、ユーザーがHCLを使って定義します。
本ブログでは、Continuous validationを有効にする方法、動作条件の定義方法について説明します。
Continuous validationの有効化
Continuous validationを使うにはワークスペースのHealth Assesmentsを有効にします。Health Assesmentsを有効にするとContinuous validationに加えてDrift detectionも使用できるようになります。
- Terraform Cloudにログインします。
- 設定対象のワークスペースに移動します。
- サイドメニューの [Settings] – [Health] をクリックします。
- Health Assessments の [Enable] を選択して [Save settings] をクリックします。
有効化の方法は、以下のページも合わせてご参照ください。
https://developer.hashicorp.com/terraform/cloud-docs/workspaces/health#enable-health-assessments
Continuous validation動作条件の定義
ここでは、冒頭で言っている「適切な状態」の定義方法を説明します。始めにcheckブロックを記述します。checkブロックには、0または1つのdata sourceブロックと1つ以上のassertを持ちます。
check "aws_instance_is_stpped"
data "aws_instances" "sample" {
instance_state_names = ["stopped"]
}
assert {
condition = length(data.aws_instances.sample.ids) == 0
error_message = format("Found stopped instance : %#v", data.aws_instances.sample.ids)
}
}
assertブロックにはconditionとerror_messageを定義します。「適切な状態」は、conditionに設定します。conditionで定義した条件が偽 (適切でない状態)になると、Failedと判定されerror_messageに定義したメッセージが出力されます。
上の例では、data "aws_instances" "sample" {}
がstoppedスタータスのインスタンスを検索します。conditionには「dataソースの aws_instancesのidsのインスタンス数が0である」と定義しています。つまり、stoppedスタータスのインスタンス数が0の場合は適切な状態であるということです。
stopped スタータスのインスタンスが1個以上になると、conditionの条件が偽になるため Failedと判定され、そのインスタンスIDがエラーメッセージに表示されます。
Continuous validationの適用例は、以下のページにも記載があるのでご参照いただければと思います。
https://www.hashicorp.com/blog/8-terraform-continuous-validation-use-cases-for-aws-google-cloud-and-azure
https://registry.terraform.io/providers/-/aws/latest/docs/guides/continuous-validation-examples
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/tfc-check-blocks
https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/google-continuous-validation
Validation結果の確認
特定のワークスペースのvalidation結果を見るには、ワークスペースのサイドメニューから [Health] – [Continuous Validation] をクリックします。
オーガニゼーション全体のvalidation結果を見るには、オーガニゼーションのサイドメニューから [Explorer] – [Workspaces with failed checks] をクリックします。
Continuous validation実行間隔
Health Assesmentsが動作した時に、Continuous validationおよびDrift detectionが動作します。
Health Assesmentsは以下の時に実行されます。
●ヘルスチェックを有効にした時
●Plan実行時
●上記2つのどちらかが動作した以後 4時間間隔 (ただし、PlanやApply等動作中のRunがない場合)
手動で Health Assessments を実行したい時は、ワークスペースのサイドメニューの [Health] – [Continuous Validation] をクリックし Continuous validation の右上の [Start health assessment] をクリックします。
https://developer.hashicorp.com/terraform/cloud-docs/workspaces/health#health-assessment-scheduling
今回ご紹介した本記事がお役に立てれば幸いです。