Contenu connexe
Similaire à Ansible ではじめるサーバ作業の自動化 (20)
Plus de Masashi Shinbara (18)
Ansible ではじめるサーバ作業の自動化
- 2. Agenda
• Ansible とは
• Ansible 基礎
• PHPプロジェクトでの導入事例
(c) 2014 Masashi Shinbara @shin1x1
- 6. 動作イメージ
$ ansible all -i hosts!
-m shell -a “date”
操作マシン対象サーバ
(c) 2014 Masashi Shinbara @shin1x1
- 18. モジュール
• 対象ホスト上で実行するタスク
• yum, apt, file, copy, composer 等々
• 244個のモジュール(2014.09.29現在)
• 冪等性が考慮されている
(shell, command以外)
(c) 2014 Masashi Shinbara @shin1x1
- 19. ansible コマンド
• インベントリファイルのホストに対して、
一つのモジュール実行
• 複数台に同じ操作を実行できる
• アドホックなコマンド実行に利用
(c) 2014 Masashi Shinbara @shin1x1
- 22. bash パッケージのバージョン確認
$ ansible all -i hosts!
-m shell -a “rpm -qv bash”!
192.168.33.101 | success | rc=0 >>!
bash-4.1.2-15.el6_4.x86_64!
!
192.168.33.102 | success | rc=0 >>!
bash-4.1.2-15.el6_4.x86_64
- 23. bash パッケージの更新
$ ansible all -i hosts -s!
-m yum -a "name=bash state=latest"!
192.168.33.102 | success >>!
(snip)!
!
192.168.33.101 | success >>!
(snip)
- 25. ---!
- hosts: all!
sudo: yes!
tasks:!
- name: httpdをインストール!
yum: name=httpd state=latest!
!
- name: httpdを起動!
service: name=httpd state=started!
- 26. 対象ホスト
---!
- hosts: all!
sudo: yes!
tasks:!
- name: httpdをインストール!
タスク名
yum: name=httpd state=latest!
!
- name: httpdを起動!
実行モジュール
service: name=httpd state=started!
- 27. $ ansible-playbook -i hosts base.yml!
!
PLAY [all] ********************************************************!
!
GATHERING FACTS
***************************************************************!
ok: [192.168.33.101]!
ok: [192.168.33.102]!
!
TASK: [httpdをインストール]
nameの値を表示
**********************************************************!
ok: [192.168.33.101]!
ok: [192.168.33.102]!
!
TASK: [httpdを起動]
**************************************************************!
ok: [192.168.33.102]!
ok: [192.168.33.101]!
!
PLAY RECAP
********************************************************************!
192.168.33.101 : ok=3 changed=0 unreachable=0 failed=0!
192.168.33.102 : ok=3 changed=0 unreachable=0 failed=0
- 28. 特殊な記法
• 変数値の展開
• 変数値による条件判定
• リストによるループ
• 別の playbook を読み込む
(c) 2014 Masashi Shinbara @shin1x1
- 29. ---!
- hosts: all!
sudo: yes!
vars:!
php56 が
展開される
php=php56 を
セット
php: php56!
tasks:!
- name: PHP をインストール!
yum: pkg={{ php }} state=latest!
- 30. tasks:!
- name: PHP5.6インストール!
yum: pkg={{ php }} state=present!
when: php == “php56”!
!
- name: PHP5.3インストール!
yum: pkg=php state=present!
when: php != “php56”!
!
php == “php56”
なら実行
php != “php56”
なら実行
- 31. tasks:!
- name: パッケージインストール!
yum: pkg={{ item }} state=present!
with_items:!
- php56!
- php56-common!
- php56-mbstring!
- php56-mcrypt!
!
各パッケージを
インストール
- 36. PHPプロジェクト
• ミドルウェアインストール
• ミドルウェア設定
• データベースセットアップ
• composer install
•アプリケーションデプロイ
• アプリケーションセットアップ
• EC2 インスタンス生成
etc…
(c) 2014 Masashi Shinbara @shin1x1
開発環境
CI環境
検証環境
本番環境
- 37. Vagrant(開発環境)
• Ansible は、シェルプロビジョンで VM に入れる
(ホストには Ansible を要求しない)
• local connection で playbook を実行
(c) 2014 Masashi Shinbara @shin1x1
- 38. Docker(CIサーバ)
• Dockerfile で、Ansible インストールして、
local connection で ansible-playbook 実行
• 自動テスト(phpunit) は、このコンテナ内で実行
(c) 2014 Masashi Shinbara @shin1x1
- 39. AWS(検証環境)
• EC2 インストール生成、プロビジョン、デプロイを
Ansible で一気に行う
• Route 53 に Public DNS を登録
(ex. dev.example.com の CNAME に割当)
(c) 2014 Masashi Shinbara @shin1x1
- 40. デプロイ(本番環境)
• syncronise モジュールでコード設置
• Capistrano スタイルのディレクトリ構成(自作)
• データベースマイグレーション
• キャッシュクリア
(c) 2014 Masashi Shinbara @shin1x1
- 41. デプロイ(本番環境)
!"" current -> releases/symlink to release_version!
!"" releases!
# # release_version1!
# $"" release_version2!
$"" shared!
• syncronise モジュールでコード設置
• Capistrano スタイルのディレクトリ構成
• シンボリックリンクによるバージョン変更
• アプリケーションセットアップ
(c) 2014 Masashi Shinbara @shin1x1
$"" storage!
!"" cache!
!"" logs!
!"" meta!
!"" sessions!
$"" views
- 43. まとめ
• Ansible は自動化ツール
• 仕組みが単純、習得も楽
• 適用範囲が広い
• マルチスタックな PHPer におすすめ
(c) 2014 Masashi Shinbara @shin1x1