コンテンツにスキップ

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文字使用不可)
  • インデントでデータ構造をネスト表現

シーケンス:リストと呼ばれる

 - test
 - test2
 - test3

マッピング:"キー:値"表現(ハッシュともいう)

tokyo : tokyotower
aichi : nagoyatvtower
osaka : tuutenkaku

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

確認

ansible --vesion

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のインストール

コントロールノードにAnsibleをインストールします。 インストール方法は上記。

SSHの設定(ターゲットノードがLinuxマシンの場合)

コントロールノード<=>ターゲットノード間で通信する際のSSH設定を行う。 以下をコントロールノード上で行う。

  1. ssh-keygenでsshカギを作成(rsaの場合は id_rsa(秘密鍵), id_rsa.pub(公開鍵)が生成される)
  2. 鍵の保存先(~/.ssh/authorized_keys)に移動しchmod 600 authorized_key(読み書き実行権限付与)を行う
  3. ターゲットノードにscpコマンドで公開鍵をターゲットノードに送信しターゲットノードの/root/.sshに設置
  4. コントロールノードからターゲットノードに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を送る。

ansible all -m ping

ping => pong なら疎通確認。