情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

Terraform連載 第9回:比較で広がるIaCの世界! ~TerraformとAnsible~

Terraform連載企画!今回はIaCツールの有名どころであるTerraformとAnsibleの違いについて触れていきます


terraform_banner_r2.png

はじめに

皆さんこんにちは。
これまで当ブログにてTerraform8回にわたって紹介してきました。
IaCという観点でみると、Terraform以外にも様々なIaCツールがあります。
IaCツールのカバー範囲を図に整理すると以下のようになります。
 ※図上は主要と考えているIaCツールに絞っています。

IaC2-5.png

図1 様々なIaCツールとカバー範囲
※ IaCとは何かは第1回記事をご確認ください

Pulumiは上記図に記載したIaCツールの中では知名度が低いですがCDK for Terraformと同様にDSLではなくプログラミング言語でIaCができる点で注目しています。
しかし今回は知名度の高いIaCツールを優先し、TerraformAnsibleについて取り上げたいと思います。

TerraformとAnsibleはどちらも良く聞くIaCツールかと思いますが、皆さんはこの違いをご存じでしょうか。
これらはどちらか一方が完全上位互換というわけではなく、得意分野も異なる為、使い分ける事でより高い効果を得られると考えます。

今回は第1回ぶり(約1年ぶり)の「IOWNデジタルツインプラットフォーム事業部(旧デジタルツイン事業部)」「フューチャーネットワーク事業部」のコラボ企画!
IaCツールの使い分けを観点にTerraformAnsibleについて紹介したいと思います。

目次

節名
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」を指定する事で、処理を実施します。

IaC2-1.png

図2 Ansibleの処理イメージ

Terraformはこれまでも当社ブログで触れてきていますが、改めて説明すると、Ansible同様エージェントレスでインフラの設定を行うビジネスソース(Business Source)のIaCツールとなります。

[参考] ビジネスソースについて
https://cloud.watch.impress.co.jp/docs/column/infostand/1524938.html


以降でAnsibleとTerraformの違いについて紹介します。

違い1 得意分野

良くあげられるAnsibleTerraformの違いに「得意分野」があげられます。

Terraform
はインスタンスや仮想マシンの作成といった、設定を入れる為の箱のプロビジョニングが得意です。
一方で、Ansibleはインスタンス内に設定するミドルウェアの設定等のその箱の中にコンフィギュレーション(設定投入)や設定変更が得意です。

IaC2-2.png

図3 TerraformとAnsibleの得意分野

違い2 アプローチの違い

「アプローチ」の違いも「得意分野」とあわせて、よくあげられます。

Terraformは「宣言型モデル」と呼ばれ、処理が終わった時に「こうなっていること」というような「あるべき状態」をソースコードで表現します。
一方のAnsibleは「手続き型モデル」と呼ばれ、処理が終わった時の状態を定義するのではなく、設定手順をソースコードで表現します。

IaC2-3.png

図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


(ベンダ純正Providerは存在しない)

-


Ansible
についてはCLI(コマンド)投入の他、netconfもサポートしており、プラットフォームも上記以外にも多くに対応しています。
対象プラットフォーム等は以下を確認ください。

[参考] Ansibleの対象プラットフォーム情報等について

https://docs.ansible.com/ansible/latest/collections/index.html#
https://docs.ansible.com/ansible/latest/collections/index_cliconf.html
https://docs.ansible.com/ansible/latest/collections/index_netconf.html

TerraformでもProviderにより一部対応しているプラットフォームもありますが、対応していても制限がある場合もあります。
上記表のNOSに向けたProvider情報は以下をご確認ください。

[参考] TerraformのProvider情報について

https://www.terraform.io/
https://registry.terraform.io/namespaces/CiscoDevNet
https://registry.terraform.io/namespaces/Juniper
https://registry.terraform.io/namespaces/aristanetworks


Terraform
が対応していない、あるいは制限により操作対象とできない場合はAnsibleが選択肢となります。
そのため、使い分けとしてTerraformでパブリッククラウドにてインスタンスを作成し、Ansibleで社内ルータの設定をする場合等にも使用できるかと思います。

IaC2-4.png

図5 Ansibleによるルータ設定ユースケース

違い4 主として扱うプロトコルについて

AnsibleとTerraformのそれぞれの操作対象次第で異なってくるところはありますが、Ansibleは基本的にはSSHを使用し、TerraformはHTTPを使用します。
これによりFW(ファイアウォール)に必要な設定や社内プロキシの影響有無などに違いが出る場合があります。

おわりに

今回はTerraformAnsibleの違いについて触れていきました。
どちらにも違った良さがある為、目的に応じてIaCツールを選ぶと良いと考えます。

本記事に関して何か質問やご意見ございましたら以下にご連絡ください。
ここまでご覧いただき、ありがとうございました。

Terraformの導入にあたってお悩みの方へ

terraform_banner_r2.png

連載シリーズ
Terraform連載
著者プロフィール

NTTテクノクロス株式会社
 ⅠOWNデジタルツインプラットフォーム事業部
  第三ビジネスユニット
   平川 裕弥

 フューチャーネットワーク事業部
  第一ビジネスユニット
   山口 佳輝