HashiCorpがConsul-Terraform-Sync(CTS)バージョン0.5のリリースを発表した。Consulに追加および削除の可能なサービスとして動作するTerraformモジュールを生成することで、共通的なネットワークタスクの自動化を可能にする。今回のリリースでは、既存タスクの変更を容易にする新しいセキュアAPIエンドポイント、新たなエコシステム連携、Consulのキーバリュー変更をトリガとするTerraformワークフローのサポートなどが追加されている。
CTSは、ロードバランサプールやファイアウォールポリシの更新といった、共通的な"デイ・ツー(day two)"ネットワークタスクの自動化を大きな目標とする、Network Infrastructure Automation (NIA)ソリューションの一部である。CTSは、ウォッチャ(watcher)を使用して、Consulサービスカタログの更新を監視する。監視対象の値それぞれに対して、ウォッチャプロセスが個別にスレッドを保持する。監視している値の変更が検出されると、それに依存するすべてのタスクが実行される仕組みだ。
今回のリリースでは、生成後のタスクの修正が従来より簡単になった。これまで、既存タスクを修正するためには、CTSプロセスを一度停止した上で、コンフィギュレーションファイルを修正し、CTSプロセスを再起動する必要があった。今回のリリースでは、タスクの生成、更新、削除、読み出しを行う4つの新しいAPIエンドポイントとCLIが導入されている。
例えば/task/:task_name
に対するGET
要求を、既存タスクの情報取得に使用することができる。タスクの生成は、以下のように、/task
に対するPOST
によって行うことが可能だ。
curl --header "Content-Type: application/json" \
--request POST \
--data @payload.json \
localhost:8558/v1/tasks
ルートにはオプションパラメータrun
が指定可能で、タスクを生成後すぐに実行する(now
)か、何もしない(no-op)モードで実行する(inspect
)かを選択することができる。タスクはJSONとして定義し、--data
パラメータとして送信する。上の例でのpayload.json
の内容は、次のようなものになる。
{
"task": {
"description": "Writes the service name, id, and IP address to a file",
"enabled": true,
"name": "task_a",
"providers": ["my-provider"],
"condition": {
"services": {
"names": ["web", "api"]
}
},
"module": "path/to/module"
}
}
4つの操作は、いずれも新しいCLIで実行することも可能である。タスクの生成であれば、"consul-terraform-sync task create -task-file=task_example.hcl
"をコールすることで実行できる。task_example.hclには、上記の例と同じようにタスク定義を記述しておく。
0.4リリースでは、タスクのコンフィギュレーションにmodule_input
ブロックが追加された(0.4ではこれをsource_input
と呼んでいた)。nodule_input
ブロックは、Terraform Moduleに提供する値やメタデータを格納したConsulオブジェクトを指定するものだ。最初のリリースでは、module_input
はスケジュールされたタスクでのみ設定可能であったが、今回のリリースでは、すべてのタイプのタスクでmodule_input
ブロックが使えるようになった。ひとつのタスクに複数のmodule_input
ブロックを設定することも、それぞれのブロックがユニークであれば可能だ。
例えば次のスケジュールタスクは、サフィックスとしてweb
を持つすべてのConsulサービスをクエリした上で、マッチしたサービスのメタデータをTerraformモジュールに提供する。
task {
name = "schedule_condition_task"
description = "execute every Monday using information from service names starting with web"
module = "path/to/module"
condition "schedule" {
cron = "* * * * Mon"
}
module_input "services" {
regexp = "^web.*"
datacenter = "dc1"
namespace = "default"
filter = "Service.Tags not contains \"prod\""
cts_user_defined_meta {
key = "value"
}
}
}
Consol KVとConsul KV module_input
ブロックを使用してサービス内の変更を監視し、その結果をConsul KVモジュール入力としてTerraformモジュールにすることも可能だ。この入力は単一のConsul KVエントリにも、指定したパスをプレフィックスとする任意のConsul KVエントリにも設定することができる。
今回のリリースでは、さらに、Cisco Secure Firewall Management Center (FMC)およびFortinet FortiManagerとのエコシステム連携が追加されている。いずれの連携機能も、新たなTerraformモジュールとして提供される。
CTSはTerraform OSS、Terraform Enterprise、Terraform Cloudのいずれでも使用することができる。リリースに関する詳細な情報はchange logに記載されている。CTSに関する詳細は、ドキュメントあるいはHashiCorp Learnガイドで確認して頂きたい。