Ansibleサーバを構築して別サーバにApacheをインストールする
はじめに
インフラエンジニア初学者のぽれいんと申します。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
<参考>
【Ansible入門】EC2環境でAnsibleを実行してみよう - サーバーワークスエンジニアブログ
Ansible入門者向け学習ガイド(CentOS編) | 株式会社アイティードゥ
Ansibleとは
インフラ環境をコード化し、インフラ構成を管理するツール。
Ansible用にコード化されたファイル群をPlaybookと呼び、Playbookを1度でも何度でも実行しようが、同じ結果が得られる冪等性という特徴がある。
扱うサーバの数が100、1000と多い際に使用することで時間の効率化、ミスの低減を図ることができる。
使用する環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (2台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
- ソフトウェア
構成図
実践
<Ansibleサーバ>コントロールノード
Ansibleインストール
amazon-linux-extras install epel -y
python-pipをインストール
yum install -y python-pip
Ansibleをインストール
yum install -y ansible
pyshon-pip用Ansibleをバージョンを指定してインストール
pip install ansible==2.4.0
Ansible・pythonのバージョンを確認
ansible --version
SSHの設定
ssh鍵を作成
ssh-keygen
※The key's randomart image is: が出るまでEnterを連打。
/root/.sshに移動し中身を確認
cd /root/.ssh && ls -la
authorized_keysの内容を確認
cat authorized_keys
id_rsa.pubの内容を確認し、コピーしておく
cat id_rsa.pub
<Client01サーバの作業> ターゲットノード
~/.sshに移動し中身を確認
cd ~/.ssh && ls -la
~/.ssh/authorized_keysを編集
vi ~/.ssh/authorized_keys
--------以下を追記----------------
※コントロールノードで内容を確認し、
コピーした内容を貼り付ける
----------------------------------
ディレクトリ、ファイルの権限を変更する
chmod 0700 ~/.ssh && chmod 0600 ~/.ssh/authorized_keys
<Ansibleサーバ>コントロールノード
AnsibleサーバからClient01サーバにSSH接続
(鍵認証が問題なければパスワードなしで接続ができます。)
接続が確認後、exitで切断。
ssh root@プライベートIP
>yes
exit
※yesを入力することで侵入可能
Ansible疎通確認
/etc/ansible/に移動し内容を確認
cd /etc/ansible/ && ls
hostsファイルを編集
vi hosts
----------以下を最終行に追記-------------
[target]
targetnode ansible_host=プライベートIP
---------------------------------------
ansible.cfgファイルを編集
vi ansible.cfg
----------以下を最終行に追記----------
[defaults]
interpreter_python=/usr/bin/python3
------------------------------------
ansibleコマンドを実行し疎通確認を行う
ansible all -i hosts -m ping
※pingモジュールを使用し疎通しています。『all』はインベントリに記載しているすべてのターゲットノードが対象になる
※Ansibleコマンドが上手くいかないという報告がありました。
その場合、ansible.cfgファイルを元の状態に戻したらできるかもしれないです。。。
Playbookの作成
cd /etc/ansible/roles
mkdir httpd && cd httpd
mkdir tasks && cd tasks
pwd
→ /etc/ansible/roles/httpd/tasks
install.ymlを作成
vi /etc/ansible/roles/httpd/tasks/install.yml
--------------以下を記入--------------
---
- name: httpdのインストールを行います
yum:
name: httpd
state: present
--------------------------------------
configuration.ymlを作成
vi /etc/ansible/roles/httpd/tasks/configuration.yml
--------------------以下を記入-------------------------------
---
- name: バックアップの確認をします。/etc/httpd/conf/httpd.conf
stat:
path: /etc/httpd.conf.org
register: httpd_conf_org
- name: バックアップを取得します。
copy:
src: /etc/httpd/conf/httpd.conf
dest: /etc/httpd/conf/httpd.conf.org
remote_src: yes
when: not httpd_conf_org.stat.exists
- meta: flush_handlers
------------------------------------------------------------
main.ymlを作成
vi /etc/ansible/roles/httpd/tasks/main.yml
-------------以下を記入------------
- import_tasks: install.yml
- import_tasks: configuration.yml
-----------------------------------
varsディレクトリを作成
cd /etc/ansible/roles/httpd/
mkdir vars && cd vars
main.ymlを作成
vi main.yml
------------以下を記入---------------
Listen_port:
- port: 8080
-------------------------------------
handlersディレクトリを作成
cd /etc/ansible/roles/httpd/
mkdir handlers && cd handlers
main.ymlを作成
vi main.yml
------------以下を記入---------------
- name: start
service:
name: httpd
state: started
enabled: yes
-------------------------------------
site.ymlの作成
cd /etc/ansible
vi site.yml
------------以下を記入---------------
---
- hosts: all
gather_facts: false
remote_user: root
roles:
- httpd
-------------------------------------
treeコマンドを使用し、ディレクトリの階層がしっかり作成できているか確認
yum install -y tree
tree --charset=C
-------以下コマンド結果---------------
|-- ansible.cfg
|-- hosts
|-- roles
| `-- httpd
| |-- handlers
| | `-- main.yml
| |-- tasks
| | |-- configuration.yml
| | |-- install.yml
| | `-- main.yml
| `-- vars
| `-- main.yml
`-- site.yml
-------------------------------------------
5.playbookの実行
cd /etc/ansible
ansible-playbook site.yml -i hosts -k
※パスワードはsite.ymlで指定した『remote_user』のパスワードを入力
以上!!!!!!!!!!!!!