Ansible(アンシブル)はソフトウェアのインストールや設定ファイルの設定・修正を自動化してくれる構成管理ツールです。
Vagrantの機能でAnsibleを呼び出すことが可能です。
Ansible ドキュメント — Ansible Documentation
Vagrant + Ansible
Vagrantを使用してAnsibleを試してみたいと思います。
Vagrant初期化
プロジェクトディレクトリ作成・移動
mkdir ansible
cd ansible
Vagrantfile作成
Vagrant.configure("2") do |config|
config.vm.box = "debian/buster64"
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.synced_folder "./data", "/vagrant", type:"virtualbox", create: true
config.vm.synced_folder "./provision/", "/tmp/provision"
config.vm.provision :ansible_local do |ansible|
ansible.playbook = "/tmp/provision/playbook.yml"
ansible.install = true
ansible.verbose = "v"
end
end
VagrantのAnsibleローカルプロビジョナ
を使い、ゲストOSにAnsibleをインストール・実行します。
provisionにansible_local
を設定します。
共有フォルダーでホストOSのAnsibleの設定を読み込ませます。
Ansible設定ファイル
Ansibleの設定ファイルはYAML形式で記述します。
mkdir -p provision/roles/php/tasks
---
- hosts: all
remote_user: root
sudo: true
roles:
- role: php
tags: "php"
---
- name: PHPインストール
apt:
name: "{{ packages }}"
vars:
packages:
- php-fpm
- php-mbstring
- php-zip
- php-xml
- php-gd
- php-imagick
- php-pgsql
- php-mysql
- php-sqlite3
- php-memcached
- php-xdebug
- name: PHP設定(fpm)
lineinfile:
dest: "/etc/php/7.3/fpm/php.ini"
backrefs: yes
regexp: '{{ item.regexp }}'
line: '{{ item.replace }}'
with_items:
- { regexp: '^;(date.timezone) =.*', replace: '\1 = Asia/Tokyo' }
- { regexp: '^(post_max_size) =.*', replace: '\1 = 128M' }
- { regexp: '^(upload_max_filesize) =.*', replace: '\1 = 120M' }
- name: PHP設定(cli)
lineinfile:
dest: "/etc/php/7.3/cli/php.ini"
backrefs: yes
regexp: '{{ item.regexp }}'
line: '{{ item.replace }}'
with_items:
- { regexp: '^;(date.timezone) =.*', replace: '\1 = Asia/Tokyo' }
- name: PHP-FPM設定
replace:
dest: /etc/php/7.3/fpm/pool.d/www.conf
regexp: "{{ item.regexp }}"
replace: "{{ item.replace }}"
with_items:
- { regexp: "^listen = .*", replace: "listen = 127.0.0.1:9000" }
- name: PHP-FPM再起動
service:
name: php7.3-fpm
state: restarted
- name: composerインストール
command: "{{ item }}"
with_items:
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php
- php -r "unlink('composer-setup.php');"
- mv composer.phar /usr/local/bin/composer
起動
vagrant up
起動時にAnsibleがインストール・実行されます。
このように設定ファイルを使ってさまざまなサーバの設定を自動化することが可能です。
Ansible Playbook作成
Ansibleの設定ファイルをPlaybookと呼びます。
Playbookの作成・開発を実機でやる場合、何度も再インストールをすることになります。
Vagrantを使用しても仮想マシンの削除・作成しなくてはならないので時間がかかります。
Vagrantのプラグイン sahara
を使うことにより、簡単にロールバックできる環境で作成・開発を行えます。
sandboxモード開始
vagrant sandbox on
Ansible設定
mkdir -p provision/roles/base/tasks
---
- hosts: all
remote_user: root
sudo: true
roles:
- role: base
tags: "base"
- role: php
tags: "php"
---
- name: タイムゾーン設定
timezone:
name: Asia/Tokyo
- include: locale.yml
---
- name: ロケール追加
locale_gen:
name: ja_JP.UTF-8
state: present
- name: ロケール反映
command: update-locale LANG=ja_JP.UTF-8
when: ansible_env.LANG | default('') != 'ja_JP.UTF-8'
provision実行
vagrant provision
Ansibleの設定が実行されます。
ゲストOSで、日本語・日本時間で表示されていることを確認。
vagrant ssh
date
cal
sandboxモード ロールバック
vagrant sandbox rollback
vagrant sandbox on
した時の状態に戻ります。
provisionとsandbox rollbackを繰り返しながらPlaybookの作成・開発が可能です。
AnsibleのPlaybookはGitHubなどで公開されているので参考にしてみると良いかもしれません。
コメント