IaCツールとは何か?
この記事の目的 : IaCツールとは何か?
IaCツールは5つに分類されます。
- Ad hocスクリプト
- 設定変更ツール
- サーバーテンプレートツール
- オーケストレーションツール
- プロビジョニングツール
これらは全て異なる階層のツールですが、全てアプリケーションのインフラストラクチャー部分をコードで表現できるという共通点もあります。
この記事を参照してあなたが所属しているプロジェクトでどのレベルの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, VirtualBoxやParallelsなどの仮想化技術を使用した 完全な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
具体例
- Docker
- Packer
- Vagrant
オーケストレーションツール
サーバーのテンプレートとなるコードを使用してVMやコンテナを作成することは、bashスクリプトや構成管理ツールを使用することで達成可能です。
ですが、それらをマネジメントするにはどうすれば良いでしょうか。
オーケストレーションツールの特徴
オーケストレーションツールは以下の需要に応えることができます。
title:IaCツールは5種類存在する