0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HCP Terraform Sentinel 活用ガイド

Posted at

HCP Terraform で Sentinel を利用する際に役立つ情報をまとめました。

文法等の理解に必要なドキュメント

下記の公式ドキュメントに、文法を理解する際に必要な情報があります。

Map や List が使える

Sentinel では、他のプログラミング言語に似た方法でデータ構造を扱えます:

import すれば追加の標準ライブラリが使える

import で使用できる標準ライブラリについても記載があり、例えば Base64 の変換については下記に記述があります。

この辺りの内容を参照していけば、実現したい検証ロジックを組み立てることができます。

また、http や json のライブラリもあるので、外部 API から得た値を処理することもできます。

plan 結果だけでなく、terraform ファイルの構成や state も import できる

tfconfig や terraform ファイルの構成、tfstate は state の内容を表しているので、こちらを活用した検査も実装できます。

具体的な記述を組み立てる際に確認する URL

下記に膨大なポリシー実装があるので、まずはこちらから必要なものが無いか確認するのが良さそうです。

上記リポジトリの README に記載がある通り、これらのポリシーは Terraform Registry に公開されているものがあるので、これを直接参照するのも良いですね。

この中に欲しいポリシーが無ければ独自実装していくことになるのかなと思います。
個人的には下記の実装が気に入っています。

検証のための関数を用意し、関数の中で問題があれば print() で詳細を出力し、関数の戻り値が true なら問題なし、false なら問題ありとします。
main = rule {} の中で対象の検証関数を呼び出すようにしておくと完成です。

実装イメージ.sentinel
validate_x = func() {
  validated = true
  ...
  if エラーの条件を満たすか {
    print("エラー理由")
    validated = false
  }
  ...
  return validated
}

main = rule {
    validate_x()
}

テスト実装に必要なドキュメント

下記に詳細が記載されています。

大まかには、テストを定義する .hcl ファイルを用意して、必要に応じてその中でモックを参照するような構成ですね。

モックの作成については、検証対象の環境でエラーになる構成で Plan 実行し、Download Sentinel mocks ボタンで得られたモックを取り込んでテストを記述する、という対応を繰り返すのが良さそうです。
モックのダウンロードについては下記に記載があります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?