【ITニュース解説】Day 55: Understanding Configuration Management with Ansible
2025年09月22日に「Dev.to」が公開したITニュース「Day 55: Understanding Configuration Management with Ansible」について初心者にもわかりやすく解説しています。
ITニュース概要
Ansibleで構成管理を始めるチュートリアル。AWS EC2にマスターと複数ノードを構築し、SSHキーやセキュリティを設定。マスターにAnsibleをインストール後、ノード接続用の鍵とインベントリを準備し、pingコマンドで疎通確認までを行う。
ITニュース解説
システムエンジニアを目指す上で、複数のコンピューターやサーバーの管理は避けて通れない課題だ。手作業で一台ずつ設定していくのは時間もかかり、ミスも発生しやすい。そこで役立つのが「構成管理」という考え方と、そのためのツール「Ansible」である。今回の記事では、Ansibleを使ってAWSクラウド上に用意した複数のサーバー(EC2インスタンス)を効率的に管理する基本的な手順が解説されている。
まず、Ansibleを使った構成管理を始めるために必要なのが、管理対象となるサーバー環境の準備だ。AWSのEC2インスタンスを仮想サーバーとして利用する。この時、サーバーに安全に接続するための「SSH鍵ペア」を作成する。これは、ユーザーがサーバーにアクセスする際に本人確認を行うための鍵のようなもので、秘密鍵は自分だけが大切に保管し、公開鍵はサーバー側に配置する。記事では、AWSコンソールやCLI(コマンドラインインターフェース)を使ってday55-keyという名前の鍵ペアを作成し、.pem形式の秘密鍵ファイルをダウンロードして安全に保管する手順が示されている。この秘密鍵は、後でAnsibleの管理元となるサーバー(マスター)から、管理対象となるサーバー(ノード)へ接続する際にも利用されるため、非常に重要だ。
次に、実際にAnsibleで管理するサーバー群を用意する。具体的には、Ansibleをインストールして操作する「マスターサーバー」を1台と、マスターサーバーから管理される「ノードサーバー」を2台、合計3台のEC2インスタンスを起動する。これらのインスタンスを起動する際には、先ほど作成したday55-keyという鍵ペアを全てに割り当てる。これにより、同じ秘密鍵で全てのサーバーにアクセスできるようになる。
サーバー間の通信を制御するために「セキュリティグループ」という仮想のファイアウォールを設定する。最初は、ユーザーがマスターサーバーにSSHでアクセスできるよう、自分のIPアドレスからのポート22(SSH)へのアクセスを許可するルールと、マスターサーバーからノードサーバーへSSHでアクセスするためのルールを設定する。記事では、初期段階で一時的に全てのIPアドレスからのSSHアクセスを許可する例も示されているが、これはセキュリティ上のリスクが高く、本番環境では推奨されない。より安全な運用のためには、マスターサーバーに専用のセキュリティグループを作成し、ノードサーバーのセキュリティグループには、そのマスターサーバーのセキュリティグループからのみSSHアクセスを許可するように設定を絞り込むことが重要だと説明されている。これにより、不必要な外部からのアクセスを防ぎ、セキュリティを強化できる。
サーバー環境が整ったら、いよいよマスターサーバーにAnsibleをインストールする。まず、ユーザーのパソコンからSSHコマンドを使ってマスターサーバーに接続する。接続後、マスターサーバー上でsudo apt updateやsudo apt install ansibleといったコマンドを実行し、Ansibleのパッケージを導入する。インストールが完了したらansible --versionで正しくインストールされたかを確認する。
Ansibleはマスターサーバー上で動作し、そこからSSH経由でノードサーバーにコマンドを実行する。このため、マスターサーバーがノードサーバーにSSH接続するための秘密鍵が必要となる。記事では、ユーザーのパソコンに保管されている秘密鍵ファイルを、SCPコマンドを使ってマスターサーバーの適切な場所にコピーする方法が示されている。コピー後には、chmod 600コマンドで秘密鍵のアクセス権限を厳しく設定し、他のユーザーが読み取れないようにすることがセキュリティ上極めて重要だ。ただし、秘密鍵のコピーは繊細な操作であり、本番環境ではAWS Systems Manager (SSM)などのより安全な方法が推奨されている。
次に、Ansibleにどのサーバーを管理対象とするかを教える「インベントリ」ファイルを作成する。記事では、hostsというファイルにノードサーバーのプライベートIPアドレス、接続ユーザー名(ubuntuなど)、そしてマスターサーバー上にコピーした秘密鍵のパスを指定する例が示されている。このファイルは、Ansibleが管理対象のサーバー群をどのように認識し、接続するかを定義する役割を果たす。インベントリが正しく設定されたかは、ansible-inventory --listコマンドで確認できる。
Ansibleがノードサーバーに接続して処理を実行するためには、ノードサーバーにPythonがインストールされている必要がある。ほとんどのモダンなOSイメージにはPythonが標準で含まれているが、もしインストールされていない場合は、sudo apt install python3などのコマンドで手動でインストールする必要があることも述べられている。
全ての準備が整ったら、Ansibleがノードサーバーと正しく通信できるかを確認するために「pingテスト」を実行する。マスターサーバー上でansible -i /home/ubuntu/ansible/hosts web -m pingというコマンドを実行すると、Ansibleはインベントリファイルに記載されたwebグループのノードサーバーに対して、疎通確認のためのpingリクエストを送信する。成功すれば、各ノードのIPアドレスに対してSUCCESS => {"ping": "pong"}というメッセージが返され、Ansibleがノードを管理できる状態になったことが確認できる。
もしテストで問題が発生した場合に備え、一般的なトラブルシューティングのヒントも提供されている。SSH接続の権限エラー、接続タイムアウト、Pythonが見つからないエラーなどが挙げられ、それぞれ鍵の権限確認、セキュリティグループ設定の見直し、Pythonのインストールといった解決策が示されている。
最後に、セキュリティとクリーンアップに関する重要な推奨事項が述べられている。テストで使った秘密鍵は不要になったら削除するか、本番環境ではSSMやAnsible Vaultといったより高度なセキュリティ対策を利用すべきであること、そしてテスト後に起動したEC2インスタンスなどのAWSリソースは忘れずに削除し、無駄な料金発生を防ぐことの重要性が強調されている。
このように、今回の記事では、AWSのEC2インスタンスを使い、Ansibleによる構成管理の基本をゼロからセットアップする具体的な手順が、セキュリティ上の注意点を含めて解説されており、システムエンジニアを目指す初心者にとって、実践的な学びとなる内容が網羅されている。