HashiCorpのConsul-Terraform-Sync(CTS)の一般提供が開始された。CTSでは、Consulに追加や削除が可能なサービスの形式で動作するTerraformモジュールとして、タスクを定義することが可能になる。
CTSは、ロードバランサプールやファイアウォールポリシの更新のようなネットワーク"導入後"タスクの自動化に重点を置いた、Network Infrastructure Automation(NIA)ソリューションの一部である。カスタムタスクを開発して、その他のアクティビティを自動化することも可能だ。
CTSはウォッチャ(watcher)を使って、Consulサービスカタログの更新を監視する。Consul Blocking Queriesがサポートされていれば使用するが、そうでない場合はポーリングにフォールバックする。それぞれの値は、ウォッチャの管理する独立したスレッドによって監視され、変更が検出されると、その値に対応するタスクが実行される。
タスクは、Terraformモジュールとして記述されたrunbookオートメーションで構成されており、動的にサービスデータを取得して、インフラストラクチャ更新情報に変換するアクションである。更新のプッシュにはドライバを使用する。初期状態でサポートされているのは、ローカルTerraform実行用ドライバである。
既製のTerraformプロバイダを使用すれば、Terraformモジュール開発の簡略化が可能になる。AWS、GCP、Azure、Heroku、DNSimple、CloudFlare、vSphereなど、さまざまなインフラストラクチャプラットフォーム用のプロバイダが用意されている。プロバイダの完全なリストはTerraformレジストリにある。適切なプロバイダを選択して、そのテンプレートリポジトリのクローンを出発点にすることができる。
クローンした後には、2つのプロジェクト要素が必要となる。ひとつはrootモジュールである。これにはmain.tf
という名称が推奨されており、必要なプロバイダと任意の追加リソースを定義する。もうひとつはサービス変数の定義であり、variables.tf
という名称のファイル内に記述する。この中には、rootモジュールがコンシュームするConsulカタログAPIの応答オブジェクトを記述した、オブジェクトのマップが含まれる。応答オブジェクトで使用しない属性については、省略することも可能だ。
以下の例は、サービス変数の使い方を示したものである。CTSオートメーション内で使用される場合、Consulサービスの検出情報が変更されると、ローカルファイル(consul_services.txt
)が更新される。以下の内容はmain.tf
ファイル内に記述する。
# Create a file with service names and their node addresses
resource "local_file" "consul_services" {
content = join("\n", [
for _, service in var.services : "${service.name} ${service.id} ${service.node_address}"
])
filename = "consul_services.txt"
}
必要なのは"service name"、"ID"、"node_address"だけなので、variables.tf
ファイルの内容は次のようになる。
variable "services" {
description = "Consul services monitored by Consul-Terraform-Sync"
type = map(
object({
id = string
name = string
node_address = string
})
)
}
秘匿性の高い情報のために、CTSでは、HashiCorpのシークレット管理ソリューションであるVaultからの情報伝達をサポートしている。先日リリースされたsensitive
属性を、入力変数とモジュール出力で使用することも可能だ。これがセットされると、TerraformがCLI出力値の編集を行うようになる。
Terraformレジストリには、多数のHashiCorpパートナが提供するCTSモジュールが公開されている。A10 Networks、AWS、Cisco、F5、VMWareなどがある。例えば、このcts-alb_listener-niaモジュールは、サーバがConsul内に登録されると、リスナルールとAWS Application Load Balancer用のターゲットグループを生成する。
リリース時点では、多くのエンタープライズ企業が所有するような大規模ネットワークアーキテクチャの処理に関しては、HashiCorpによる評価が継続中である。また、現時点ではTerraform OSSにのみ対応しているが、将来的にはTerraform EnterpriseやTerraform Cloudにも統合される予定である。CTSに関する詳細な情報は、ドキュメントあるいはHashiCorp Learnガイドにある。