SlideShare a Scribd company logo
Copyright CA Advance,inc
Ansibleで始めるinfraTDD
Ansible & TestKitchen (serverspec)
Driver Docker
Copyright CA Advance,inc
2
INDEX
• 概要
• Ansibleって?TestKitchen(serverspec)って?
• 対Chef比較
• ディレクトリ構成および各種ymlの機能
• TestKitchen / playbook 実施
• HANDS ON!
Copyright CA Advance,inc
3
概要
Ansibleとは!?
一言で「エージェントレスで手軽に利用出来る構成管理ツール」
ChefやPuppetなど各種構成管理ツールは存在するが、エージェン
トレスということもあり、Workstation(作業端末)を用意すること
で様々なOSに構成・構築を実施できるツールである。
Copyright CA Advance,inc
4
概要
TestKitchenとは!?
各プロビジョニングツールに対して、構成のテストを実施するツー
ルです。
ターゲットはvagrant / ec2 / dockerなどに対応しており、Driverとい
う定義でプロビジョニングおよびserverspecをキックして、構成が
正しいのかどうかをチェックすることができます。
Copyright CA Advance,inc
5
ChefとAnsible比較
項目 ChefServer Ansible
インストール
サーバー、エージェントそ
れぞれのインストール必須
WorkStationの設定のみで
OK
必要言語 Ruby Python
エージェント有無
対象サーバーに
chef-clientが必要
不要※但しssh鍵認証必須
可読性
自由に書けるが故、基準を
設ける必要がある
yml形式となっているので
書く人によっての差異が少
ない
ターゲット OS、仮想環境、ec2など 左記同様
Copyright CA Advance,inc
6
ChefとAnsible画像比較
Chef Server
作業端末
Node
レシピ取得実行レシピ登録
作業端末
Node
ssh connection
Playbookの実行
Copyright CA Advance,inc
7
比較注意点
【エージェントレス】=WorkStationとサーバーが一対となる構成
となる
そのため、環境構成をするためにはサーバー毎に対して実行をして
いくため、大規模な環境構築を必要とする場合はお勧めでない。
実績値はないが10〜30台ベースの環境構築であれば、Ansible
30〜数百台などとなる大規模なサーバーに関しては、エージェント
が導入されているchef-serverに優位性がある
Copyright CA Advance,inc
8
今回のゴール TDD
作業端末
Node
(2) Playbookの実行
(Develop)
(1)TestKitchenの実行
(Test)
Copyright CA Advance,inc
9
ディレクトリ構成
基本ディレクトリ構成
- production | development
- site.yml | webservers.yml
- group_vars|host_vars/
- roles/
- common
- files
- templates
- tasks
- handlers
- Webserver
best_practices
Copyright CA Advance,inc
10
ディレクトリ構成 全体内容 inventory
ansible/
#構成対象のサーバーIP or FQDNファイル
production | common | development
------
$ cat development
[webservers]
192.168.0.10 ansible_ssh_private_key_file=~/.ssh/id_rsa
-------
[]はグルーピングするための設定
IPアドレスの記述と、必要であれば上記のように秘密鍵の設定値、ポート番号の埋
め込みを行うことができる
Copyright CA Advance,inc
11
ディレクトリ構成 全体内容 attribute
#playbook内で利用する変数格納ディレクトリ
group_vars/ | host_vars /
----
$ cat group_vars/all
group:
- { name: kitchen }
- { name: wheel }
-----
yml 形式で変数(配列)を持たせることが可能
{{group.name}}で変数へのアクセスが可能となる
Copyright CA Advance,inc
12
ディレクトリ構成 全体内容 role-tasks
# 構成に必要な実実行ファイル軍を纏めたディレクトリ
roles/
- files/ #タスク内でサーバーに転送したいファイルなどを纏める
- templates/ #上記同様だが、変数を埋め込み配置することが可能
- tasks/ #構成を実行するファイル群 yml形式で記述する
- handlers/ #tasksと組み合わせ実行 主にrestartなどsystemをコントロールする役目
を担う
----
$ cat tasks/main.yml
- name: Install nginx (access not allowed by firewall)
apt: pkg=nginx state=present update_cache=yes
tags: nginx
sudo: yes
Copyright CA Advance,inc
13
ディレクトリ構成 全体内容 role-tasks
----
$ cat tasks/main.yml
- name: Install nginx (User directory)
notify: restart nginx
copy: src="nginx/default.conf" dest="/etc/nginx/conf.d/default.conf" owner=root group=root mode=0600
tags: sshd
sudo: yes
---
$ cat handler/main.yml
- name: restart nginx
service: name=nginx state=restarted
sudo: true
Copyright CA Advance,inc
14
ディレクトリ構成 全体内容 TestKitchen
$ cat .kitchen.yml
---
driver:
name: docker # テスト実行ドライバの選択(他にec2/vagrantなど)
use_sudo: false # docker実行時にはoff※おまじない
provisioner:
name: ansible_playbook # provisining toolの選択 他にchefなど
platforms:
- name: ubuntu-14.04 # 使用するイメージの選択
verifier:
ruby_bindir: ‘/usr/bin’ # serverspec使用時に利用するための環境変数セット
Copyright CA Advance,inc
15
ディレクトリ構成 全体内容 TestKitchen
$ cat test/integration/default/serverspec/localhost/webservers_spec.rb
describe package('nginx’) do
it { should be_installed } #packageが入っているか
end
describe service('nginx’) do
it { should be_enabled } # 起動ONになっているか
it { should be_running } # 動作しているか
end
Copyright CA Advance,inc
16
TestKitchen / playbook 実施
$ git clone ~~ ansible
$ cd ansible
$ bundle install # Gemfile群を一括インストール
$ bundle exec kitchen list #作成予定のコンテナチェック!
$ bundle exec kitchen create # コンテナの作成
$ bundle exec kitchen converge # Provisioner実行
$ bundle exec kitchen verify # serverspec実行
$ bundle exec kitchen destroy #コンテナの削除
# プロビジョニング実施!
$ ansible-playbook site.yml -i development -u ubuntu --private-key=~/.ssh/ansible-handson.pem
Copyright CA Advance,inc
17
TestKitchen / playbook handson!
実際にPlaybookを作ってみよう!
1.roles配下(主にcommon/tasks/main.yml)を編集して、phpをインストール!
2.nginx初期設定値が/home/<user>/public_html/を参照しているのでindex.phpを配布
してみよう
3.bundle exec kitchen verifyでindex.phpが配布されているかチェック!
4.brew install ansibleを実行して、inventory(development)に配置済みのopenstack環
境へ、リリースしてみよう!
参考サイト:
Ansible tasks記法:http://docs.ansible.com/ansible/playbooks_intro.html
Serverspec記法:http://serverspec.org/resource_types.html
ハンズオン用リポジトリ
Hands On github:https://github.com/vSakumoto/ansible_hands_on

More Related Content

What's hot

ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較Sugawara Genki
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
Taro Hirose
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
Daisuke Ikeda
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
Gosuke Miyashita
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudyTakeshi Komiya
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
Daiki Hayakawa
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
Hideki Saito
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
CLARA ONLINE, Inc.
 
ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!
ftnk
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Ken Sawada
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
靖 小田島
 
Chef windows linux環境構築
Chef windows linux環境構築Chef windows linux環境構築
Chef windows linux環境構築
靖 小田島
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
辰徳 斎藤
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
Yukihiko SAWANOBORI
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境
regret raym
 
Serverspecを使ってみた話
Serverspecを使ってみた話Serverspecを使ってみた話
Serverspecを使ってみた話
Yasufumi Moritake
 

What's hot (20)

ChefとPuppetの比較
ChefとPuppetの比較ChefとPuppetの比較
ChefとPuppetの比較
 
Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)Ansible 入門 #01 (初心者向け)
Ansible 入門 #01 (初心者向け)
 
serverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみようserverspecでサーバ環境のテストを書いてみよう
serverspecでサーバ環境のテストを書いてみよう
 
NDS#31
NDS#31NDS#31
NDS#31
 
Serverspec at Testing Framework Meeting
Serverspec at Testing Framework MeetingServerspec at Testing Framework Meeting
Serverspec at Testing Framework Meeting
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy明日から始める Chef 入門 #bpstudy
明日から始める Chef 入門 #bpstudy
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Puppetのススメ
PuppetのススメPuppetのススメ
Puppetのススメ
 
ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!ポリドックにServerspecを教えよう!
ポリドックにServerspecを教えよう!
 
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテストServerspecを使ってサーバ5000台のBaculaクライアントをテスト
Serverspecを使ってサーバ5000台のBaculaクライアントをテスト
 
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
AWSとAnsibleで実践!プロビジョニング入門‐Lamp+Laravel-
 
Chef windows linux環境構築
Chef windows linux環境構築Chef windows linux環境構築
Chef windows linux環境構築
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
DevOpsのアプローチと クラウド/バーチャル環境/構成管理ツール のお話
 
Chefで作る開発環境
Chefで作る開発環境Chefで作る開発環境
Chefで作る開発環境
 
Serverspecを使ってみた話
Serverspecを使ってみた話Serverspecを使ってみた話
Serverspecを使ってみた話
 

Similar to Ansibleで始めるinfraTDD(初級編)

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osakaNaotaka Jay HOTTA
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
Ryo Adachi
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
 
Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説
Changhwan Lee
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
yukihiro kawada
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
Tsukasa Kato
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
Hiroshi SHIBATA
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud AutomationEtsuji Nakai
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
npsg
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
Masahito Zembutsu
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較
Yoshinori Teraoka
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
Midori Oge
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
Hori Tasuku
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
atk1234
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
Masashi Shinbara
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
Yahoo!デベロッパーネットワーク
 

Similar to Ansibleで始めるinfraTDD(初級編) (20)

Cloudstack user group meeting in osaka
Cloudstack user group meeting in osakaCloudstack user group meeting in osaka
Cloudstack user group meeting in osaka
 
Ansibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングするAnsibleを使ってdockerコンテナをプロビジョニングする
Ansibleを使ってdockerコンテナをプロビジョニングする
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
 
Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説Jenkins cicdテンプレートazure版の利用方法解説
Jenkins cicdテンプレートazure版の利用方法解説
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
オトナのDocker入門
オトナのDocker入門オトナのDocker入門
オトナのDocker入門
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
Personal Cloud Automation
Personal Cloud AutomationPersonal Cloud Automation
Personal Cloud Automation
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較Docker swarm mode 入門と ECS との比較
Docker swarm mode 入門と ECS との比較
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
ビルドサーバで使うDocker
ビルドサーバで使うDockerビルドサーバで使うDocker
ビルドサーバで使うDocker
 
Dockerと継続的インテグレーション
Dockerと継続的インテグレーションDockerと継続的インテグレーション
Dockerと継続的インテグレーション
 

More from 佐久本正太

合同会社sirobako 会社概要 2020年度版
合同会社sirobako 会社概要 2020年度版合同会社sirobako 会社概要 2020年度版
合同会社sirobako 会社概要 2020年度版
佐久本正太
 
沖テクNight by sirobako
沖テクNight by sirobako沖テクNight by sirobako
沖テクNight by sirobako
佐久本正太
 
MySQL+Docker
MySQL+DockerMySQL+Docker
MySQL+Docker
佐久本正太
 
Bluemix + Bluetoothガジェット
Bluemix + BluetoothガジェットBluemix + Bluetoothガジェット
Bluemix + Bluetoothガジェット
佐久本正太
 
幹事代行Spheroくん
幹事代行Spheroくん幹事代行Spheroくん
幹事代行Spheroくん
佐久本正太
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法佐久本正太
 

More from 佐久本正太 (6)

合同会社sirobako 会社概要 2020年度版
合同会社sirobako 会社概要 2020年度版合同会社sirobako 会社概要 2020年度版
合同会社sirobako 会社概要 2020年度版
 
沖テクNight by sirobako
沖テクNight by sirobako沖テクNight by sirobako
沖テクNight by sirobako
 
MySQL+Docker
MySQL+DockerMySQL+Docker
MySQL+Docker
 
Bluemix + Bluetoothガジェット
Bluemix + BluetoothガジェットBluemix + Bluetoothガジェット
Bluemix + Bluetoothガジェット
 
幹事代行Spheroくん
幹事代行Spheroくん幹事代行Spheroくん
幹事代行Spheroくん
 
MySQL負荷分散の方法
MySQL負荷分散の方法MySQL負荷分散の方法
MySQL負荷分散の方法
 

Ansibleで始めるinfraTDD(初級編)