はじめに
受託開発において、比較的小規模なフルスクラッチのWebシステムを開発する場合、インフラ関連の工数の中でWeb/アプリケーション(AP)サーバの構築に対する工数が比較的多くなってきます。
また、複数のプロジェクトにおいて、同じような作業を繰り返し実施する必要があり、手作業で構築を実施する場合、繰り返し実施する中で手順書が修正され続け、いわゆる「秘伝のタレ」となり再現性が失われるケースが多々あります。
本稿では、開発環境及び本番/ステージング環境において、Web/APサーバを構築する際に「再現性があり」「繰り返し利用が可能で」「短時間で構築が可能な」方法として、Ansible、Vagrant、Packerを用いた実践方法をご紹介します。
Ansible、Vagrant、Packerの役割
Ansible、Vagrant、Packerは既に多くの事例でも採用されているため、ご存知の方も多いと思います。
また、Dockerによるコンテナが広く利用されるようになってきていますが、受託システムの開発では、以前からあるシステムの機能エンハンスや保守・運用を行うことも多々あり、Ansible、Vagrant、Packerも多くの活用シーンがあるかと思います。
Ansible、Vagrant、Packerの役割について簡単に説明します。
Ansible
Ansibleは、Red Hat社によるデプロイメントツール、オーケストレーションツール、構成管理ツールです。YAML形式でサーバにて実行するタスクをPlaybookに記載しておき、実行が可能です。
何ができるのか端的に記載すると「開発時、デプロイ時にサーバのセッティングが自動で」できます(他にも使い方は多々ありますが、ここではこの用途に特化したご説明をします)。
Ansibleの優位点は多くのWebサイト[1]で紹介されていますので、ここでは詳細は割愛しますが、主要な優位点としては、以下の点が上げられます。
- PlaybookをYAML形式で記載できる(他の構成管理ツールでは、Rubyや独自言語が多い)。
- 冪等性の確保が比較的容易である。
- エージェントレスである(ansible-Playbook)。
運用に合わせて多様な使い方がありますが、ここではVagrantやPackerのプロビジョニングに特化した使用方法をご紹介します。
[1] Ansibleについて詳しく知りたい方は、例えば以下の記事をご覧ください。
Vagrant
Vagrantは、HashiCorp社による仮想環境の構築・管理・配布が可能なツールです。開発時に使用することがほとんどだと思いますが、ローカル環境で、VirtualBox等の仮想化ソフトウェアを用いてゲストOSを構築し、開発を容易にします。
Boxファイルと呼ばれるゲストOSの元となるファイルをレポジトリやローカルに配置しておき、そのBoxファイルを元にゲストOSの起動(ホストOSとの連携設定を含む)、プロビジョニング、停止、破棄等を制御します。
Packer
Packerは、Vagrantと同じくHashiCorp社によるマシンイメージを自動でビルドするツールです。さまざまな仮想環境やクラウドに対応しており、ここでご紹介するAWS EC2のAMIを作成する用途以外にも適用可能です。
プロビジョナーとしてAnsibleを利用可能であり、Vagrantで開発環境を作成するのと同じ要領でマシンイメージを自動で作成可能です。