BT

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

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Consul-Terraform-Syncでネットワーク共通タスクの自動化が可能に

Consul-Terraform-Syncでネットワーク共通タスクの自動化が可能に

原文(投稿日:2021/04/04)へのリンク

HashiCorpのConsul-Terraform-Sync(CTS)の一般提供が開始された。CTSでは、Consulに追加や削除が可能なサービスの形式で動作するTerraformモジュールとして、タスクを定義することが可能になる。

CTSは、ロードバランサプールやファイアウォールポリシの更新のようなネットワーク"導入後"タスクの自動化に重点を置いた、Network Infrastructure Automation(NIA)ソリューションの一部である。カスタムタスクを開発して、その他のアクティビティを自動化することも可能だ。

CTWワークフローのハイレベルアーキテクチャ

CTSワークフローのハイレベルアーキテクチャ図(提供:HashiCorp)

CTSはウォッチャ(watcher)を使って、Consulサービスカタログの更新を監視する。Consul Blocking Queriesがサポートされていれば使用するが、そうでない場合はポーリングにフォールバックする。それぞれの値は、ウォッチャの管理する独立したスレッドによって監視され、変更が検出されると、その値に対応するタスクが実行される。

タスクは、Terraformモジュールとして記述されたrunbookオートメーションで構成されており、動的にサービスデータを取得して、インフラストラクチャ更新情報に変換するアクションである。更新のプッシュにはドライバを使用する。初期状態でサポートされているのは、ローカルTerraform実行用ドライバである。

既製のTerraformプロバイダを使用すれば、Terraformモジュール開発の簡略化が可能になる。AWSGCPAzureHerokuDNSimpleCloudFlarevSphereなど、さまざまなインフラストラクチャプラットフォーム用のプロバイダが用意されている。プロバイダの完全なリストは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 NetworksAWSCiscoF5VMWareなどがある。例えば、このcts-alb_listener-niaモジュールは、サーバがConsul内に登録されると、リスナルールとAWS Application Load Balancer用のターゲットグループを生成する。

リリース時点では、多くのエンタープライズ企業が所有するような大規模ネットワークアーキテクチャの処理に関しては、HashiCorpによる評価が継続中である。また、現時点ではTerraform OSSにのみ対応しているが、将来的にはTerraform EnterpriseTerraform Cloudにも統合される予定である。CTSに関する詳細な情報は、ドキュメントあるいはHashiCorp Learnガイドにある。

この記事に星をつける

おすすめ度
スタイル

BT