【ITニュース解説】Day 59: Ansible Project – Deploying a Simple Web App with Nginx
2025年09月28日に「Dev.to」が公開したITニュース「Day 59: Ansible Project – Deploying a Simple Web App with Nginx」について初心者にもわかりやすく解説しています。
ITニュース概要
AnsibleでAWS EC2上に複数Ubuntuサーバーを用意し、Nginxの自動インストールとウェブページデプロイを行う。EC2インスタンス準備からAnsible設定、プレイブック作成、コンテンツ配置までの一連の流れで、複数サーバーへの効率的なウェブアプリ展開を実現した。
ITニュース解説
この記事では、システムエンジニアが複数のサーバーにWebアプリケーションを効率的にデプロイする方法として、Ansibleという自動化ツールとNginxというWebサーバーソフトウェアを使った具体的な手順を解説する。手作業で一台ずつ設定する手間を省き、エラーのリスクを減らし、繰り返し同じ作業を確実に行うための自動化の重要性がよくわかる内容だ。
まず、作業の土台となるサーバーの準備から始める。Amazon Web Services (AWS) のEC2というクラウドサービスを利用し、仮想サーバーを3台立ち上げる。これらのサーバーは、インターネット上に存在するコンピュータのようなものだ。今回はUbuntuというOSを搭載したサーバーを選択し、コストを抑えるために「t2.micro」のような小規模なタイプを選ぶのが一般的だ。重要なのは、これら3台のサーバーすべてに同じ「キーペア」と呼ばれる秘密の鍵を使って接続できるように設定することだ。この鍵がなければ、リモートでサーバーに安全にアクセスできないため、Ansibleが各サーバーに指示を出すことができなくなる。また、サーバーを識別しやすいように「ansible_host」「web1」「web2」といった名前(タグ)を付けておくと管理が楽になる。この3台のうち、1台はAnsibleの命令を出す「制御ノード」となり、残りの2台が実際にWebサイトを動かす「Webサーバー」となる。
次に、この制御ノードとなるサーバーにAnsibleをインストールする。まずは自分のパソコンから制御ノードにSSHという安全な方法でリモート接続する。接続後、Ubuntuでソフトウェアを管理するためのコマンド「apt」を使って、Ansibleを簡単にインストールできる。これで、この制御ノードから他のサーバーを操作できるようになるのだ。
Ansibleが他のWebサーバーに接続して作業を行うためには、その接続に必要な鍵を制御ノードに置いておく必要がある。そのため、自分のパソコンから、AWSのEC2インスタンスに接続する際に使った秘密鍵ファイルを制御ノードの安全な場所にコピーする。コピー後、その秘密鍵ファイルが他の人から読み取られたり変更されたりしないよう、「chmod 600」というコマンドを使ってアクセス権限を厳しく設定することが非常に大切だ。これはセキュリティの基本中の基本となる。
続いて、Ansibleにどのサーバーを管理対象とするかを教えるために、「インベントリファイル」を設定する。これはAnsibleの設定ファイルの一つで、具体的には制御ノードにある「/etc/ansible/hosts」というファイルを編集する。このファイルには、Webサーバーとなる2台のIPアドレス、ログインするユーザー名(今回は「ubuntu」)、そして先ほどコピーした秘密鍵ファイルの場所を記述する。例えば、「webservers」というグループを作り、その下に「web1」と「web2」という名前で各サーバーの情報を並べる。こうすることで、Ansibleは「webservers」グループに属するすべてのサーバーに対して、まとめて指示を出せるようになる。
いよいよAnsibleの自動化の本番である「Playbook」の作成だ。Playbookとは、Ansibleに実行させたい一連の作業内容を記述したファイルのこと。YAMLという形式で書かれる。最初のPlaybookでは、WebサーバーにNginxというWebサーバーソフトウェアをインストールする。ファイル名は「install_nginx.yml」とする。このPlaybookの中では、「webservers」グループに属するサーバーに対して、管理者権限(become: true)で、まずソフトウェアパッケージの情報を更新し、次にNginxをインストールする、という二つの「タスク」を記述する。これらのタスクは「apt」というAnsibleのモジュールを使って実行される。Playbookを作成したら、「ansible-playbook install_nginx.yml」というコマンドで実行するだけで、Ansibleが自動的にWebサーバー2台にNginxをインストールしてくれる。
Nginxのインストールが完了したら、次に実際にWebページをデプロイするPlaybookを作成する。「deploy_web.yml」というファイル名で新しいPlaybookを作り、ここでは制御ノード上に作成した簡単なHTMLファイル(「index.html」)を、WebサーバーのNginxがWebページとして公開する標準的なディレクトリ(「/var/www/html/」)にコピーするタスクを記述する。このコピー作業には「copy」というAnsibleモジュールを使う。まず、制御ノード上で「Welcome to my Ansible Web Project」という内容のHTMLファイルを作成する。そして、作成したPlaybookを「ansible-playbook deploy_web.yml」コマンドで実行すると、各WebサーバーにWebページがデプロイされる。
最後に、デプロイが成功したかを確認する。Webブラウザを開き、Webサーバー1とWebサーバー2のそれぞれ公開IPアドレスにアクセスしてみる。画面に「Welcome to my Ansible Web Project 🚀」というメッセージが表示されれば、NginxのインストールとWebページのデプロイがAnsibleによって成功したことになる。
このように、Ansibleを使うことで、複数のサーバーに対するソフトウェアのインストールやファイルの配置といった、通常であれば手作業で何回も繰り返さなければならない作業を、たった数行のPlaybookと一つのコマンドで自動化できる。これは、システムエンジニアが日々の運用で直面する手間を大幅に削減し、より複雑で重要な業務に集中するための強力な手段となる。