ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

Ansibleサーバを構築して別サーバにApacheをインストールする

はじめに

インフラエンジニア初学者のぽれいんと申します。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

<参考>

【Ansible入門】EC2環境でAnsibleを実行してみよう - サーバーワークスエンジニアブログ

Ansible入門者向け学習ガイド(CentOS編) | 株式会社アイティードゥ

 

Ansibleとは

インフラ環境をコード化し、インフラ構成を管理するツール。

Ansible用にコード化されたファイル群をPlaybookと呼び、Playbookを1度でも何度でも実行しようが、同じ結果が得られる冪等性という特徴がある。

扱うサーバの数が100、1000と多い際に使用することで時間の効率化、ミスの低減を図ることができる。

 

使用する環境

構成図

f:id:porain:20211006202933p:plain

簡単な構成図

実践

 <Ansibleサーバ>コントロールノード

Ansibleインストール

 amazon-linux用の拡張パッケージをインストール

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の作成

httpdディレクトリの作成

 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』のパスワードを入力

 

 

 

以上!!!!!!!!!!!!!