Ansibleで環境構築を自動化する!①
はじめに
くーばねてすを倒すために今回は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 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