IaCツール一覧

IaCツールとは何か?

この記事の目的 : IaCツールとは何か?

IaCツールは5つに分類されます。

これらは全て異なる階層のツールですが、全てアプリケーションのインフラストラクチャー部分をコードで表現できるという共通点もあります。

この記事を参照してあなたが所属しているプロジェクトでどのレベルのIaCツールを使用すればいいのかを把握しましょう。

アドホックスクリプト

IaCを最も端的に表したツール。

あなたが一つ一つ手作業で入力しなければならないコマンド/クリックを全てスクリプトに表したタイプで、バッシュスクリプトはそのうちの一つです。

sudo apt-get update

sudp apt-get install -y php apache2

sudo git clone ...

sudo service apache2 start

具体例

デメリット

プログラミング言語を使用したスクリプトであるため、全てのタスクに対して完全完璧に記述する必要があります。加えて、あなたが書くコードは高度なレベルで設計された状態でなければなりません。

プログラミング言語であるため、それぞれのプログラマーがそれぞれの流儀で描いてしまう可能性があります。

これらの問題はApacheをインストールする程度であれば問題ありませんが、何台ものサーバーやデータベースを管理する場合には重要な問題になります。

Ad-hocスクリプトが向いている要素

Ad-hocスクリプトは小さなサーバーであれば問題なく運用できますが、少しでも大きくなる要素を含んでいるのであればjob単位で設計されたIaCツールを利用することをお勧めします。

構成管理ツール

すでに存在するサーバーに対してソフトウェアをインストールし管理するようにデザインされたツールが、構成管理ツールです。

次の例は、ApacheソフトウェアをサーバーにインストールするためのAnsibleのスクリプトです。

  - hosts: 10.91.77.16
    gather_facts: yes
    remote_user: root
    vars:
      ansible_password: p@ssword
    tasks:
      - name: 1.Apache2のインストール
       apt: #「apt」モジュールの使用
        name: apache2 #
        state: latest #(インストールされていて、最新であること)
      - name: 2.confファイルを配置する
        copy: #「copy」モジュールの使用
          src: apacher2.conf
          dest: /etc/apache2/apache2.conf
      - name: 3.トップページの配置
        copy: #「copy」モジュールの使用
          src: index.html
          dest: /var/www/index.html
      - name: 4.Apache2のサービスの有効
        service: #サービスモジュールの使用
          name: apache2
          state: started
          enabled: yes

bashスクリプトとかなり類似しているように見えますが、明確なアドバンテージがいくつかあります

メリット

構造化されたスクリプト

Ansibleは、ドキュメント、ファイル レイアウト、明確な名前のパラメーター、シークレット管理などに一貫性のある予測可能な構造を適用します。

すべての開発者はアドホック スクリプトをさまざまな方法で編成しますが、ほとんどの構成管理ツールには、コードを簡単にナビゲートできるようにする一連の規則が付属しています。

冪等性

一度だけ活用するアドホックスクリプトを作成することはそれほど難しくありません。しかし、何度も実行しても、どのサーバーでも正しく機能するアドホックスクリプトを作成することははるかに困難です。

例えば、本番のサーバーに一度フォルダーを作成した後、それがすでに存在しているのかどうかを常に覚えておかなければなりません。

コードを何回実行しても結果が変わらないことを、冪等性(べきとうせい)と呼びます。

Ansibleでは冪等性が保たれています。

具体的には一タスクごとにファイルの構成に変化があったかどうかを確認する機能が備わっており、「二回目以降の実行時にファイルがすでに作られている場合にどうするべきか」などをstatusというキーに渡しておくことができるのです。

分散システム対応

Ansibleは一つのローカルPCで動作するように設計されていますが、対象となるサーバーが分散システムでも動くように設定されています。

例えば、次のようにhostsが設定されていた場合

[webservers]
51.11.11.11
41.11.11.11
31.11.11.11
21.11.11.11
11.11.11.11

Ansibleのplaybookを次のように設定することで

- hosts: webservers
    roles:
        - webserver

複数台のサーバーにサービスを立てることができるのです。

具体例

  • Chef
  • Puppet
  • Ansible
  • SaltStack

サーバーテンプレートツール

構成管理ツールの代わりに成長してきているのが、サーバーテンプレートツールです。

OSのスナップショットを作成し、イメージとして保存することができます。

次の例は、Ansibleサーバーの状態をスナップショットで保存し、管理する手法です。

サーバーテンプレートツールにはいくつか種類があります。

サーバーテンプレートツールの種類

  • Virtual machines

VMWare, VirtualBoxParallelsなどの仮想化技術を使用した 完全なOSイメージのことです。 CPUやメモリーやハードデスクなども設定要素として含まれます。 OSとは完全に分離されており、CPUやメモリを大量に消費してしまいます。

PackerやVagrantなどを使用することで、VMイメージを構成管理要素として定義することができます。

  • Container

省略。Dockerのことです。

サンプルコード

FROM nginx:latest
COPY ./default.conf /etc/nginx/conf.d/default.conf
COPY ./index.html /var/www/index.html

具体例

オーケストレーションツール

サーバーのテンプレートとなるコードを使用してVMやコンテナを作成することは、bashスクリプトや構成管理ツールを使用することで達成可能です。

ですが、それらをマネジメントするにはどうすれば良いでしょうか。

オーケストレーションツールの特徴

オーケストレーションツールは以下の需要に応えることができます。

  • VMやコンテナをデプロイし、効率的にハードウェアの上で動かしたい。

  • ローリングデプロイや、ブルーグリーンデプロイ、カナリアリリースといった手法を用いて、アップデートを行いたい。

title:IaCツールは5種類存在する