全体の構成
記事初めて書きます。まだエンジニアになりたてですので間違った記述等があったらご指摘いただけると幸いです。
今回は備忘録として書きます。
全体としてこのような構成を目指しました。
- VM1にAnsibleを導入
- 導入したAnsibleでVM2にapacheを導入し、webサーバーを構築する
- 構築したwebサーバにMacからアクセスする。
VMの作成
-
環境
- ホストOS:Mac
- VM1:centOS7.2
- VM2:centOS7.2
-
前提
- vagrant導入済(ver 5.2)
- VirtualBox導入済(ver 2.2.3)
Vagrantfileは下記の通り。
Vagrant.configure(2) do |config|
config.vm.define "ansible_server" do |vm01|
vm01.vm.box = "bento/centos-7.2"
vm01.vm.hostname = "ansible-server"
vm01.vm.network :private_network, ip: "192.168.1.10"
vm01.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
vm01.vm.network :forwarded_port, id: "http", guest: 80, host: 3400
end
config.vm.define "ansible_target" do |vm02|
vm02.vm.box = "bento/centos-7.2"
vm02.vm.hostname = "ansible-target"
vm02.vm.network :private_network, ip: "192.168.1.20"
vm02.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
vm02.vm.network :forwarded_port, id: "http", guest: 80, host: 3500
end
end
vagrant upしてVM1にssh接続します。ルート権限で入りました。初期パスワードは"vagrant"
vagrant up
$ ssh root@localhost -p 2210
root@localhost's password:
[root@ansible-server ~]#
Ansibleのインストール
早速Ansibleをインストールします。
[root@ansible-server ~]# yum install ansible
anisbleで対象のサーバーのプロビジョニングを行うには、対象サーバーとssh通信が行えている必要があります。よって対象サーバーに公開鍵を送り込んでssh通信を行えるようにします。
[root@ansible-server ~]# ssh-keygen -t rsa
[root@ansible-server ~]# ssh-copy-id root@192.168.1.20
プロビジョニング
「web」というフォルダを作成して、そこで作業を行いました。
下記のような構成でプロビジョニングしました。
[root@ansible-server web]# tree
.
├── apache.yml
├── files
│ └── index.html
└── hosts
hostsには、Ansibleによるプロビジョニングの対象となるサーバーのIPアドレスを記述します。
[ansible-target]
192.168.1.20
apache.ymlはAnsibleが自動で処理するタスクで、下記のように書きました。
- name: install and start apache
hosts: ansible-target
become: yes
tasks:
- name: httpd package is present
yum:
name: httpd
state: latest
- name: latest index. html file is present
copy: src=./files/index.html dest=/var/www/html/
- name: httpd is started
service:
name: httpd
state: started
- name: start firewalld
command: systemctl start firewalld.service
- name: open 80
command: firewall-cmd --zone=public --add-service=http --permanent
- name: restart firewall
command: firewall-cmd --reload
index.htmlはこちらです
<p>herohero</p>
ansible-playbookで実際にプロビジョニングをする前に、--checkをつけて確認しました。
ansible-playbook --check -i hosts apache.yml
PLAY [install and start apache] **************************************************************************************************************************
・
・
PLAY RECAP ***********************************************************************************************************************************************
192.168.1.20 : ok=4 changed=3 unreachable=0 failed=0
本実行ではもちろん外す。
[root@ansible-server web]# ansible-playbook -i hosts apache.yml
・
・
PLAY RECAP ***********************************************************************************************************************************************
192.168.1.20 : ok=7 changed=6 unreachable=0 failed=0
少しcheckバージョンと内容が違う。
vagrantによりVMを作成するときに80番ポートを3500番にフォワードする設定をしていたので、localhost:3500にアクセスすると.
.
アクセスできました。
#今回詰まったところ
何故か単純に80番が解放された状態だけではMacからアクセスできなかった。
いろいろ調べたところ、port forwardingをすればアクセスできるとの記事が書かれたところがあったのでVagrantfileの設定からhttpのport fowardを設定したらアクセスできるようになった。
また、Ansibleでfirewallの設定はせずに、VM2を立てた時のデフォルトのままでもlocalhost:3500にアクセスできました。
この辺のネットワークの知識は今後も勉強します。
記述についてこちらのページを大いに参考にさせていただきました。
https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c