Terraform連載 第9回:比較で広がるIaCの世界! ~TerraformとAnsible~
Terraform連載企画!今回はIaCツールの有名どころであるTerraformとAnsibleの違いについて触れていきます
Terraform連載
- 2024年11月12日公開
はじめに
皆さんこんにちは。
これまで当ブログにてTerraformを8回にわたって紹介してきました。
IaCという観点でみると、Terraform以外にも様々なIaCツールがあります。
IaCツールのカバー範囲を図に整理すると以下のようになります。
※図上は主要と考えているIaCツールに絞っています。
図1 様々なIaCツールとカバー範囲
※ IaCとは何かは第1回記事をご確認ください
Pulumiは上記図に記載したIaCツールの中では知名度が低いですがCDK for Terraformと同様にDSLではなくプログラミング言語でIaCができる点で注目しています。
しかし今回は知名度の高いIaCツールを優先し、TerraformとAnsibleについて取り上げたいと思います。
TerraformとAnsibleはどちらも良く聞くIaCツールかと思いますが、皆さんはこの違いをご存じでしょうか。
これらはどちらか一方が完全上位互換というわけではなく、得意分野も異なる為、使い分ける事でより高い効果を得られると考えます。
今回は第1回ぶり(約1年ぶり)の「IOWNデジタルツインプラットフォーム事業部(旧デジタルツイン事業部)」「フューチャーネットワーク事業部」のコラボ企画!
IaCツールの使い分けを観点にTerraformとAnsibleについて紹介したいと思います。
【目次】
節名 |
AnsibleとTerraformとは |
違い1 得意分野 |
違い2 アプローチの違い |
違い3 NW機器の設定の対応状態 |
違い4 主として扱うプロトコルの違い |
関連記事:
「Terraform連載 第1回:いまさら聞けない、IaCってなに?~Terraform、IaSQLの紹介~」
「Terraform連載 第2回:Terraform v1.5の紹介&活用方法について考えてみた」
「Terraform連載 第3回:Terraform v1.6のtestコマンドについてご紹介」
「Terraform連載 第4回:for_eachの使い方」
「Terraform連載 第5回:module(モジュール)の紹介」
「Terraform連載 第6回:Terraform v1.7 removedブロックの紹介」
「Terraform連載 第7回:importブロックはmoduleのリソースも取り込めるか?」
「Terraform連載 第8回:Terraformの管理スコープとしてiDRACをimportしてみた」
AnsibleとTerraformとは
まずは今回のテーマであるAnsibleとTerraformに関する概要を説明します。
Ansibleとはオープンソース(OSS)のIaCツールで、エージェントレスで複数の設定先に同じ設定を入れることが得意となります。
Ansibleでは設定したい内容を記載する「Playbook」と、設定先を記載する「Inventory」を指定する事で、処理を実施します。
図2 Ansibleの処理イメージ
Terraformはこれまでも当社ブログで触れてきていますが、改めて説明すると、Ansible同様エージェントレスでインフラの設定を行うビジネスソース(Business Source)のIaCツールとなります。
[参考] ビジネスソースについて https://cloud.watch.impress.co.jp/docs/column/infostand/1524938.html |
以降でAnsibleとTerraformの違いについて紹介します。
違い1 得意分野
良くあげられるAnsibleとTerraformの違いに「得意分野」があげられます。
Terraformはインスタンスや仮想マシンの作成といった、設定を入れる為の箱のプロビジョニングが得意です。
一方で、Ansibleはインスタンス内に設定するミドルウェアの設定等のその箱の中にコンフィギュレーション(設定投入)や設定変更が得意です。
図3 TerraformとAnsibleの得意分野
違い2 アプローチの違い
「アプローチ」の違いも「得意分野」とあわせて、よくあげられます。
Terraformは「宣言型モデル」と呼ばれ、処理が終わった時に「こうなっていること」というような「あるべき状態」をソースコードで表現します。
一方のAnsibleは「手続き型モデル」と呼ばれ、処理が終わった時の状態を定義するのではなく、設定手順をソースコードで表現します。
図4 宣言型モデルと手続き型モデルのイメージ例
この違いが何に影響するかというと、Terraformの場合、「あるべき状態」を管理している為、まとめて全ての設定を削除する(destroy指定)、といったことが可能です。
一方、Ansibleは処理の流れを指定している為、最終的な状態は管理しておらず、これまで設定したものを全て削除する、といった操作を実現するために削除のための処理を別に指定する必要があります。
なお、Ansibleには「手順自体」は何度実施しても同じ結果になる事を保証する「冪等性」という考え方があります。
これは例えば何度Ansibleの処理をしても特定バージョンのミドルウェアが入っていることを保証する(何度か処理をするうちに目的のミドルウェアが想定外の状態とならない)というイメージです。
手順自体の状態保証はしているが、全体の最終状態を管理しているわけではない為、一括削除する事はできないというところがポイントとなります。
※ Ansible内で使用する機能(モジュール)によっては冪等性を保証しないものもあります
違い3 NW機器への対応状況
IaCはネットワーク分野においてもインフラ構築の為に使用されています。
一方でネットワーク分野では、筆者の体感とはなりますがTerraformよりAnsibleの方がよく聞くように思います。
その理由はAnsibleはネットワーク機器用のモジュールが豊富の為と考えます。
以下に代表的なNOS(Network Operating System)への対応状況を記載します。
NOS |
Ansible |
Terraform |
備考 |
Cisco IOS |
〇 |
△ (IOS-XE等一部) |
Terraformを使う場合、操作対象機器がrestconfをサポートしている必要あり |
NX-OS |
〇 |
〇 |
Terraformを使う場合、操作対象機器がNX-API RESTをサポートしている必要あり |
Junos OS |
〇 |
〇 |
Terraformを使う場合、操作対象機器がnetconfをサポートしている必要あり |
EOS |
〇 |
× |
CloudEOSであればTerraformでも使用できる |
VyOS |
〇 |
△ |
- |
AnsibleについてはCLI(コマンド)投入の他、netconfもサポートしており、プラットフォームも上記以外にも多くに対応しています。
対象プラットフォーム等は以下を確認ください。
TerraformでもProviderにより一部対応しているプラットフォームもありますが、対応していても制限がある場合もあります。
上記表のNOSに向けたProvider情報は以下をご確認ください。
Terraformが対応していない、あるいは制限により操作対象とできない場合はAnsibleが選択肢となります。
そのため、使い分けとしてTerraformでパブリッククラウドにてインスタンスを作成し、Ansibleで社内ルータの設定をする場合等にも使用できるかと思います。
図5 Ansibleによるルータ設定ユースケース
違い4 主として扱うプロトコルについて
AnsibleとTerraformのそれぞれの操作対象次第で異なってくるところはありますが、Ansibleは基本的にはSSHを使用し、TerraformはHTTPを使用します。
これによりFW(ファイアウォール)に必要な設定や社内プロキシの影響有無などに違いが出る場合があります。
おわりに
今回はTerraformとAnsibleの違いについて触れていきました。
どちらにも違った良さがある為、目的に応じてIaCツールを選ぶと良いと考えます。
本記事に関して何か質問やご意見ございましたら以下にご連絡ください。
ここまでご覧いただき、ありがとうございました。
Terraformの導入にあたってお悩みの方へ
NTTテクノクロス株式会社
ⅠOWNデジタルツインプラットフォーム事業部
第三ビジネスユニット
平川 裕弥
フューチャーネットワーク事業部
第一ビジネスユニット
山口 佳輝