Ansible¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. Ansibleの仕組み¶
アーキテクチャ¶
Ansibleは、コントロールノード (デプロイサーバー) と管理対象ノード (デプロイ先サーバー) から構成される。
コントロールノードと管理対象ノードに当たるサーバー (物理サーバー、仮想サーバー) をセットアップしておき、コントロールノードにAnsibleをインストールする。
もし、ローカルマシンでansibleコマンドを実行する場合は、ローカルマシンがコントロールノードに相当する。
また、管理対象ノードとしてサーバーには実際のアプリケーションもデプロイされる。
コントロールノード上のAnsibleは、管理対象ノードのサーバーにSSH公開鍵認証を実行し、設定ファイルに基づいたプロビジョニングを実行する。
設定ファイルの実装の変更によって、プロセスの再起動を伴うプロビジョニングが実行される場合、ダウンタイムを考慮する必要がある。
ユースケース¶
プロビジョニングによりサーバー (物理サーバー、仮想サーバー) とコンテナを作成できる。
ただし、Ansibleは仮想サーバーのプロビジョニングのために使用することが多い。
02. セットアップ¶
インストール¶
▼ aptリポジトリから¶
$ sudo apt -y install sshpass
$ sudo apt -y install python3-pip
$ pip3 install ansible
03. 設計規約¶
ディレクトリ構成規約¶
▼ group_vars
ディレクトリの構成¶
repository/
├── playbook.yml
├── group_vars/
│ ├── tes/ # テスト環境
│ │ └── foo.yml
│ │
│ ├── stg/ # ステージング環境
│ └── prd/ # 本番環境
│
...
▼ host_vars
ディレクトリの構成¶
repository/
├── playbook.yml
├── host_vars/
│ ├── bar_host.yml
│ └── baz_host.yml
│
▼ inventories
ディレクトリの構成¶
repository/
├── playbook.yml
├── inventories/
│ ├── tes/ # テスト環境
│ │ ├── hosts_a.yml # 冗長化されたサーバーa
│ │ ├── hosts_c.yml # 冗長化されたサーバーc
│ │ └── host_vars.yml
│ │
│ ├── stg/ # ステージング環境
│ └── prd/ # 本番環境
│
...
▼ roles
ディレクトリの構成¶
repository/
├── playbook.yml
├── roles/
│ ├── app/ # appサーバー
│ │ ├── defaults/ # rolesディレクトリ内で使用するデフォルト変数を配置する。
│ │ │ └── foo.yml
│ │ │
│ │ ├── files/ # 管理対象ノードにコピーするファイルを配置する。
│ │ │ └── foo.conf
│ │ │
│ │ ├── handlers/
│ │ │ └── main.yml
│ │ │
│ │ ├── meta/
│ │ │ └── main.yml
│ │ │
│ │ ├── tasks/ # プロビジョニング時に実行するコマンドを配置する。
│ │ │ └── main.yml
│ │ │
│ │ ├── templates/ # テンプレートを配置する。
│ │ │ └── foo.conf.j2
│ │ │
│ │ └── vars/ # rolesディレクトリ内で使用する上書き変数を配置する。
│ │ └── main.yml
│ │
│ ├── shared/ # 共通
│ ├── db/ # dbサーバー
│ └── web/ # webサーバー
│
...
命名規則¶
04. 連携¶
Vault¶
Ansibleの設定値を暗号化し、キーバリュー型ストアとして管理する。
Ansibleの実行時にパスワードを要求し、これが正しければ復号化し、設定値として出力する。
パスワード自体をファイル上でバージョン管理したい場合、暗号化ツール (例:SOPS、kubesec) で暗号化することもできる。