1
 Ansibleとは
 Ansibleの構成
 PJでの活用
› 様々な問題と解決(応急対処?)
 今後利用したい機能
› Version2.0/2.1/2.2
2
 Python製の構成管理ツール
› Infrastructure as Code
 名前の由来は’ハイニッシュ・ユニバース’に
登場する超光速通信技術
 エージェントレス
 RedHatが買収
3
 構成管理とは…
 システムを構成する物理/論理資源とその環境を、常に
正確に把握するための管理を指し、目的は次の2点
› 物理/論理資源の最新状況の把握
 物理資源とは・・・ハードウェア、ネットワーク、サーバー、PCなど
 論理資源とは・・・ライセンス、ソフトウェア、接続構成など
› 資源の有機的接続状況の把握
( 参照: http://www.arksystems.co.jp/closeupit/operationmgmnt/020101.html )
 構成管理ツールとは…
 システムのあるべき状態を記述し、差分があれば更新
する
› Infrastructure as Code
( 参照: http://www.arksystems.co.jp/closeupit/operationmgmnt/020101.html )
4
5
構成
実行コマンド
Inventory
PlayBook
Role
 対象の構成手順を記述するファイル
 YAML形式で記述
 どのホスト(hosts)に、どのユーザ(user)で
何 (roles,tasks)を実行するのか、を記述する
6
 対象ホストをまとめて記述したファイル
 グループでまとめて記述が可能
7
 処理の最小単位
 標準で提供しているものはpythonで記述
 600近くのmoduleが存在
› yum,service,file,user,make等々
8
これ
 Moduleの集合を定義したもの
› プログラムで言うとメソッド
 Roleごとに変数や使用するファイルを管理
できる
› デフォルトの構成がある
9
roles/ # roleの配置ディレクトリ
common/ # role名
files/ # ファイル
templates/ # templateファイル (jinja2というtemplate engine)
tasks/ # 実行する処理定義
handlers/ # handlerというnotifyとその処理の定義
vars/ # 変数ファイル
defaults/ # 変数のデフォルトファイル
meta/ # roleの依存関係定義
 Ver 1.9.4を使用
 以下の用途で利用
› DockerImageの作成
› 各サーバ構築
 DockerImageの取得
 MW,SWのインストール
 起動
10
1. 冪等性がない
2. 1 InventoryでPortのみ切り替えできない
3. 実行タイミングの衝突によるエラー
11
 冪等性
› ある操作を1回行っても複数回行っても結果が同
じであること
 Ansibleは基本、冪等性を保つように作られ
ている
› 例) directoryの作成→ディレクトリがなければ作る、
あれば何もしない
 shell/command module
› 任意のコマンドを実行できる
› 冪等性を保つのはユーザの責任
 例) command: mkdir A→ディレクトリがあるとエラー
12
 やりたかったこと
› Postgresqlインストールから起動までのroleを作成
› 設定を書き換えたらAnsible実行
› 新しい設定でpostgresqlが稼働する
 問題
› db init が2回目には失敗する
 対応
› db init済みか確認してなければ実行する、 とした
 register,when節を使用
 記述が長くなる
› moduleの作成をするとうまくできた気がする
 bashスクリプトではじめての自作Ansibleモジュール
 http://qiita.com/yunano/items/d58199eada0109d1e2fb
13
 1サーバ内に複数Dockerコンテナが共生
› 1つのInventoryファイルに1Server分記述したい
 [Container A]
x.x.x.x:10000
 [Container B]
x.x.x.x:20000
 [Container C]
x.x.x.x:30000
› portの切り替えができず、
いちばん上の定義が優先される
 ContainerBを指定してもContainerAに接続してし
まう
14
15
疎通確認コマンド。
Testグループを対象に指定。
Test2より先に定義すると
成功する
16
順番を変えると
Test2に定義している
10000ポートを
見に行ってしまう
 対応
› 仕方なく、各サーバ、各コンテナごとの
インベントリファイルを作成した
› (後述の)Docker Connection Pluginを使えば
うまく対応できそう
17
 起動時に同一DBに値を書き込む処理
 複数サーバ同時実行するとタイミングの衝
突によりエラーが発生
› 基本は全サーバ並列実行
対応
 Serialの利用により回避
› Serial実行
 指定台数分ずつ順次実行
18
 最新のVersionは2.1
 2.0,2.1と大幅な機能拡張があった
 2.2も近々でるらしい(10月予定?)
 利用したい機能が多数
 Version関係ないけど
› Ansible-lint
 lintとは、主にC言語のソースコードに対し、コンパイラより
詳細かつ厳密なチェックを行うプログラムである。
(引用元:https://ja.wikipedia.org/wiki/Lint)
19
 Task Blocks
› Playbookに対して例外処理の提供
› Try/except/finallyがモデル
 Docker Connection plugin
› コンテナID、コンテナ名で接続が可能
› DOCKER_HOST環境変数の指定が必要
› Connection: docker と記述して使用
20
 Windowsの正式サポート!
› PCセットアップの効率化
 Docker操作周り
› docker_service
› docker_container
› docker_image
› docker_login
21
 Vaultサポートの強化
› ファイル単位でなく変数単位の暗号化が可能
 Python3対応
› 2.2で完了ではないが徐々に進む
22
 Ansibleはエージェントレスの構成管理ツー
ル
 冪等性を保つように工夫して使うことが重
要
 新機能がたくさん出ているので新しい
Versionを使う
 Version2.2が楽しみ
23
 https://docs.ansible.com/
 http://qiita.com/t_nakayama0714/items/3a7ac08797b69a31533b
 http://tdoc.info/blog/2015/12/03/docker_connection_plugin.html
 http://qiita.com/makaaso/items/0375081c1600b312e8b0
 http://yteraoka.github.io/ansible-tutorial/
24

Ansible使ってみて