
Ansibleをコントロールノードにインストールする手順と、自動構築の基本操作を徹底解説
Red Hatが開発したオープンソースのIT自動化ツール「Ansible(アンシブル)」は、インフラ構築、構成管理、アプリケーションのデプロイ、オーケストレーションなど、様々なITプロセスを自動化するために使用されます。
本記事では、そんなAnsibleをコントロールノードにインストールし、AWS上に構築したインフラを自動管理する方法を解説します。
Terraformでリソースを作成し、Ansibleを活用して効率的に設定を適用する基本操作も実践例とともに丁寧に説明しますので、ぜひご覧ください。
TerraformとAnsibleを連携するメリット

TerraformとAnsibleは、インフラ構築と構成管理を効率化するために非常に相性の良いツールです。
まず、Terraformは、インフラストラクチャをコード化(Infrastructure as Code, IaC)するためのツールです。Terraformを使用すると、インフラのコード化によりリソースの作成・管理を自動化できます。また、terraform plan コマンドで変更内容を事前に確認できるため、安全性が高まります。
Ansibleは、サーバーやアプリケーションの構成管理、設定適用、デプロイを自動化するためのツールです。Terraformがリソースを作成した後、Ansibleを使用することで以下のような設定を適用できます。
- パッケージのインストール(例:Apache、MySQLなど)
- 構成ファイルの配布(例:/etc/httpd/httpd.conf)
- サービスの管理(例:起動・停止・再起動)
- セキュリティパッチの適用
Terraformはリソース作成に特化し、Ansibleはその上で実行される構成管理に特化しているため、2つのツールを組み合わせることで効率的なインフラ管理が可能になります。
1. 事前準備
Ansibleを使ってAWS上にリソースを自動構築するためには、いくつかの事前準備が必要です。
- Terraformインストール
- AWS CLIのセットアップ
- SSHキーの作成
それぞれの設定方法を解説します。
Terraformがインストールされていること
Terraformを使ってAWSリソースを構築するために、Terraformがローカル環境にインストールされている必要があります。以下のコマンドでインストール済みか確認してください。
terraform -v |
Terraformがインストールされていない場合はこちらの記事をご覧ください。
AWSアカウントとIAMユーザーの設定
AWSリソースを構築するためには、AWSアカウントと適切なIAMユーザーの設定が必要です。
- AWSマネジメントコンソールにログイン
- 「IAMサービス」を開き、新しいIAMユーザーを作成
- 必要なポリシーを付与します:AmazonEC2FullAccess、AmazonVPCFullAccess
- アクセスキーとシークレットキーを発行し、これをAWS CLIで使用
AWS CLIのセットアップ
TerraformやAnsibleからAWSリソースを管理するために、AWS CLIをインストールし、設定を行います。以下のコマンドでAWS CLIをインストールします(Linux/Macの場合)
curl “https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip” -o “awscliv2.zip” unzip awscliv2.zip sudo ./aws/install |
インストール後は以下のコマンドで設定を行います
aws configure |
入力が求められる情報
- アクセスキーID
- シークレットアクセスキー
- デフォルトリージョン(例:ap-japaneast-1)
SSHキーが作成済みであること
AWS EC2インスタンスに接続するためのSSHキーを作成します。以下のコマンドを実行し、新しいSSHキーを作成してください。
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa |
作成した公開鍵(~/.ssh/id_rsa.pub)は、Terraformを使用してEC2インスタンスに登録します。
今回Terraformで構築するAWSリソース
今回、Terraformで構築するAWSリソースは以下のとおりです。これらのリソースを作成するためのコードをterraformで記述します。
VPCとサブネット
- VPC(Virtual Private Cloud): AWSリソースを配置するためのネットワーク基盤。
- サブネット: VPC内に構築されるネットワークセグメント。
インターネットゲートウェイ
- EC2インスタンスがインターネットに接続できるようにするためのリソース。
セキュリティグループ
- ポート22(SSH): EC2インスタンスにSSH接続を許可。
- ポート80(HTTP): WebサーバーへのHTTPアクセスを許可。
EC2インスタンス
- 1台目(コントロールノード): Ansibleをインストールし、管理操作を行うノード。
- 2台目(対象ノード): Ansible Playbookを適用する対象のノード。
SSHキーペアの登録
- ローカルで作成済みのSSH公開鍵をAWSに登録し、EC2インスタンスに使用します。
TerraformでAWSリソースを作成する方法
フォルダにmain.tfファイルを作成し、VScodeでファイルを開きます。そして、ファイルに以下のコードを記述(コピペでも可)してください。
main.tf
# プロバイダーの設定 provider “aws” { region = “ap-northeast-1” # 東京リージョン } # VPCの作成 resource “aws_vpc” “main” { cidr_block = “10.0.0.0/16” tags = { Name = “main-vpc” } } # サブネットの作成 resource “aws_subnet” “main” { vpc_id = aws_vpc.main.id cidr_block = “10.0.1.0/24” } # インターネットゲートウェイの作成 resource “aws_internet_gateway” “main” { vpc_id = aws_vpc.main.id } # ルートテーブルの作成 resource “aws_route_table” “main” { vpc_id = aws_vpc.main.id route { cidr_block = “0.0.0.0/0” # 全ての宛先を gateway_id = aws_internet_gateway.main.id # インターネットゲートウェイにルーティング } } # サブネットにルートテーブルを関連付け resource “aws_route_table_association” “main” { subnet_id = aws_subnet.main.id route_table_id = aws_route_table.main.id } # セキュリティグループの作成 resource “aws_security_group” “main” { vpc_id = aws_vpc.main.id ingress { from_port = 22 to_port = 22 protocol = “tcp” cidr_blocks = [“0.0.0.0/0”] # SSH許可 } ingress { from_port = 80 to_port = 80 protocol = “tcp” cidr_blocks = [“0.0.0.0/0”] # HTTP許可 } egress { from_port = 0 to_port = 0 protocol = “-1” cidr_blocks = [“0.0.0.0/0”] # 全てのアウトバウンドを許可 } } # SSHキーペアの登録 resource “aws_key_pair” “default” { key_name = “my-key” # キーペア名 public_key = file(“~/.ssh/id_rsa.pub”) # ローカルの公開鍵を指定 } # EC2インスタンス(コントロールノード)の作成 resource “aws_instance” “controller” { ami = “ami-075cc63e37ba74823” # Amazon Linux 2 AMIのIDを指定 instance_type = “t2.micro” key_name = aws_key_pair.default.key_name # 登録したキーペアを使用 subnet_id = aws_subnet.main.id # サブネットを指定 vpc_security_group_ids = [aws_security_group.main.id] # VPCセキュリティグループを指定 associate_public_ip_address = true # パブリックIPを割り当てる tags = { Name = “controller-node” } } # EC2インスタンス(対象ノード)の作成 resource “aws_instance” “target” { ami = “ami-075cc63e37ba74823” instance_type = “t2.micro” key_name = aws_key_pair.default.key_name subnet_id = aws_subnet.main.id vpc_security_group_ids = [aws_security_group.main.id] associate_public_ip_address = true tags = { Name = “target-node” } } |
Terraformコードを作成したら、以下のコマンドを順に実行してAWSリソースを構築します。
初期化
Terraformを初期化して、必要なプラグインをダウンロードします。
terraform init |
プランで確認
Terraformで作成するリソースを確認します。
terraform plan |
リソースの作成
以下のコマンドを実行してリソースを作成します。
terraform apply |
作成したリソースの確認
必要なポリシーが付与されたIAMユーザーでAWSマネジメントコンソールへサインインをします。サインイン後、作成したリソースが存在するかを確認します。
例:EC2インスタンス確認

Ansibleをコントロールノードにインストール
Terraformで構築したコントロールノード(EC2インスタンス)にSSHで接続し、Ansibleのインストールと初期設定を行います。
まずはTerraformで作成したコントロールノードにSSHで接続します。
ssh -i ~/.ssh/id_rsa ec2-user@<コントロールノードのパブリックIP> |
<コントロールノードのパブリックIP> Terraformで作成したインスタンスのパブリックIPに書き換えて実行してください。

Ansibleのインストール
Terraformで作成したコントロールノードにSSHで接続したら、Ansibleをインストールするための準備を行います。
システムパッケージを最新化
最初にシステムパッケージを最新状態に更新します。これにより、必要な依存関係が正しくインストールされるようになります。
sudo yum update -y |
Pythonとpipのインストール
AnsibleはPythonで動作するため、まずPythonとpipをインストールします。
sudo yum install -y python3 python3-pip |
Ansibleのインストール
pipを使用してAnsibleをインストールします。
sudo pip3 install ansible |
インストール確認
以下のコマンドでAnsibleが正しくインストールされていることを確認します。
ansible –version |
Terraformで作成した秘密鍵の配置
AnsibleのコントロールノードがターゲットノードにSSH接続するには、Terraformで使用した秘密鍵が必要です。以下の手順で秘密鍵を配置します。
秘密鍵を転送
ローカルマシンからコントロールノードにTerraformで使用した秘密鍵(~/.ssh/id_rsa)を転送します。
※ローカルマシンで操作
scp -i ~/.ssh/id_rsa ~/.ssh/id_rsa ec2-user@<コントロールノードのパブリックIP>:~/.ssh/id_rsa |
権限の設定
コントロールノードに転送した秘密鍵の権限を変更します。権限が適切でない場合、SSH接続に失敗します。
※コントロールノード(Ansibleサーバ)で操作
chmod 600 ~/.ssh/id_rsa |
これでコントロールノードからターゲットノードへのSSH接続準備が整いました。
インベントリファイルの作成
Ansibleでは、インベントリファイルを使用して管理対象ノードを指定します。このファイルに対象ノード(EC2インスタンス)の情報を記載します。
ディレクトリ構造の準備
まず、コントロールノード上に作業ディレクトリを作成します。
mkdir -p ~/ansible_project cd ~/ansible_project |
インベントリファイルの作成
インベントリファイル(inventory.ini)を作成します。
touch inventory.ini |
inventory.ini ファイルに以下の内容を記載します。
[target] <対象ノードのプライベートIP> ansible_user=ec2-user ansible_ssh_private_key_file=~/.ssh/id_rsa |
記載例

- [target]: 対象ノードのグループ名。任意の名前に変更可能です。
- <対象ノードのプライベートIP>: Terraformで作成した対象ノードのプライベートIPを記載します(AWSコンソールで確認可能)。
インベントリファイルの確認
以下のコマンドを実行し、インベントリファイルが正しく読み込めるか確認します。
ansible-inventory -i inventory.ini –list |
出力例
{ “_meta”: { “hostvars”: { “10.0.1.100”: { “ansible_user”: “ec2-user”, “ansible_ssh_private_key_file”: “~/.ssh/id_rsa” } } }, “target”: { “hosts”: [ “10.0.1.100” ] } } |
接続確認
AnsibleのPingモジュールを使用して、コントロールノードからターゲットノードへの接続を確認します。
以下のコマンドを実行
ansible -i inventory.ini target -m ping |
SUCCESS が表示されれば、ターゲットノードへの接続が正常に行われていることを示します。

Ansibleで対象ノードに設定を適用
作業ディレクトリに移動し、Playbookファイルを作成します。
cd ~/ansible_project touch site.yml |
site.yml に以下の内容を記述します。
— – name: Configure target node hosts: target become: yes tasks: – name: Install Apache yum: name: httpd state: present – name: Start and enable Apache service: name: httpd state: started enabled: yes – name: Deploy index.html copy: content: | <html> <head> <title>Welcome to Ansible Managed Server</title> </head> <body> <h1>Apache is successfully configured by Ansible!</h1> </body> </html> dest: /var/www/html/index.html mode: ‘0644’ |
Playbookを実行する
以下のコマンドを使用して、Playbookを実行します。
ansible-playbook -i inventory.ini site.yml |
実行結果の確認
Playbook実行後、以下のような出力が表示されます。
PLAY [Configure target node] ************************************************** TASK [Gathering Facts] ******************************************************** ok: [10.0.1.100] TASK [Install Apache] ********************************************************* changed: [10.0.1.100] TASK [Start and enable Apache] ************************************************ changed: [10.0.1.100] TASK [Deploy index.html] ****************************************************** changed: [10.0.1.100] PLAY RECAP ******************************************************************** 10.0.1.100 : ok=4 changed=3 unreachable=0 failed=0 |
changed=3:
3つのタスク(Apacheのインストール、起動、有効化、HTMLファイルの配置)が変更されたことを示します。
ok=4:
全タスクが正常に実行されたことを示します。
動作確認・リソースの削除
Playbookが正常に適用されたか、ターゲットノードのApacheが動作しているかを確認します。ブラウザを開き、以下のURLにアクセスします。
http://<ターゲットノードのパブリックIP> |
以下のようなHTMLページが表示されれば成功です。

※今回使用したパブリックIPは有料コンポーネントとなります。学習後はリソースの削除を忘れずに行いましょう。
terraform destroy |
まとめ
本記事では、Terraformを使ったAWSインフラの構築と、Ansibleを使用して対象ノードに設定を適用するまでの手順を詳しく解説しました。
- TerraformでAWSリソースを構築
VPCやEC2インスタンスをコード化して自動プロビジョニングを実現。 - Ansibleで構成管理を実施
コントロールノードにAnsibleをインストールし、PlaybookでApacheの設定を適用。 - 動作確認
ブラウザで対象ノードへの設定適用を確認。
今回は基本的なAnsibleの使い方を学びましたが、下記記事ではAnsibleのRolesを使ったPlaybookの再利用と構造化について詳しく解説します。興味がある方はぜひご覧ください。