STAGE 06 / 自動化とSDN

Ansible・Terraform・Puppet・Chef

考えてみよう

100台のスイッチに同じVLAN設定を投入したいとき、1台ずつCLIにログインして手打ちする以外に、どんな方法があるでしょうか?

これまで学んだREST APIやJSONは「機械同士が会話する仕組み」でした。それを使って実際に設定を配る「道具」にはどんなものがあるか、少し考えてから読み進めてください。

構成管理ツールは「大量の作業を代行する専門スタッフ」

ここまで学んだREST APIやJSONは、いわば「言葉」でした。今回学ぶAnsible・Terraform・Puppet・Chefは、その言葉を使って実際に大量の機器へ設定を配る「専門スタッフ」です。引っ越し業者に例えるなら、指示書(Playbookやコード)を渡すだけで、何十軒もの家に同じ手順で荷物を運んでくれるようなものです。

これらのツールは大きく2つのグループに分かれます。エージェントレス型(Ansible)と、エージェント型(Puppet・Chef)です。エージェントとは、管理対象の機器に常駐させておく小さな管理用ソフトのことです。

Ansible:エージェントレスでYAMLのPlaybook

Ansibleはエージェント不要で動作するのが最大の特徴です。管理対象の機器にソフトをインストールする必要がなく、SSHなどの標準的な仕組みだけで接続し、設定を配布します。ネットワーク機器のように、自由にソフトをインストールできない機器が多い環境と相性がよいのはこのためです。

Ansibleの指示書はPlaybookと呼ばれ、YAMLという人間にも読みやすい形式で書きます。「この機器に、この状態になってほしい」という宣言型(後述)の考え方で記述するのが基本です。

- name: VLAN10を作成する
  hosts: switches
  tasks:
    - name: create vlan
      ios_vlan:
        vlan_id: 10
        name: SALES

Terraform:宣言型のIaC

Terraformは、インフラの構成をコードとして管理するIaC(Infrastructure as Code)の代表的なツールです。Terraformも宣言型、つまり「最終的にこうあってほしい」という状態をコードで書き、ツール側が現状との差分を判断して必要な変更だけを実行します。手順を1つずつ書く「手続き型」とは対照的な考え方です。クラウド上の仮想リソース(サーバーやネットワーク)を構築する場面でよく使われます。

Puppet・Chef:エージェント型

PuppetChefは、管理対象の機器にエージェントをインストールしておき、そのエージェントが定期的に管理サーバーと通信して、設定が正しい状態を保っているかを確認・修正する仕組みです。Puppetは独自の宣言的な言語、ChefはRubyをベースにした記述で構成を定義します。どちらも古くからサーバー管理の現場で使われてきたツールです。

4ツールの比較表

ツールエージェント記述言語考え方
Ansible構成管理エージェントレスYAML(Playbook)宣言型が中心
TerraformIaC(インフラ構築)エージェントレスHCL宣言型
Puppet構成管理エージェント型独自DSL宣言型
Chef構成管理エージェント型Ruby手続き型寄り
確認問題

ネットワーク機器のようにソフトウェアを自由にインストールしにくい環境で、構成管理ツールを導入するとき最も相性がよいのはどれでしょう?

答えを見る

答えはAnsibleです。Ansibleはエージェントレスで動作し、管理対象の機器に専用ソフトをインストールする必要がありません。SSHなどの標準的な接続方式だけで設定を配布できるため、ネットワーク機器との親和性が高いとされています。

試験でのポイント

CCNAでは、Ansible=エージェントレス・YAML・Playbook、Puppet/Chef=エージェント型、Terraform=IaC・宣言型という組み合わせを整理して覚えておくことが重要です。特に「エージェントが必要かどうか」はよく問われる引っかけポイントで、Ansibleだけがエージェントレスである点を混同しないようにしましょう。また、宣言型(最終状態を書く)と手続き型(手順を書く)の違いも概念として押さえておくと、初見のツール名が出てもどちらの系統か推測しやすくなります。

確認問題

「最終的にどうなってほしいか」という状態をコードで記述し、ツールが現状との差分を判断して変更を適用する考え方を何と呼ぶでしょう?

答えを見る

答えは宣言型です。手順を1つずつ順番に指定する手続き型とは対照的に、宣言型では望ましい最終状態だけを定義します。Ansible・Terraform・Puppetはいずれも宣言型の考え方を中心に据えたツールです。

ゆみちゃん
ゆみ

Ansibleはエージェントレスでネットワーク機器と相性がいい、Terraformは宣言型IaCの代表格、Puppet・Chefはエージェント型。ツール名と特徴のセットで覚えておけば試験は怖くない。次はいよいよ自動化と運用の総仕上げドリルだよ。