BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース HashiCorp Consul-Terraform-Syncにタスク生成APIと新しい連携機能が追加

HashiCorp Consul-Terraform-Syncにタスク生成APIと新しい連携機能が追加

ブックマーク

原文(投稿日:2022/03/09)へのリンク

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ガイドで確認して頂きたい。

作者について

この記事に星をつける

おすすめ度
スタイル

BT