🔥

Ansibleで環境構築を自動化する!①

2021/04/04に公開

はじめに

くーばねてすを倒すために今回はNode.jsをやっつけないといけなくなったのでNode.jsの設定をデーモン化したものをAnsibleで自動化するために色々調べた(^^)/!

概要

■Ansibleで環境構築を自動化するには
■①SSHの設定
■②ターゲットノードで設定を行い内容を手作業で確認する
■③手作業工程の手順をもとにplaybookを作成する。(コントロールノードで作成)
■④ターゲットノードにplaybookを実行する。

をまとめた(^^)/

※Ansibleで使うもの※
・コントロールノード
Ansibleを実行する端末
・ターゲットノード
操作対象のサーバー
・プレイブック (Playbook)
実行したい処理を記述するYAML形式のファイル
・モジュール (Module)
プレイブックの中で利用できる環境構築の部品
・インベントリー (Inventory)(hosts ファイル)
操作対象機器のIPアドレスやホスト名(ドメイン名)を記述するファイル。/etc/ansible/hostsに保存すると ansible 実行時に対象ホストが設定され、各ホストに ssh 経由で自動管理することができる。

など

■Ansibleで環境構築を自動化するには

Ansibleで環境構築を自動化する手順
①SSHの設定
②Ansible疎通確認
③ターゲットノードで設定を行い内容を手作業で確認する
④手作業工程の手順をもとにplaybookを作成する。(コントロールノードで作成)
⑤ターゲットノードにplaybookを実行する。

今回はコントロールノードとしてローカルにubuntuさん、ターゲットノードにAWSのAmazonLinuxさんに協力して頂いた。(>_<)いつもありがとうございます。

①SSHの設定

まずはAnsibleを利用して自動化するためにコントロールノードからターゲットノードへSSH接続ができるようにならないといけないのでSSHの設定(公開鍵認証)をする。
コントロールノードで公開鍵認証の鍵の作成をする。
$ ssh-keygenと入力すると鍵の格納先等の入力を求められるが、何も入力せずにEnterを押す。

コントロールノード
$ ssh-keygen
略
+---[RSA 3072]----+
|+=o o.           |
|o+o...           |
|.o.++o           |
|o.+.=+           |
|o+ =o.E S        |
|. +... . o       |
|. o.    + .      |
|+oo+ = B o .     |
|o=oo= = = ...    |
+----[SHA256]-----+

鍵の確認をする。

コントロールノード
$ cd .ssh
$ ls
id_rsa  id_rsa.pub

id_rsa...秘密鍵
id_rsa.pub...公開鍵
となる。
SSH接続するための鍵が作成できた。
Ansibleを実行するサーバーで管理者権限で実行ユーザーを作成する。

ターゲットノード
$ sudo useradd -m suidou

ユーザを切り替え+切り替えたユーザのホームディレクトリへ移動する。

ターゲットノード
$ sudo su - suidou

公開鍵を所定の場所に保存しないとAnsibleでSSH接続できないのでディレクトリを作成する。

ターゲットノード
$ mkdir ~/.ssh

コントロールノードで作成した公開鍵をコピーしてファイルとして保存する。

ターゲットノード
$ vi ~/.ssh/authorized_keys

作成したディレクトリ、ファイルの権限を変更する。

ターゲットノード
$ chmod 0700 ~/.ssh
$ chmod 0600 ~/.ssh/authorized_keys

コントロールノードから作成した鍵を利用してSSH接続する。

コントロールノード
$ ssh -i id_rsa suidou@xxx.xxx.xxx.xxx(←ターゲットノードのIPアドレス)
Last login: Sun Apr  4 06:39:18 2021

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/

SSH接続が確認できた!
確認できたらログアウト。

コントロールノード
$ exit
logout
Connection to xxx.xxx.xxx.xxx closed.

②Ansibleの疎通確認をする

ホスト情報一覧を記述するインベントリファイルを作成する。
疎通確認をするためにインベントリファイルを作成する。インベントリファイルにターゲットノードの接続情報を追加する。
コントロールノードでAnsibleをインストールすると /etc/ansible/ ディレクトリができており、以下がデフォルトで作成されている。

コントロールノード
$ cd /etc/ansible/
$ ls
ansible.cfg  hosts  

Ansibleのコンフィグファイルを書きくわえる。

コントロールノード
$ vim ansible.cfg
略
[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts
inventory   = ./inventory       #(←書き加える)
#library        = /usr/share/my_modules/
#module_utils   = /usr/share/my_module_utils/
略

inventoryファイルを作成し、Ansibleで繋ぎたいサーバーをini形式で記述する。
複数ある時は[セクション]でグループ化する。このグループはAnsibleの playbook で指定する際に使用することができる。

コントロールノード
$ vim inventory
[servers]
xxx.xxx.xxx.xxx

接続情報をhostsファイルに記述する。ファイルの下のあたりに追記する。

コントロールノード
$ vim hosts
[servers]
xxx.xxx.xxx.xxx

[servers:vars]
ansible_port=22
ansible_ssh_user=suidou
ansible_ssh_private_key_file=~/.ssh/id_rsa

Ansibleコマンドを使用してターゲットノードとのAnsible疎通確認をする。

Ansible疎通確認コマンド
$ ansible all(もしくはグループ) -i hosts(サーバーを記述したファイル) -m ping

-i hosts(記述したファイル)はansible.cfgに接続するサーバーの内容を記述していれば省略することができるぞ!(^^)!

コントロールノード
$ ansible all -i hosts -m ping
xxx.xxx.xxx.xxx | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

ターゲットノードとの疎通確認がとれた!!(^^)!

まとめ

長いので続く!(>_<)

Discussion