読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます。新機能の詳細をご覧ください。
GruntworkはGoのフレームワークであるTerratestをオープンソース化した。Terratestは、利用して、インフラストラクチャに対する自動テストを記述ことができる。このライブラリはTerraformとPackerをサポートしている。
TerratestはInfrastructure as Code(IAC)ライブラリをメンテナンスするために、Gruntworkで内部的に開発された。IACライブラリは、AWS上のインフラ管理のための、Terraform、Python、Go、bashをベースとしたツールのリポジトリである。IACは有償のGruntworkユーザが利用できる。
Terratestでテストを書くには、Goの組み込みのパッケージテストメカニズムを使う必要がある。テスト実行は、サーバのような実際のインフラストラクチャコンポーネントを作成し、アプリケーションをデプロイし、Terratestツールを使用して期待する動作となるかを検証する。テストの終わりに、Terratestは、JUnitのteardownメソッドと同じように、Goの遅延メカニズムを使ってアプリをアンデプロイし、リソースをクリーンアップできる。
Terratestは、毎回ゼロから作成するのではなく、既存のインフラストラクチャデプロイで実行できるか?ツールwikiによると、環境に望ましくない変化をもたらす可能性があるため、それを推奨していない。ただし、複雑なインフラストラクチャトポロジを持ち、テストを実行するための完全に新しいセットアップを作成することを望まないチームでは、その方針に従うのが難しい場合がある。名前空間と呼ばれる機能は、一意の識別子を使用してリソースに独立性を持たせることができる。ここでの名前空間は、コンポーネントにラベルを付けることによってコンポーネントに独立性を持たせるという一般的に理解されている意味ではなく、リソースに対して一意の識別子を保証し、テストフレームワークで生成された識別子を持つリソースを、テスト用にのみ使うという意味である。
Gruntworkの共同設立者であるYevgeniy Brikman氏は、Terratestを開発するためにGoを選んだ理由を説明している。
GoはDevOpsの世界において共通語となっているので、妥当な選択だと思います。PythonはDevOps領域のこの種のライブラリに対して私たちが考えていた他の唯一の言語ですが、私たちはGoをGruntworkの他の場所で使っています。そのため、Goを選択するのは妥当でしょう。
TerratestがInSpecやServerSpecのような他のツールとどのように比較されているかに対して、Brikman氏は次の通り述べた。
ほとんどのspecツールは、単一のサーバまたはリソースのプロパティのチェックに重点を置いています。たとえば、httpdがインストールされ、実行されていますか?Terratestは、エンドツーエンドの受け入れスタイルのテスト向けです。ユーザは、実環境(AWSなど)で実際のインフラストラクチャをデプロイし、インフラストラクチャが実際に期待どおりに動作するかどうかをテストします。
Terratestには、期待される応答のURLをチェックしたり、Gitの現在のブランチ名をフェッチするといったタスクを行うツールが付属している。Consul、Vault、Nomad向けのTerraformモジュールには、それらのテストがTerratestの例としてある。Terratestのその他の機能として、短期間の実行テスト(長期間実行可能なインフラストラクチャテストには有効ではない)と、期待されるエラーをテストするような典型的なテストの抽象化が必要となるCIシステム向けの代替方法がある。開発時のテスト時間を短縮するため、Terratestはテストを「ステージ」に分割し、環境変数を使用してステージをスキップできる。
Rate this Article
- Editor Review
- Chief Editor Action