入門Ansible
@takuan_osho
13年9月15日日曜日
Agenda
๏ 自己紹介
๏ 本セッションについて
• 本セッションの扱う対象である Ansible とは何か?
• 本セッションの対象者
• 本セッションで話すこと・話さないこと
๏ Ansibleを使う前に思いそうなこと
• Ansibleを使うと何が嬉しいのか?
• 他の類似ツールとは何が違うのか?
• Ansibleを動かすのに必要なシステム要件は?
• どんな企業が実際に使っているのか?
๏ Ansibleの基本的な使い方
13年9月15日日曜日
Agenda
๏ 自己紹介
๏ 本セッションについて
• 本セッションの扱う対象である Ansible とは何か?
• 本セッションの対象者
• 本セッションで話すこと・話さないこと
๏ Ansibleを使う前に思いそうなこと
• Ansibleを使うと何が嬉しいのか?
• 他の類似ツールとは何が違うのか?
• Ansibleを動かすのに必要なシステム要件は?
• どんな企業が実際に使っているのか?
๏ Ansibleの基本的な使い方
13年9月15日日曜日
自己紹介
๏清水 琢(しみず たく)
• @takuan_osho
• Blog : http://takuan-osho.hatenablog.com/
๏趣味でプログラミングをしている
• Python関連の勉強会
(Sphinx関連、PyFesなど)に
よく出ています
๏PyCon JP 2012 副座長
13年9月15日日曜日
Agenda
๏ 自己紹介
๏ 本セッションについて
• 本セッションの扱う対象である Ansible とは何か?
• 本セッションの対象者
• 本セッションで話すこと・話さないこと
๏ Ansibleを使う前に思いそうなこと
• Ansibleを使うと何が嬉しいのか?
• 他の類似ツールとは何が違うのか?
• Ansibleを動かすのに必要なシステム要件は?
• どんな企業が実際に使っているのか?
๏ Ansibleの基本的な使い方
13年9月15日日曜日
Ansibleとは何か?
一言で言うと
サーバ構築を自動化する
ツール
13年9月15日日曜日
Ansibleとは
๏共通したインターフェースで
メジャーなIT自動化の機能を提供してくれる
1. 構成管理
(Configuration Management)
2. アプリケーションのデプロイ
(Application Deployment)
3. 継続的デリバリー
(Continuous Delivery)
13年9月15日日曜日
Ansibleとは
๏共通したインターフェースで
メジャーなIT自動化の機能を提供してくれる
1. 構成管理
(Configuration Management)
2. アプリケーションのデプロイ
(Application Deployment)
3. 継続的デリバリー
(Continuous Delivery)
13年9月15日日曜日
作者
๏ Michael DaHaan氏
• AnsibleWorksの
Co-Founder、CTO
• Cobbler, Funcに
携わっていた
• 2012年にAnsibleの
Projectを立ち上げる
• 現実世界における
サーバ自動化の問題を
単純化したかった
13年9月15日日曜日
Ansibleとは何か?
一言で言うと
サーバ構築を自動化する
ツール
13年9月15日日曜日
本セッションの
対象者
๏初心者
•サーバー構築をやったことが無い人
•サーバー構築を手作業では
やったことがあるが、
ツールを利用してやったことは無い人
•Ansibleのことを初めて聞いた人
13年9月15日日曜日
本セッションで
話すこと
๏Ansibleをインストールした後、
デフォルトで出来ることに限定
•公式ドキュメントに書かれている
ことの中からポイント抜粋
      +
今まで集めてきた
Ansible関連の有用な情報
13年9月15日日曜日
本セッションで
話さないこと
๏インストールした後、
デフォルトではできないこと
๏具体的には…
• 他のツールやWebサービスとの連携
(Vagrant、AWSなど)
• モジュール開発、API
• Ansible AWX (WebUIサービス)
13年9月15日日曜日
Agenda
๏ 自己紹介
๏ 本セッションについて
• 本セッションの扱う対象である Ansible とは何か?
• 本セッションの対象者
• 本セッションで話すこと・話さないこと
๏ Ansibleを使う前に思いそうなこと
• Ansibleを使うと何が嬉しいのか?
• 他の類似ツールとは何が違うのか?
• Ansibleを動かすのに必要なシステム要件は?
• どんな企業が実際に使っているのか?
๏ Ansibleの基本的な使い方
13年9月15日日曜日
Ansibleを使うと
何が嬉しいのか?
๏ サーバーの環境構築を自動化できる
• 手作業によるミスの減少
• 新規環境をすぐに用意できる
• 実験的な環境構築・破壊が楽に
๏ 同じ環境を「複数台に」「並列に」
適用できる
• 開発・ステージング・本番環境を
全く同じように用意することが可能に
➡アプリケーションのデプロイ時の
トラブルを減らせる
13年9月15日日曜日
他の類似ツールとは
何が違うのか?
13年9月15日日曜日
13年9月15日日曜日
先日のPyConの
セッションで
こんなセッションがありました
13年9月15日日曜日
Pythonユーザの
ための構成管理入門
13年9月15日日曜日
よくまとまっているので
そちらから引用します
13年9月15日日曜日
詳しく知りたい方は
引用元を参照
• 「Pythonユーザのため
 の構成管理入門」
• 資料
• http://www.slideshare.net/
TakeshiKomiya/python-26185953
• 動画
• http://www.youtube.com/watch?
v=VDIxJjZEJJA
13年9月15日日曜日
類似ツールの比較図
13年9月15日日曜日
Ansibleの特徴
13年9月15日日曜日
Ansibleの特徴
๏ 冪等性(Idempotency)
• 何回やっても同じ結果になること
๏ Battery included
• 標準モジュールの豊富さ
๏ Push型のアーキテクチャが基本
• リモートホストに特別なプログラムを
事前にインストールする必要がない
(Python2.4以上があるリモートホストにssh接続できればOK)
๏ シンプル
• 設定はYAML - 読みやすい(書きやすい)
13年9月15日日曜日
Ansibleの特徴
๏ 冪等性(Idempotency)
• 何回やっても同じ結果になること
๏ Battery included
• 標準モジュールの豊富さ
๏ Push型のアーキテクチャが基本
• リモートホストに特別なプログラムを
事前にインストールする必要がない
(Python2.4以上があるリモートホストにssh接続できればOK)
๏ シンプル
• 設定はYAML - 読みやすい(書きやすい)
13年9月15日日曜日
Ansibleを動かすのに
必要なシステム要件は?
๏必要なシステム要件は2種類ある
•ローカルホスト側のシステム要件
•リモートホスト側のシステム要件
13年9月15日日曜日
ローカルホスト側に
必要なもの
๏Python 2.6 (or later)
•easy_install ansible
-> 以下のPythonモジュールも入る
‣paramiko
‣PyYAML
‣jinja2
13年9月15日日曜日
リモートホスト側に
必要なもの
๏Python 2.4 (or later)
•Python2.4の場合、
以下も必要
‣python-simplejson
13年9月15日日曜日
どんな企業が実際に
使っているのか?
13年9月15日日曜日
どんな企業が実際に
使っているのか?
13年9月15日日曜日
•https://github.com/edx/
configuration
•http://code.hootsuite.com/
automating-our-scala-deploys-
with-ansible-case-study/
使用例
13年9月15日日曜日
Agenda
๏ 自己紹介
๏ 本セッションについて
• 本セッションの扱う対象である Ansible とは何か?
• 本セッションの対象者
• 本セッションで話すこと・話さないこと
๏ Ansibleを使う前に思いそうなこと
• Ansibleを使うと何が嬉しいのか?
• 他の類似ツールとは何が違うのか?
• Ansibleを動かすのに必要なシステム要件は?
• どんな企業が実際に使っているのか?
๏ Ansibleの基本的な使い方
13年9月15日日曜日
シナリオ
✦リモートホスト(のOS)は
Ubuntu 12.04 LTS
• SSHで接続できる状態
✦リモートホストに設定したい内容
• build-essentialなど
各種パッケージをインストール
• apacheをインストール
• MySQLをインストール
13年9月15日日曜日
ディレクトリ構成
├── hosts
└── setup.yml
13年9月15日日曜日
ファイルの中身
├── hosts
└── setup.yml
(playbook = YAML形式)
13年9月15日日曜日
setup.ymlの中身
---
- hosts: all
user: vagrant
sudo: True
tasks:
- name: 基本的なパッケージをインストール
apt: pkg={{ item }} state=latest
with_items:
- build-essential
(省略)
- git
13年9月15日日曜日
setup.ymlの中身
- name: apacheのインストール
apt: pkg=apache2 state=latest
- name: MySQLのインストール
apt: pkg=mysql-server-5.5 state=present
13年9月15日日曜日
使用するコマンド
• 以下のコマンドを実行する
• ansible-playbook -i hosts setup.yml
13年9月15日日曜日
実行すると
どうなるか?
13年9月15日日曜日
PLAY [all]
********************************************************************
GATHERING FACTS
***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール]
******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-
dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-
dev,zip,git)
TASK: [apacheのインストール]
*********************************************************
changed: [192.168.33.50]
TASK: [MySQLのインストール]
**********************************************************
changed: [192.168.33.50]
PLAY RECAP
********************************************************************
192.168.33.50 : ok=6 changed=3 unreachable=0
failed=0
13年9月15日日曜日
とても楽!
13年9月15日日曜日
冪等性を
体感しよう
13年9月15日日曜日
もう一度
同じコマンドを実行
ansible-playbook -i hosts setup.yml
13年9月15日日曜日
PLAY [all]
********************************************************************
GATHERING FACTS
***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール]
******************************************************
ok: [192.168.33.50] => (item=build-essential,libsqlite3-
dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-
dev,zip,git)
TASK: [apacheのインストール]
*********************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール]
**********************************************************
ok: [192.168.33.50]
PLAY RECAP
********************************************************************
192.168.33.50 : ok=6 changed=0 unreachable=0
failed=0
13年9月15日日曜日
比較してみると…
13年9月15日日曜日
PLAY [all]
********************************************************************
GATHERING FACTS
***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール]
******************************************************
changed: [192.168.33.50] => (item=build-essential,libsqlite3-
dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-
dev,zip,git)
TASK: [apacheのインストール]
*********************************************************
changed: [192.168.33.50]
TASK: [MySQLのインストール]
**********************************************************
changed: [192.168.33.50]
PLAY RECAP
********************************************************************
192.168.33.50 : ok=6 changed=3 unreachable=0
failed=0
13年9月15日日曜日
PLAY [all]
********************************************************************
GATHERING FACTS
***************************************************************
ok: [192.168.33.50]
TASK: [基本的なパッケージをインストール]
******************************************************
ok: [192.168.33.50] => (item=build-essential,libsqlite3-
dev,libreadline6-dev,libgdbm-dev,zlib1g-dev,libbz2-dev,sqlite3,tk-
dev,zip,git)
TASK: [apacheのインストール]
*********************************************************
ok: [192.168.33.50]
TASK: [MySQLのインストール]
**********************************************************
ok: [192.168.33.50]
PLAY RECAP
********************************************************************
192.168.33.50 : ok=6 changed=0 unreachable=0
failed=0
13年9月15日日曜日
冪等性
• 何回やっても結果が同じになること
• 今回の場合
• 1度目
• 各種パッケージ・apache・MySQLが
新しくインストールされる
(=changed)
• 2度目
• 各種パッケージ・apache・MySQLは
既にインストールされているので無視される
(=ok)
13年9月15日日曜日
ファイルの中身
├── hosts
(inventory file = INI形式)
└── setup.yml
13年9月15日日曜日
hostsの中身
[local]
192.168.33.50
ansible_ssh_user=vagrant
ansible_ssh_port=22
13年9月15日日曜日
復習したい人は
๏以下のgithub, bitbucket上の
リポジトリに復習用のものを作りました
•https://github.com/takuan-osho/
pyconapac2013-ansible-session
•https://bitbucket.org/
takuan_osho/pyconapac2013-
ansible-session
13年9月15日日曜日
参考資料
๏ドキュメント
✦公式
• http://www.ansibleworks.com/
docs/
✦日本語訳
• https://github.com/shkumagai/
ansible-doc-ja
13年9月15日日曜日
参考資料
๏チュートリアル(非公式)
✦英語
• https://github.com/leucos/
ansible-tuto
✦日本語
• http://yteraoka.github.io/
ansible-tutorial/
13年9月15日日曜日
参考資料
๏ 構成管理ツールの比較記事
✦ 英語
• (Ansible, SaltStack)
• http://missingm.co/2013/06/ansible-and-salt-a-
detailed-comparison/
• (Ansible, Chef, Puppet)
• http://jjasghar.github.io/blog/2013/06/26/ansible-vs-
chef-vs-puppet/
✦ 日本語
• (Ansible, Chef, Fabric)
• http://hnakamur.github.io/blog/2013/09/01/tried-chef-
ansible-fabric/
13年9月15日日曜日
参考資料
• Continuous Deploymentについて
• http://www.youtube.com/watch?
v=PDRdCqFp2sY
• Flask/WSGI Applicationをデプロイする例
• http://mattupstate.com/python/devops/
2012/08/07/flask-wsgi-application-
deployment-with-ubuntu-ansible-nginx-
supervisor-and-uwsgi.html
13年9月15日日曜日
参考資料
๏ベストプラクティスの例
✦英語
๏http://www.stavros.io/
posts/example-
provisioning-and-
deployment-ansible/
13年9月15日日曜日
質問
13年9月15日日曜日

入門Ansible