アンシブルってなんだろ
う?
フジエカズヒ
ロ
サイコロ②  〜~⻄西⽇日本完全制覇〜~2015/8/4
アンシブルとは?
 実体:ソフトウェアのツール(道具)
 ⽤用途:構成管理理ツール(後述します)
 組成:パイソンで出来ている(実装されている)
 仕組:シンプルでセンスが良良い
アンシブルってなんだろう? 2
作者
 Michael DeHaan
アンシブルってなんだろう? 3
環境要件
 必要なのは、パイソンがインストールされている事だけ
­  ほとんどのLinuxディストリビューションにはPythonプリインストール済み
­  リモートホストにSSHで接続できること
 コントロールマシン(ローカルホスト)
­ Python 2.6 or 2.7
­ Python 3 はサポートされていません  ☞  Ansible 2.x で対応予定
­ Windows  はサポートされていません  ☞  Cygwin で頑張るのも⼀一興
 管理理ノードマシン(リモートホスト)
­ Python 2.4 or later
­ 但し、2.5以下の場合には  python-simplejson が必要
アンシブルってなんだろう? 4
仕組み
 動作フロー
アンシブルってなんだろう? 5
 1. ssh  3. execute command
 2. sftp (send task)
 4. result
 [control machine]  [managed node]
システム構成
複数並列列タスク実⾏行行
アンシブルってなんだろう? 6
 [control machine]
 [managed nodes]
インストールと設定と使
い⽅方
部屋とYシャツと私
サイコロ②  〜~⻄西⽇日本完全制覇〜~
インストール  (PIP)
 Mac OS X, BSDs
 $ sudo easy_install pip
­ Python 2.7.9 and later include pip by default
 $ sudo pip install ansible
アンシブルってなんだろう? 8
インストール  (YUM)
 CentOS, RHEL, or Scientific Linux
 $ sudo yum install ansible
アンシブルってなんだろう? 9
インストール  (APT)
 Ubuntu
 $ sudo apt-get install software-properties-common
 $ sudo apt-add-repository ppa:ansible/ansible
 $ sudo apt-get update
 $ sudo apt-get install ansible
アンシブルってなんだろう? 10
確認
 $ ansible –version
 ansible 1.9.2
アンシブルってなんだろう? 11
設定
 インベントリ
­ Inventory
­  アクセスするリモートホストの情報を書きます
 プレイブック
­ Playbook
­  リモートホストで実⾏行行したいタスクを書きます
アンシブルってなんだろう? 12
インベントリ
 /etc/ansible/hosts
­  デフォルトのインベントリファイル
­  環境変数(ANSIBLE_HOSTS)もしくは、実⾏行行時の  (-i) オプションで指定可能
­  動的インベントリと称して外部からインベントリを取り込みもできるらしい
­  インベントリファイルを分割することも可能
­  分割したファイルのフォーマットはYAML形式
 INIファイル
­  書式はINIファイルフォーマットの拡張形式(サンプルにて後述します)
­  記述には、範囲指定やグルーピングの他に変数も指定可能(プレイブックで利利⽤用)
­  状況に応じて機能を予約済みの変数(Behavioral Inventory Parameters)も利利⽤用可
アンシブルってなんだろう? 13
インベントリのサンプル
 [webservers]
 foo.example.com
 bar.example.com
 [dbservers]
 one.example.com
 two.example.com
 three.example.com
アンシブルってなんだろう? 14
 [webservers]
 www[01:50].example.com
 [databases]
 db-[a:f].example.com
使い⽅方  (ANSIBLE)
 Synopsis:
 $ ansible <host-pattern> [-f forks] [-m module_name] [-a args]
 example:
 $ ansible all -m ping
 $ ansible webserver* -m ping
 $ ansible webservers:dbservers -m ping
 $ ansible webservers:\!webserver01 -m ping
アンシブルってなんだろう? 15
実⾏行行例例  (ANSIBLE)
 $ ansible webserver01 -m ping
 webserver01 | success >> {
  "changed": false,
  "ping": "pong"
 }
アンシブルってなんだろう? 16
プレイブック
アンシブルってなんだろう? 17
 モジュール
­  単⼀一の機能が実装された処理理の最⼩小単位
­  (Pythonで実装された)標準モジュールが⽤用意されています
­  プレイブックからモジュールを組み合わせて使う
­  モジュールを⾃自作することも可能
­  PythonやShellScriptなどでも作成可能
YAMLファイル
­  プレイブック書式はYAMLファイルフォーマット(サンプルにて後述します)
­  設定のためのシンプルな  ’plays’ の指定が可能
­  使いたいモジュールを組み合わせて対象に実⾏行行したい処理理を記述します
プレイブックセクション構成
 target
­ 対象
­  対象するノードをhostsで指定
 vars
­ 変数
­  (ディレクトリパスなど)後で使⽤用する値
 tasks
­ 実⾏行行するタスク
­  モジュールと引数の指定
アンシブルってなんだろう? 18
プレイブックサンプル①
 ---
 - hosts: dbservers
  user: root
  tasks:
  - name: install mysql
  yum: name=mysql state=installed
アンシブルってなんだろう? 19
使い⽅方  (ANSIBLE-PLAYBOOK)
 Synopsis:
 $ ansible-playbook <playbook> [-f forks] [-i inventory] [--check]
[--check] : dry-run option
 [--syntax-check] : YAML syntax check option
 $ ansible-playbook mysql.yml
アンシブルってなんだろう? 20
実⾏行行例例  (ANSIBLE-PLAYBOOK)
 $ ansible-playbook mysql.yml
 PLAY [dbservers] *********************************************************
 GATHERING FACTS *******************************************************
 ok: [192.168.100.101]
 TASK: [install mysql] *******************************************************
 changed: [192.168.100.101]
 PLAY RECAP **************************************************************
 192.168.100.101 : ok=2 changed=1 unreachable=0 failed=0
アンシブルってなんだろう? 21
プレイブックサンプル②
 ---
 - hosts: dbservers
  user: root
  tasks:
  - name: install mysql
  yum: name=mysql state=installed
  - name: install mysql-server
  yum: name=mysql-server state=installed
  - name: install mysql-devel
  yum: name=mysql-devel state=installed
アンシブルってなんだろう? 22
プレイブックサンプル③
 ---
 - hosts: dbservers
  user: root
  tasks:
  - name: install mysql packages
  yum: name=$item state=installed
  with_items:
  - mysql
  - mysql-server
  - mysql-devel
アンシブルってなんだろう? 23
プレイブック⾔言語(構⽂文)
 include
­ ファイルの読み込み
­  プレイブックの分割
 roles
­ ディレクトリ階層化
­ プレイブックの命名
 conditionals
­ 条件指定
­ whenが使えます
 loop
­ 反復復実⾏行行
アンシブルってなんだろう? 24
 tags
­ タグ付け
­ コマンドラインでタグ指定可能
 prompts
­ プロンプト表⽰示
­ ユーザからの対話⼊入⼒力力可能
 error handling
­ エラー処理理
­ ロールバックが可能
アンシブルのモジュール シェフで⾔言うところのリソー
スだそうです
サイコロ②  〜~⻄西⽇日本完全制覇〜~
モジュールの種類
 Core Modules
­  ⼈人気のモジュール
­  優先的にメインテナンス
­  本体に付属
 Extras Modules
­  新しいモジュール
­  使⽤用頻度度、必要性に応じてCoreに昇格
アンシブルってなんだろう? 26
モジュールインデックス
 Cloud Modules
 Clustering Modules
 Commands Modules
 Database Modules
 Files Modules
 Inventory Modules
 Messaging Modules
アンシブルってなんだろう? 27
 Monitoring Modules
 Network Modules
 Notification Modules
 Packaging Modules
 Source Control Modules
 System Modules
 Utilities Modules
 Web Infrastructure Modules
 Windows Modules
主要なモジュール
 copy
­  ファイルのリモートコピーをします。
   file
­  リモートファイルの設定を変更更できます。パーミッション変更更、シンボリックリンク作成、
ディレクトリの設定や削除、等。
   yum
­  yumパッケージのインストール、アップグレード、削除ができます。
   template
­  埋め込み変数を置換してリモートファイルに反映できます。
   synchronize
­  ディレクトリの同期を⾏行行うモジュールです。内部ではrsyncが使われている様⼦子。
アンシブルってなんだろう? 28
便便利利なモジュール
 service
­  serviceコマンドを実⾏行行する
   command
­  (単体で)shell コマンドを実⾏行行したい場合(<,>, | , & 使⽤用時は、shellモジュールで)
   shell
­  シェル(/bin/sh)を実⾏行行する
   mysql_db
­  MySQL データベースを追加または削除する
   mysql_user
­  MySQL データベースからユーザを追加または削除する。
アンシブルってなんだろう? 29
プレイブックサンプル④
 ---
 - name: be sure mysql-server is installed
  yum: name={{ item }} state=installed
  with_items:
  - mysql-server
  - MySQL-python
  tags: mysqld
 - name: be sure mysqld is running and
enabled
  service: name=mysqld state=running
enabled=yes
  tags: mysqld
アンシブルってなんだろう? 30
 - name: Create database
  mysql_db: db={{ dbname }} state=present
encoding=utf8
  tags: mysqld
 - name: Create database user
  mysql_user: >
  name={{ dbuser }}
  password="{{ dbpassword }}"
  priv={{ dbname }}.*:ALL
  state=present
  tags: mysqld
モジュールの⾃自作
 モジュールは処理理の最⼩小単位
 モジュールはターゲットのサーバーに送られて実⾏行行される
 不不⾜足しているモジュールは⾃自分で作成できる
 標準提供のモジュールはPythonで実装されている
­  基本的にはPythonで実装が妥当(相性の観点)
­  但し、サーバー上で実⾏行行可能であれば基本は何でもオーケー
­  シェルスクリプトも使えます
 標準⼊入⼒力力と標準出⼒力力
­  標準⼊入⼒力力でオプションを受け取る
­  標準出⼒力力で実⾏行行結果を返す
­  出⼒力力フォーマットは、キーと値(key=value)を空⽩白で繋げたもの、もしくは、JSON
アンシブルってなんだろう? 31
モジュールシンプルサンプル
 #!/usr/bin/python
 import datetime
 import json
 date = str(datetime.datetime.now())
 print json.dumps({
  "time" : date
 })
アンシブルってなんだろう? 32
アンシブルのライバル ライバルの存在が相互を⾼高め
あう
サイコロ②  〜~⻄西⽇日本完全制覇〜~
ライバル(構成管理理ツール)
 Puppet
 Chef
 Salt
 Fabric + Cuisine
 Ansible
アンシブルってなんだろう? 34
ソフトウェア名称
アンシブルってなんだろう? 35
 コメント
 登場年年(author)
 実装⾔言語
 プロプライエタリ  or オープンソース  (開発元)
 定義ファイル形式
 アーキテクチャ構成
 スケーラビリティの⼤大⼩小
 共有リポジトリの有無
 管理理ノードへのエージェントインストールの要不不要
 学習及び運⽤用コストの⾼高低
パペット
アンシブルってなんだろう? 36
 構成管理理ツールのはしり、ここら辺りから開幕した
 2005年年登場(Luke Kanies)
 Ruby実装
 オープンソース  (開発元  Puppet Labs社)
 外部DSL(Rubyとは別の独⾃自の構⽂文)
 クライアントサーバ型(もしくは、単独実⾏行行も可能)
 スケーラビリティ(⼤大)
 共有リポジトリ(有)(Puppet Forge)
 エージェント(要)
 学習コスト(⾼高)
シェフ
アンシブルってなんだろう? 37
 昨今での構成管理理ブームを牽引した代名詞的存在
 2009年年登場(Adam Jacob)
 Ruby実装(クライアントのみ  chef-client、サーバーは  Erlang実装  Erchef)
 オープンソース  (開発元  Chef社。以前の社名は  Opescode社)
 内部DSL(Rubyと同じ構⽂文)
 クライアントサーバー型(もしくは、単独実⾏行行も可能)
 スケーラビリティ(⼤大)
 共有リポジトリ(有)(Chef Supermarket)
 エージェント(要)
 学習コスト(⾼高)
ソルト
アンシブルってなんだろう? 38
 ⽇日本では無名に近いがPython版Chefと位置づけされる構成管理理ツール
 2011年年登場(Thomas S Hatch)
 Python実装
 オープンソース  (開発元  Saltstack社)
 YAML or 内部DSL(Pythonと同じ構⽂文)
 クライアントサーバー型(もしくは、単独実⾏行行も可能)
 スケーラビリティ(⼤大)
 共有リポジトリ(無)
 エージェント(要)
 学習コスト(⾼高)
ファブリックとキュイジーヌ
アンシブルってなんだろう? 39
 Fabricに構成管理理機能を拡張したラッパー
 2011年年登場(Jeff Forcier, Fabric)(Sébastien Pierre, Cuisine)
 Ruby実装
 オープンソース
 内部DSL(Pythonと同じ構⽂文。Fabricレシピを記述する)
 クライアントサーバー型(もしくは、単独実⾏行行も可能)
 スケーラビリティ(⼩小)
 共有リポジトリ(無)
 エージェント(不不要)
 学習コスト(低)
アンシブル
 新参者。構成管理理
 2012年年登場(Michael DeHaan)
 Python実装
 オープンソース  (開発元  Ansible社)
 YAML
 クライアントサーバー型(もしくは、単独実⾏行行も可能)
 スケーラビリティ(中)
 共有リポジトリ(有)(Ansible Galaxy)
 エージェント(不不要)
 学習コスト(低)
アンシブルってなんだろう? 40
アンシブルってなんだろう? 41
CONFIGURATION
MANAGEMENT
アンシブルについての考
察
ここまで眺めてきての雑感な
ど
サイコロ②  〜~⻄西⽇日本完全制覇〜~
アンシブルのユーザー
 Ansible is used by Atlassian, Twitter, OneKingsLane, Evernote, TrunkClub, edX,
hootsuite, GoPro, NewsCred, and Care.com, among others. (from wikipedia)
アンシブルってなんだろう? 43
アンシブルから想うこと
 軽量量プログラミング⾔言語の優位性
­  Lightweight Language, Python, Perl, PHP, Ruby
­  スクリプト⾔言語が故の特徴による貢献が⼤大きいと実感
­  コンパイル形式を採⽤用するプログラミング⾔言語との⼤大きな性質の違い
 ドメイン固有⾔言語は無ければそれに越したことはない
­  DSL (Domain Specific Language)
­  局所的な問題解決に特化したものであり、様々に有効であることは違いない
­  ですが、幾つも固有のDSLが登場すると覚えきれないし逆に⼿手間になる
 簡易易なデータフォーマットの隆盛
­  YAML と  JSON
­  構成情報の書式はなんでもかんでもJSONになりつつある
アンシブルってなんだろう? 44
アンシブルから視えること
 インフラ管理理のソフトウェア化
­  サーバー仮想化に端を発して、その上位層にまで波及
­  インフラそのものがソフトウェアとして抽象化
­  したがって管理理ツールもソフトウェア
­  構成を⾃自動化したい欲求が産まれる
 廃棄可能なインフラ
­  不不変な、状態を持たない、廃棄可能なインフラ
­ Disposable Infrastructure ☞  Immutable Infrastructure
­ Infrastructure as Code
   マイクロサービス
­  アーキテクチャというよりスタイルなのだろうか
­  思いかけずSOAとの邂逅となるのか、はたまたSOAが早すぎたのか
アンシブルってなんだろう? 45
参考資料料 ウェブサイト
サイコロ②  〜~⻄西⽇日本完全制覇〜~
アンシブルの語源
 ランチボックス型の超⾼高速通信機器
 An ansible is a fictional machine capable of instantaneous or
superluminal communication.
­ S.F. ハイニッシュ・サイクルシリーズに登場
­ アーシュラ・クローバー・ル=グウィン著作
­  Ursula K. Le Guin in her 1966 novel Rocannon‘s World
­  1st of Hainish Cycle series
Welcome to Ansible Galaxy
https://galaxy.ansible.com/
アンシブルってなんだろう? 47
ANSIBLE アンシブル
 ドキュメント
 http://docs.ansible.com/
 バージョン
  1.9.2 "Dancing In the Street" - Jun 26, 2015
­  Release名が  Van Halen の曲名になっています。
­  1.8 "You Really Got Me“, 1.7 "Summer Nights“, 1.6 "And the Cradle Will Rock“, … 1.0 "Eruption"
アンシブルってなんだろう? 48
神社2
­ Jinja2
­ Python のテンプレートエンジン
­ 名前の由来はテンプレート  ☞  テンプル(Temple, Shinto shrine)☞  神社
 Welcome to Jinja2
 http://jinja.pocoo.org/docs/dev/
アンシブルってなんだろう? 49

What is an Ansible?