1. Ansible基礎
1.1. Ansibleの基礎知識
1.1.1. Ansibleとは
AnsibleはIaCの中ではプロビジョニングと呼ばれるPython製の構成管理ツールの1つであり、 構成の制御、状態記録と監視に特化したシステムを提供する。
一言でいえばシステム構築、ソフトウェアデプロイ、システムメンテナンス等のタスクの自動化ツールと言える。 Ansibleはオンプレミスからクラウドまで対応している。
Iacを使用するメリットは以下の通り。
- オペレーション工数の削減 => 手動作業をコード化・自動化により、OP工数と納期短縮が可能
- オペレーション品質の向上 => 属人性が排除されるため、オペレーション品質を均一にすることが期待可能
- 作業統制強化 => 構築作業が自動化されるため、サーバへの不要なOPやアクセスをなくすこと、内部統制・セキュリティの向上も期待できる
1.1.2. Ansibleの特徴
- 設定ファイルの可読性が高い(YAML(.yml, .yaml)で記述)
- エージェントレス(SSHで送信される)
- マルチレイヤ対応(特定のオペレーションだけではなく) => モジュールというcomoponentを呼び出し実行
- 冪等性(ある同一の動作や設定を繰り返し行っても一度行った動作は変わらない)の担保
1.2. Ansibleの前提知識
Ansibleの環境はコントロールノードとマネージドノード(ターゲットノード)の2つで構成される。
1.2.1. コントローラノード
Ansibleをインストール対象のマネージドノードを管理するノード。
コントロールノードはUnix系OSのみ対応(Windowsは不可)+Python2.7系以上が必要
1.2.2. マネージドノード(ターゲットノード)
Ansibleにより管理される対象のシステムやホスト。
ターゲットノードはPython2.7系以上が必要
マネージドノードの対象
マネージドノードはLinux,windows, ネットワーク機器, Dockerコンテナなどを対象として利用可能。 これら機器への接続方法例は以下の通り。
接続方法 | 対象システム例 |
---|---|
ssh | Linuxマシン |
winrm | Windowsマシン |
network_cli | ネットワーク機器 |
docker | Dockerコンテナ |
1.3. Ansibleの用語
1.3.1. Inventory
構成管理を行うマネージドノード(ターゲットノード)の接続状況をリスト化して記述したファイル。
デフォルトでは「hosts」というファイルとなっている。
1.3.2. PlayBook
ターゲットノードで実行したいタスク/構成情報をYAML形式で記述するファイル。
機能単位で/roles
ディレクトリ以下にyamlファイルを作成する。
一般的には/roles
以下に作成したファイルをルートディレクトリ以下のsite.yml
に設定する。
以下がPlayBookの例
- name: motd に "Hello ansible" を追記する
ansible.builtin.lineinfile:
path: /etc/motd
regexp: '^Hello'
line: 'Hello ansible'
state: present
おまけ(YAML記法)
YAML記法のルールは以下の通り
---
から書き始める(1行目は---)...
で書き終える(最終行は...)- コメントアウトは
#
- インデントは半角空白2個(Tab文字使用不可)
- インデントでデータ構造をネスト表現
シーケンス:リストと呼ばれる
マッピング:"キー:値"表現(ハッシュともいう)
1.3.3. Module
ファイル転送/サービスの起動停止をラッピングしたもの。
1.3.4. Plugin
Ansibleのコア機能拡張・追加機能を提供するコンポーネント。
1.4. Ansibleの導入
1.4.1. Ansibleのインストール
インストールする方法は複数あるがパッケージマネージャを使用した方法を記載。
# REDHAT8.0系以降のインストール例
sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release
sudo dnf install ansible
# Debian系
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansibl
確認
1.4.2. Ansibleのファイル構成
以下にファイル構成の基本例を示す。
ディレクトリ | ディレクトリ2 | ファイル | 説明 |
---|---|---|---|
ansible(親) | hosts | Inventoryファイル | |
ansible.cfg | 設定ファイル | ||
site.yml | PlayBookファイル | ||
/roles/role1/tasks/ | role1.yml | PlayBookファイル |
ansible.cfgにはファイルの機能のOn/Offを設定する。
1.4.3. Ansibleの導入から疎通確認/接続設定
Ansibleの導入フロー例を提示する。
なお以下フローではターゲットノードはrootユーザ権限で操作されることを前提としている。
ターゲットノードでユーザ権限で操作する場合以下リンクの対象ホスト側の作業
を参考に。
Ansibleのインストール
コントロールノードにAnsibleをインストールします。 インストール方法は上記。
SSHの設定(ターゲットノードがLinuxマシンの場合)
コントロールノード<=>ターゲットノード間で通信する際のSSH設定を行う。 以下をコントロールノード上で行う。
- ssh-keygenでsshカギを作成(rsaの場合は id_rsa(秘密鍵), id_rsa.pub(公開鍵)が生成される)
- 鍵の保存先(~/.ssh/authorized_keys)に移動し
chmod 600 authorized_key
(読み書き実行権限付与)を行う - ターゲットノードに
scpコマンド
で公開鍵をターゲットノードに送信しターゲットノードの/root/.ssh
に設置 - コントロールノードからターゲットノードにssh接続できるか確認(
ssh root@[ターゲットノードのIPアドレス]
)
Inventoryファイル設定
インベントリファイルにターゲットノードを設定する。
YAMLの場合の記述例
all:
hosts:
mail1:
mailserver.com:
children:
webservers-target:
hosts:
webserver1.com
webserver2.com
dbservers-target:
hosts:
192.168.10.1
192.168.10.2
疎通確認(コントロールノード => ターゲットノード)
以下コマンドでターゲットノードにpingを送る。
ping => pong なら疎通確認。