HCP Terraform で Sentinel を利用する際に役立つ情報をまとめました。
文法等の理解に必要なドキュメント
下記の公式ドキュメントに、文法を理解する際に必要な情報があります。
Map や List が使える
Sentinel では、他のプログラミング言語に似た方法でデータ構造を扱えます:
- Map: https://developer.hashicorp.com/sentinel/docs/language/maps
- List: https://developer.hashicorp.com/sentinel/docs/language/lists
import すれば追加の標準ライブラリが使える
import で使用できる標準ライブラリについても記載があり、例えば Base64 の変換については下記に記述があります。
この辺りの内容を参照していけば、実現したい検証ロジックを組み立てることができます。
また、http や json のライブラリもあるので、外部 API から得た値を処理することもできます。
plan 結果だけでなく、terraform ファイルの構成や state も import できる
tfconfig や terraform ファイルの構成、tfstate は state の内容を表しているので、こちらを活用した検査も実装できます。
具体的な記述を組み立てる際に確認する URL
下記に膨大なポリシー実装があるので、まずはこちらから必要なものが無いか確認するのが良さそうです。
上記リポジトリの README に記載がある通り、これらのポリシーは Terraform Registry に公開されているものがあるので、これを直接参照するのも良いですね。
この中に欲しいポリシーが無ければ独自実装していくことになるのかなと思います。
個人的には下記の実装が気に入っています。
検証のための関数を用意し、関数の中で問題があれば print()
で詳細を出力し、関数の戻り値が true なら問題なし、false なら問題ありとします。
main = rule {}
の中で対象の検証関数を呼び出すようにしておくと完成です。
validate_x = func() {
validated = true
...
if エラーの条件を満たすか? {
print("エラー理由")
validated = false
}
...
return validated
}
main = rule {
validate_x()
}
テスト実装に必要なドキュメント
下記に詳細が記載されています。
大まかには、テストを定義する .hcl
ファイルを用意して、必要に応じてその中でモックを参照するような構成ですね。
モックの作成については、検証対象の環境でエラーになる構成で Plan 実行し、Download Sentinel mocks
ボタンで得られたモックを取り込んでテストを記述する、という対応を繰り返すのが良さそうです。
モックのダウンロードについては下記に記載があります。