クラウド

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も使用できるようになります。

  1.  Terraform Cloudにログインします。
  2.  設定対象のワークスペースに移動します。
  3.  サイドメニューの [Settings] – [Health] をクリックします。
  4.  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

今回ご紹介した本記事がお役に立てれば幸いです。

この記事に関連する製品・サービス